|
Emacs и MS-DOSЭтот раздел кратко описывает особенности использования Emacs под "операционной системой" MS-DOS (известной также как "MS-DOG"). Если вы соберете Emacs для MS-DOS, этот двоичный файл можно будет также запустить на Windows 3.X, Windows NT, Windows 9X или OS/2 как приложение DOS; сведения из данной главы относятся ко всем этим системам, если вы используете Emacs, который был скомпилирован для MS-DOS. Заметьте, что возможно собрать Emacs специально для Windows NT или Windows 9X. Если вы сделаете так, большая часть главы будет неприменима к вашему случаю; тогда вы получите поведение, которое более близко к тому, что описано в остальной части руководства, и которое включает поддержку для длинных имён файлов, множественных фреймов, полосок прокрутки, меню для мыши и подпроцессов. Однако, раздел о текстовых и двоичных файлах всё ещё будет иметь силу. Также в конце этой главы есть два раздела, которые относятся исключительно к Windows NT и 9X. Клавиатура и мышь в MS-DOS
Раскладки клавиатуры PC используют в качестве клавиши META левую
клавишу ALT. Вы можете выбрать между двумя способами эмулирования
клавиш SUPER и HYPER: использовать либо правый CTRL,
либо правый ALT, установив переменные
Переменная ;; Делает так, чтобы Enter с дополнительной ;; клавиатуры действовал как C-j. (define-key function-key-map [kp-enter] [?\C-j]) Клавиша, известная в Emacs как DEL (потому что таково её назначение на большинстве рабочих станций), на PC известна как BS (забой). Поэтому специфичная для PC инициализация терминала изменяет отображение клавиши BS таким образом, чтобы она действовала как DEL; клавиша DEL отображается в C-d по тем же причинам. Emacs, собранный для MS-DOS, распознает в качестве ключа выхода комбинацию C-BREAK, точно так же, как C-g. Это делается, потому что Emacs не может зарегистрировать нажатие C-g, если только он не готов к принятию ввода. Как следствие, вы не можете использовать C-g для остановки запущенной команды (смотрите раздел Выход и аварийное завершение). Напротив, C-BREAK можно уловить, как только вы её набрали (как C-g на других системах), поэтому её можно применять для остановки работающей команды и для аварийного выхода (смотрите раздел Аварийный выход). Emacs поддерживает в MS-DOS мышь (только на терминале по умолчанию). Команды мыши работают как описано, включая те, что используют меню и полоску меню (смотрите раздел Полоска меню). Полоски прокрутки не работают в MS-DOS Emacs. Мыши на PC обычно имеют только две кнопки; они действуют как Mouse-1 и Mouse-2, но если вы нажмете их вместе, то они подействуют как Mouse-3. Собранный для MS-DOS и запущенный под Windows Emacs поддерживает операции с буфером обмена. Команды, которые помещают текст в список уничтожений или восстанавливают текст из него, сначала проверяют буфер обмена, так же, как в X Windows (смотрите раздел Команды мыши для редактирования). В MS-DOS Emacs под Windows поддерживаются только первичное выделение и буфер вырезок; вторичное выделение всегда выглядит как пустое. Доступ к буферу обмена реализован в Windows так, что длина текста, который вы можете в него поместить, ограничена количеством доступной Emacs свободной памяти DOS. Обычно в буфере может уместиться до 620KB текста, но этот предел зависит от конфигурации системы и будет меньше, если вы запустите Emacs как подпроцесс другой программы. Если уничтоженный текст не умещается, Emacs печатает сообщение об этом и не помещает этот текст в буфер обмена. Также, в буфер обмена Windows нельзя поместить знаки с нулевым кодом. Если уничтожаемый текст содержит нули, Emacs не будет записывать его в буфер обмена и напечатает об этом предупреждение в эхо-области.
Переменная Изображение в MS-DOSВ MS-DOS нельзя использовать вариации шрифтов, такие как курсив или
жирный шрифт, но множественные начертания поддерживаются; каждое из них
может определять цвета шрифта и фона. Следовательно, вы можете
пользоваться всей функциональностью пакетов Emacs, которые используют
шрифты (таких как Смотрите раздел Поддержка разных языков в MS-DOS, где описано, как Emacs отображает глифы и знаки, которые не поддерживаются встроенными шрифтами. Множественные фреймы (смотрите раздел Фреймы и X Windows) поддерживаются в MS-DOS, но они перекрываются, так что в одно время вы можете видеть только один из них. Этот единственный фрейм занимает весь экран. Когда вы запускаете Emacs в сеансе DOS из-под MS-Windows, вы можете сделать так, чтобы видимый фрейм занимал не весь экран, но Emacs все равно не может показать более одного фрейма одновременно.
Команда По умолчанию Emacs знает только как установить размер окна для 80-ти
столбцов на 25, 28, 35, 40, 43 или 50 строк. Однако, если у вашего
видеоадаптера есть особые видеорежимы, которые переключаю изображение в
другие размеры, вы можете сделать так, чтобы Emacs поддерживал и их
тоже. Когда вы просите Emacs изменить размер фрейма на n столбцов
и m строк, он проверяет, есть ли переменная с именем
(setq screen-dimensions-66x80 85) Поскольку Emacs способен в MS-DOS установить размер фрейма только к конкретным поддерживаемым размерам, он не может следовать любому возможному запросу на его изменение. Когда запрошен неподдерживаемый размер, Emacs выбирает следующий, больший, чем указанный. Например, если вы потребуете фрейм 36x80, вместо этого вы получите 40x80. Переменные Изменение размеров фрейма в MS-DOS приводит также к новым размерам и все остальные фреймы. Имена файлов в MS-DOSMS-DOS обычно использует для разделения единиц имени файла обратную косую черту, `\', а не обычную косую черту, как другие системы. Emacs под MS-DOS позволяет использовать и простую, и обратную косую черту, а также знает о буквах дисков в именах файлов. Имена файлов в MS-DOS регистронезависимы и ограничены восемью знаками
плюс необязательная точка и ещё три знака. Emacs достаточно осведомлен
об этих ограничениях, чтобы справляться с именами файлов,
предназначенных для других операционных систем. К примеру, начальные
точки `.' в имени файла недопустимы в MS-DOS, поэтому Emacs
автоматически переводит их в подчерки `_'; так что ваш файл
инициализации по умолчанию (смотрите раздел Файл инициализации, Если вы запускаете Emacs как приложение DOS под Windows 9X, вы можете включить поддержку длинных имён файлов. Если вы сделаете так, Emacs не станет усекать имена файлов или приводить их к нижнему регистру; напротив, он будет использовать имена файлов так, как вы их задали, без изменений. Чтобы задействовать поддержку длинных имён файлов, установите переменную среды `LFN' равной `y' перед запуском Emacs. К сожалению, Windows NT не позволяет программам DOS получать доступ к длинным именам файлов, так что собранный для MS-DOS Emacs будет видеть только их короткие псевдонимы в форме 8+3.
В MS-DOS нет понятия о начальном каталоге, поэтому в MS-DOS Emacs
делает вид, что каталог, в котором он установлен -- это значение
переменной среды `HOME'. То есть, если исполняемый файл Emacs,
Emacs обрабатывает в MS-DOS имя каталога Текстовые файлы и двоичные файлыGNU Emacs использует для разделения строк знак перевода строки. Это соглашение относится к Unix, на которой GNU Emacs был разработан, и в системах GNU, так как они принимают Unix за модель. MS-DOS и MS-Windows обычно используют для разделения строк последовательность возврат каретки-прогон строки. (Прогон строки --- это тот же знак, что и перевод строки.) Следовательно, для удобного редактирования в Emacs необходимо преобразование этих последовательностей конец-строки (EOL). И обычно Emacs делает это: во время считывания файла он превращает возврат каретки-перевод строки в перевод строки, а во время записи -- перевод строки в возврат каретки-перевод строки. Это преобразование реализуется тем же механизмом, что управляет преобразованием кодов знаков из разных языков (смотрите раздел Системы кодирования). Одним из следствий этого особого преобразования формата большинства файлов является то, что сообщаемая Emacs позиция знака (смотрите раздел Информация о позиции курсора) не соответствует информации о размере файла, известной операционной системе.
Некоторые виды файлов не должны преобразовываться, так как их
содержимое не является на самом деле текстом. Следовательно, Emacs
различает в MS-DOS некоторые файлы как двоичные и считывает и
записывает их буквально. (Это различение -- не часть MS-DOS; оно
делается только в Emacs.) Сюда включаются исполняемые файлы, сжатые
архивы и так далее. Emacs решает, двоичный это файл или нет, по его
имени: шаблоны имен, указывающих на двоичные файлы, определяются
переменной Кроме того, если Emacs узнает из содержимого файла, что в нем в качестве разделителя строк используется перевод строки, а не возврат каретки-прогон строки, он не делает превращения при чтении или записи этого файла. Таким образом, вы можете редактировать в MS-DOS файлы с систем Unix или GNU без специальных усилий, и в них останутся знаки EOL в стиле Unix.
Вы можете обратиться к файлу и указать, нужно ли воспринимать его как
текстовый или же как двоичный, с помощью команд В строке режима показывается, использовалось ли для текущего буфера преобразование EOL. Обычно после буквы системы кодирования в начале строки режима появляется двоеточие. Если в этом буфере используется преобразование последовательности конец-строки MS-DOS, этот знак заменяется на обратную косую черту.
Если вы используете NFS или Samba для доступа к файловым системам,
находящимся на компьютерах с Unix или GNU, Emacs не должен производить
преобразование EOL для любых файлов в этих файловых системах -- даже
если вы создаёте новый файл. Чтобы затребовать это, обозначьте их как
нетранслируемые файловые системы, вызвав функцию
(add-untranslated-filesystem "Z:") обозначает как нетранслируемую файловую систему диск Z, а (add-untranslated-filesystem "Z:\\foo") обозначает как нетранслируемую файловую систему каталог Чаще всего
Чтобы отменить действие Печать в MS-DOSКоманды печати, такие как
Если вы хотите использовать ваш локальный принтер, печатающий обычным
для DOS образом, то установите лисповскую переменную В MS-Windows, когда установлено сетевое программное обеспечение, вы
можете также использовать принтер, предоставляемый другой машиной,
установив Если вы устанавливаете
Команды
Наконец, если у вас есть подобие
Параллельный набор переменных, Значение переменной Например, чтобы использовать Ghostscript для печати на принтере Epson,
подсоединенному к порту `LPT2', поместите в ваш файл (setq ps-printer-name t) ; Ghostscript не принимает -P (setq ps-lpr-command "c:/gs/gs386") (setq ps-lpr-switches '("-q" "-dNOPAUSE" "-sDEVICE=epson" "-r240x72" "-sOutputFile=LPT2" "-Ic:/gs")) (Это предполагает, что Ghostscript установлен в каталоге
Для обратной совместимости, если переменная Поддержка разных языков в MS-DOSEmacs поддерживает в MS-DOS те же наборы знаков разных языков, что и в Unix, и на других платформах (смотрите раздел Поддержка разных языков), включая системы кодирования для преобразования между различными наборами знаков. Однако, из-за несовместимости между MS-DOS/MS-Windows и Unix у этой поддержки есть несколько специфичных для DOS аспектов, о которых пользователи должны знать. Эти аспекты описаны в данном разделе.
По своему дизайну MS-DOS поддерживает один набор из 256 знаков в каждый момент времени, но даёт вам выбрать из множества наборов знаков. Эти альтернативные наборы знаков известны как кодовые страницы DOS. Каждая кодовая страница включает все 128 знаков ASCII, но остальные 128 (с кодами от 128 до 255) изменяются от одной кодовой страницы к другой. Каждой кодовой странице DOS присвоен трехзначный номер, как 850, 862, etc. В противоположность X Windows, которая позволяет вам использовать несколько шрифтов одновременно, в MS-DOS нельзя использовать несколько кодовых страниц в течение одного сеанса. Вместо этого, MS-DOS загружает одну кодовую страницу во время запуска, и чтобы изменить кодовую страницу, вы должны перезагрузить MS-DOS(16). Практически те же ограничения применяются к исполняемым файлам DOS в других системах, таких как MS-Windows.
Если вы вызываете Emacs в MS-DOS с ключом
Для многобайтной работы на MS-DOS, Emacs должен знать, какие знаки
может отображать выбранная кодовая страница DOS. Поэтому он вскоре
после старта посылает системе запрос о номере выбранной кодовой страницы
и сохраняет этот номер в переменной Многобайтный Emacs поддерживает только некоторые кодовые страницы DOS, те, что показывают восточные виды письма, как японская кодовая страница 932, и те, которые кодируют один из наборов знаков ISO 8859. Дальневосточные кодовые страницы могут непосредственно отображать один из наборов знаков MULE для этих стран, поэтому Emacs просто подготавливает к применению подходящую систему кодирования терминала, которая поддерживается этой кодовой страницей. Описываемые в остальной части главы особые средства относятся в основном к кодовым страницам, кодирующим наборы знаков ISO 8859. Для кодовых страниц, соответствующих одному из наборов знаков ISO
8859, Emacs узнает имя этого набора, основываясь на номере кодовой
страницы. Emacs автоматически создаёт систему кодирования для поддержки
чтения и записи файлов в текущей кодовой странице и использует эту
систему кодирования по умолчанию. Имя этой системы кодирования ---
Все системы кодирования Так как кодовая страница также указывает и на то, какой вид письма вы
используете, Emacs автоматически запускает
Если буфер содержит знак, принадлежащий какому-то другому набору ISO 8859, не тому, что поддерживается выбранной кодовой страницей DOS, Emacs показывает его с помощью последовательности знаков ASCII. Например, если в текущей кодовой странице нет глифа для буквы ``o' (маленькой `o' с акцентом грав), она отображается как `{`o}', где фигурные скобки служат визуальным указанием на то, что это один знак. (Это может выглядеть странно с некоторыми знаками не из латиницы, а, например, из греческого или иврита; но это все же можно читать, если вы знаете язык.) Хотя знак может занимает на экране несколько столбцов, он на самом деле является одиночным знаком, и все команды Emacs понимают его как одиночный.
Не всем знакам из кодовых страниц DOS есть соответствия в ISO 8859 ---
некоторые используются для других целей, например для псевдографики. В
Emacs нет внутреннего представления для этих знаков, поэтому когда вы
считываете файл, содержащий такие знаки, они превращаются в определённые
знаковые коды, задаваемые переменной
Кроме ISO 8859, Emacs поддерживает много других наборов знаков, но он
не может отображать их в MS-DOS. Поэтому, если в буфере появляется один
из таких многобайтных знаков, Emacs для MS-DOS показывает их, как
указано в переменной По умолчанию Emacs определяет систему кодирования для поддержки текущей кодовой страницы. Чтобы определить систему кодирования для какой-то другой кодовой страницы (например, чтобы обратиться к файлу, написанному на машине с DOS в другой стране), используйте команду M-x codepage-setup. Она запрашивает с возможностью завершения трехзначный номер кодовой страницы, а затем создаёт для нее систему кодирования. Тогда для чтения и записи файла вы можете применять эту новую систему кодирования, но тогда вы должны явно задавать её командам работы с файлами (смотрите раздел Задание системы кодирования). Эти системы кодирования также полезны для обращения к файлам, использующим кодовые страницы DOS, когда Emacs запущен на других операционных системах. Подпроцессы в MS-DOSПоскольку MS-DOS -- это однозадачная "операционная система", асинхронные подпроцессы недоступны. В частности, не работают режим Shell и его варианты. Также не работают большинство средств Emacs, использующих асинхронные подпроцессы, включая проверку правописания и GUD. Когда вы сомневаетесь, попробуйте и увидите; неработающие команды печатают сообщение об ошибке, говорящее, что асинхронные подпроцессы не поддерживаются. Компиляция под Emacs с использованием M-x compile, поиск файлов с помощью M-x grep и показ различий между файлами с помощью M-x diff в действительности работают, запуская подчиненные процессы синхронно. Это означает, что вы не можете редактировать, пока подчиненный процесс не завершится. Напротив, Emacs, скомпилированный как "родное" приложение Windows поддерживает асинхронные подпроцессы. Смотрите раздел Подпроцессы в Windows 95 и NT.
Команды печати, такие как Когда вы запустили синхронный процесс в MS-DOS, убедитесь, что он завершился и не пытается читать ввод с клавиатуры. Если программа не завершится сама, вы не сможете прервать её вручную, потому что MS-DOS не предоставляет общего способа прервать процесс. Иногда в таких случаях может помочь нажатие C-c или C-BREAK. Доступ к файлам на других машинах не поддерживается в MS-DOS. Другие ориентированные на работу с сетью команды, такие как отправка почты, хождение по Web, удалённый вход в систему и другие, также не работают, если в MS-DOS не встроен доступ к сети через сетевой редиректор.
Dired в MS-DOS использует пакет Подпроцессы в Windows 95 и NTEmacs, скомпилированный как "родное" приложение Windows (в противоположность версии для DOS) включает полную поддержку асинхронных подпроцессов. В версии для Windows синхронные и асинхронные подпроцессы работают нормально как в Windows 95, так и в Windows NT, до тех пор, пока вы запускаете только 32-битные приложения Windows. Однако, если вы запускаете в подпроцессе приложение DOS, вы можете столкнуться с некоторыми проблемами или вообще не суметь запустить это приложение; а если вы одновременно запустили два приложения DOS в двух подпроцессах, вам, возможно, придется перезагрузить систему. Поскольку стандартный интерпретатор команд (и большинство утилит командной строки) в Windows 95 являются приложениями DOS, эти проблемы весьма важны. Но мы ничего не можем с этим поделать, их может исправить только Microsoft. Если вы запустили только один подпроцесс с приложением DOS, он должен работать, как ожидается, если только он "ведет себя хорошо" и не пытается получить прямой доступ к дисплею и не делает необычных действий. Если у вас есть программа отслеживания загрузки CPU, то она покажет, что машина загружена на 100%, даже если приложение DOS ничего не делает, но это просто пережиток того способа, которым эти программы измеряют загрузку CPU. Вы должны завершить приложение DOS до того, как запустите любое другое в отдельном подпроцессе. Emacs не может прервать или завершить подпроцесс DOS. Единственный способ остановить такой подпроцесс --- дать его программе команду выхода. Если вы попытаетесь одновременно запустить два приложения DOS в разных подпроцессах, второй будет приостановлен до завершения первого, даже если оба они асинхронные. Если вы можете перейти в первый подпроцесс и велеть ему выйти, второй процесс должен нормально продолжить работу. Однако, если второй подпроцесс синхронный, зависнет сам Emacs до тех пор, пока не завершится первый подпроцесс. Если это не может случаться без пользовательского ввода, вам не останется ничего, кроме как перезагрузиться, если вы работаете на Windows 95. Если у вас Windows NT, вы можете использовать монитор процессов, чтобы уничтожить нужный экземпляр ntvdm (это уничтожит оба подпроцесса DOS). Если вам приходится в такой ситуации перезагружать Windows 95, не
используйте команду Использование системного меню в WindowsEmacs, собранный как "родное" приложение Windows, обычно выключает такое свойство Windows, что прижатие клавиши ALT вызывает меню. Так делается, потому что ALT работает в Emacs в качестве META. Часто при использовании Emacs пользователи временно нажимают клавишу META, а потом меняют решение; если это будет вызывать меню Windows, то смысл последующих команд изменится. Многие находят это неприятным. Вы можете снова задействовать обработку прижатия клавиши ALT,
принятую в Windows по умолчанию, установив Назад | Вперед | Содержание |
|
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2024 |
Социальные сети