Приложение C  Emacs и MS-DOS – ЧАСТЬ 1

Этот  раздел кратко  описывает особенности  использования  Emacs под “операционной системой” MS-DOS (известной также  как “MS-DOG”).  Если вы соберете Emacs для MSDOS, этот двоичный файл можно будет также запустить на Windows 3.X, Windows NT, Windows 9X или OS/2 как приложение DOS; сведения из данной главы относятся ко всем этим системам, если вы используете Emacs, который был скомпилирован для MS-DOS.

Заметьте, что возможно собрать Emacs специально для Windows NT или Windows 9X. Если вы сделаете так,  большая часть главы будет неприменима к вашему случаю; тогда вы получите поведение, которое более близко к тому, что описано в остальной части руководства, и которое включает поддержку для длинных имен файлов, множественных фреймов, полосок прокрутки, меню для мыши и подпроцессов. Однако, раздел о текстовых и двоичных файлах все еще будет иметь силу. Также в конце этой главы есть два раздела, которые относятся исключительно к Windows NT и 9X.

C.1  Клавиатура и мышь в MS-DOS

Раскладки клавиатуры PC используют в качестве клавиши hMETAлевую клавишу hALTi. Вы можете выбрать между двумя способами эмулирования  клавиш hSUPERi  и hHYPERi:  использовать либо правый hCTRLi, либо правый hALTi, установив переменные dos-hyper-key и  dos-super-key, соответственно, в значение 1 или 2.  Если ни dos-super-key, ни doshyper-key  не  равна 1, то по умолчанию правый hALTi  также  отображается в клавишу hMETAi.   Однако, если установлена KEYB.COM,  программа для поддержки в MS-DOS многоязыковой  клавиатуры, Emacs не будет отображать правый hALTi  в hMETAi,  так как он используется для получения таких знаков, как ~ и @  в раскладках, отличных от раскладки US; в таком случае вы можете использовать в качестве клавиши hMETAтолько левый hALTi.

Переменная dos-keypad-mode  — это флаг, который управляет кодами, возвращаемыми клавишами дополнительной цифровой клавиатуры. Вы также можете определить клавишу hENTERi  с дополнительной клавиатуры как C-j,  поместив в ваш файл ‘_emacs’ следующую строку:

;; Делает так,  чтобы Enter  с дополнительной

;; клавиатуры действовал как  C-j.

(define-key  function-key-map [kp-enter] [?\C-j])

Клавиша, известная в Emacs как hDELi  (потому что таково ее назначение  на большинстве рабочих станций), на PC известна как  hBSi  (забой).  Поэтому специфичная для PC инициализация терминала изменяет отображение клавиши hBSi  таким образом, чтобы она действовала как hDELi; клавиша hDELотображается в C-d по тем же причинам.

Emacs, собранный для MS-DOS, распознает в качестве ключа  выхода комбинацию C-hBREAKi,  точно так  же,  как  C-g.  Это делается,  потому что Emacs не  может зарегистрировать нажатие C-g, если только он не готов к принятию ввода. Как  следствие, вы не можете использовать C-g для остановки запущенной команды (см. Раздел 32.1 [Выход], с. 371). Напротив, C-hBREAKi  можно уловить, как только вы ее набрали  (как C-g на других системах), поэтому ее можно применять для остановки работающей команды и для аварийного выхода (см. Раздел 32.2.8 [Аварийный выход], с. 374).

Emacs поддерживает в MS-DOS мышь (только на терминале по умолчанию). Команды мыши работают как  описано, включая те,  что  используют меню и полоску меню (см. Раздел 1.4 [Полоска меню], с. 26).  Полоски прокрутки  не  работают в MS-DOS Emacs. Мыши на PC обычно имеют только две кнопки; они действуют как Mouse-1 и Mouse-2, но если вы нажмете их вместе, то они подействуют как Mouse-3.

Собранный для MS-DOS и запущенный под Windows Emacs поддерживает  операции с буфером обмена. Команды, которые помещают текст в список уничтожений или восстанавливают текст из него, сначала проверяют  буфер обмена, так же, как в X Windows (см.

Раздел 17.1 [Команды мыши], с. 147).  В MS-DOS Emacs под Windows поддерживаются только первичное выделение и буфер вырезок; вторичное выделение всегда выглядит как пустое.

Доступ к  буферу обмена реализован  в Windows так,  что длина текста, который вы можете  в него поместить, ограничена количеством доступной Emacs свободной  памяти DOS. Обычно в буфере  может уместиться до 620KB текста, но этот предел зависит от конфигурации системы и будет меньше, если вы запустите Emacs как подпроцесс другой программы. Если уничтоженный текст не умещается, Emacs печатает сообщение об этом и не помещает  этот текст в буфер обмена.

Также, в буфер обмена Windows нельзя поместить знаки с нулевым кодом. Если уничтожаемый текст содержит нули, Emacs не будет записывать его в буфер обмена и напечатает об этом предупреждение в эхо-области.

Переменная dos-display-scancodes, если она не равна nil,  велит Emacs показывать ASCII-значение скан-кодов клавиатуры при каждом нажатии клавиши; эта возможность служит дополнением к команде view-lossage, она полезна для отладки.

C.2  Изображение в MS-DOS

В  MS-DOS нельзя использовать вариации шрифтов, такие как  курсив или жирный шрифт, но множественные начертания поддерживаются; каждое из них может определять цвета шрифта и фона.  Следовательно,  вы можете пользоваться  всей функциональностью пакетов Emacs, которые используют шрифты (таких как font-lock, режим Enriched Text и других), определяя подходящие начертания  как использующие различные цвета. Чтобы посмотреть, какие цвета и начертания доступны, и как они выглядят, запустите команду list-colors-display (см.   Раздел 17.10 [Параметры фрейма],  с. 153) и команду listfaces-display (см. Раздел 17.13 [Начертания],  с. 155).

См. Раздел C.6 [MS-DOS и MULE], с. 408, где описано, как Emacs отображает глифы и знаки, которые не поддерживаются  встроенными шрифтами.

Множественные  фреймы (см.  Глава 17 [Фреймы], с. 147) поддерживаются в MS-DOS, но они перекрываются, так что в одно время вы можете видеть только один из них. Этот единственный  фрейм занимает  весь экран. Когда вы запускаете Emacs в сеансе DOS изпод MS-Windows, вы можете сделать так, чтобы видимый фрейм занимал  не весь экран, но Emacs все равно не может показать более одного фрейма одновременно.

Команда mode4350 переключает между отображением  43 или 50 строк, в зависимости от вашей аппаратуры; команда mode25 переключает к размеру экрана по умолчанию, 80×25.

По умолчанию Emacs знает только как установить размер окна для 80-ти столбцов на

25, 28, 35, 40, 43 или 50 строк.   Однако, если у вашего видеоадаптера  есть особые видеорежимы, которые переключаю изображение в другие размеры, вы можете сделать так, чтобы Emacs поддерживал  и их тоже.  Когда вы просите Emacs изменить размер фрейма на n столбцов и m строк, он проверяет, есть ли переменная с именем screen-dimensionsnxm, и если она есть, использует ее значение   (которое должно быть целым числом) как видеорежим, в который нужно переключиться.  (Emacs переключается в этот видеорежим, вызывая функцию BIOS Set Video Mode со значением screen-dimensions-nxm в регистре AL.) Например, представим, что ваш адаптер переходит к размерам 66×80, когда его перевели в видеорежим 85. Тогда вы можете сделать так, чтобы Emacs поддерживал  этот размер экрана, поместив в ваш файл ‘_emacs’ следующее:

(setq  screen-dimensions-66×80 85)

Поскольку Emacs способен  в MS-DOS установить размер фрейма  только к  конкретным поддерживаемым  размерам, он не может следовать любому возможному запросу на его изменение.  Когда запрошен неподдерживаемый размер, Emacs выбирает следующий,

больший, чем указанный.  Например, если вы потребуете  фрейм 36×80, вместо этого вы получите 40×80.

Переменные screen-dimensions-nxm используются, только если они точно совпадают с указанным размером; при поиске следующего большего размера они игнорируются.  В примере выше, даже если ваш VGA-адаптер поддерживает  размер 38×80, и вы определили переменную screen-dimensions-38×80 с соответствующим значением, вы тем не  менее получите  экран 40×80, когда потребуете  сделать размер фрейма  равным 36×80.  Если вы хотите  получить в этом случае размеры 38×80, вы можете  сделать это, установив переменную с именем screen-dimensions-36×80 и тем же значением видеорежима, что и screen-dimensions-38×80.

Изменение размеров фрейма в MS-DOS приводит также к новым размерам и все осталь-

ные фреймы.

C.3  Имена  файлов в MS-DOS

MS-DOS обычно использует для разделения единиц имени файла обратную косую черту,  ‘\’,  а не обычную косую черту, как другие системы. Emacs под MS-DOS позволяет использовать и простую, и обратную косую черту, а также знает о буквах дисков в именах файлов.

Имена файлов  в MS-DOS регистронезависимы  и ограничены восемью знаками плюс необязательная точка и еще три знака. Emacs достаточно осведомлен об этих ограничениях, чтобы справляться с именами файлов, предназначенных  для других операционных систем. К примеру, начальные точки ‘.’ в имени файла недопустимы в MS-DOS, поэтому Emacs автоматически переводит их в подчерки ‘_’; так что ваш файл инициализации  по умолчанию (см. Раздел 31.7 [Файл инициализации], с. 366) называется в MS-DOS ‘_emacs’. Излишние знаки перед или после точки  обычно игнорируются самой MS-DOS; поэтому, если вы обращаетесь к файлу ‘LongFileName.EvenLongerExtension’, вы без предупреждений получите ‘longfile.eve’, но в строке режима Emacs все так же будет показывать это длинное имя файла. Во всех остальных отношениях вы сами должны заботиться об указании допустимых под MS-DOS имен файлов; описанное выше прозрачное преобразование действует только на имена файлов внутри Emacs.

Упомянутые выше ограничения на имена файлов в MS-DOS делают конструирование имен резервных  файлов почти невозможным (см.  Раздел 14.3.1.1 [Имена резервных файлов], с. 110) без потери некоторых знаков из первоначального имени файла. Например, именем резервного  файла для ‘docs.txt’ будет ‘docs.tx~’, даже  если использован единственный резервный файл.

Если вы запускаете Emacs как приложение DOS под Windows 9X, вы можете включить поддержку длинных имен файлов.  Если вы сделаете так, Emacs не станет усекать имена файлов или приводить их к нижнему регистру; напротив, он будет использовать имена файлов так, как вы их задали,  без изменений. Чтобы задействовать поддержку длинных имен файлов, установите переменную  среды LFN равной ‘y’ перед запуском Emacs. К сожалению, Windows NT не позволяет  программам DOS получать доступ к длинным именам файлов, так что собранный для MS-DOS Emacs будет видеть только их короткие псевдонимы в форме 8+3.

Источник: Ричард Столмен, Руководство по GNU Emacs

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий