Додаток C Emacs і MS-DOS – ЧАСТИНА 2

У MS-DOS немає поняття про початковому каталозі, тому в MS-DOS Emacs робить вигляд, що каталог, в якому він встановлений – це значення змінної середовища HOME Тобто, якщо виконуваний файл Emacs, emacsexe, знаходиться в каталозі c :/ utils / emacs / bin, то Emacs поводиться так, як якби HOME була встановлена ​​рівної c :/ utils / emacs. Зокрема, саме тут Emacs шукає файл ініціалізації, _emacs. Памятаючи це, ви можете використовувати в іменах файлів знак ~ як псевдонім початкового каталогу, як ви робили б це в Unix Ви також можете встановити змінну середовища HOME до запуску Emacs її значення перекриє описане вище поведінка за умовчанням

Emacs обробляє в MS-DOS імя каталога / dev особливим чином, через деяких засобів в бібліотеках емулятора з DJGPP, які створюють видимість, що в цьому каталозі перераховані імена пристроїв введення / виводу Ми рекомендуємо уникати використання на будь-якому диску справжнього каталогу з імям / dev.

C4  Текстові файли і виконавчі файли

GNU Emacs використовує для розділення рядків знак перекладу рядка Ця угода відноситься до Unix, на якій GNU Emacs був розроблений, і в системах GNU, так як вони приймають Unix за модель

MS-DOS і MS-Windows зазвичай використовують для розділення рядків послідовність повернення каретки-прогон рядка (Прогон рядки – це той же знак, що і переклад рядка) Отже, для зручного редагування в Emacs необхідно перетворення цих послідовностей кінець-рядки (EOL) І зазвичай Emacs робить це: під час зчитування файлу він перетворює повернення каретки-переклад рядка в переклад рядка, а під час запису – переклад рядка в повернення каретки-переклад рядка Це перетворення реалізується тим же механізмом, що управляє перетворенням кодів знаків з різних мов (див Розділ 187 [Системи кодування], с 165)

Одним з наслідків цього особливого перетворення формату більшості файлів є те, що сообщаемая Emacs позиція знака (див Розділ 49 [Інформація про позицію], с 40) не відповідає інформації про розмірі файлу, відомої операційної системі

Деякі види файлів не повинні перетворюватися, так як їх вміст не є насправді текстом Отже, Emacs розрізняє в MS-DOS деякі файли як двійкові і зчитує і записує їх буквально (Це розрізнення – не частина MS-DOS воно робиться тільки в Emacs) Сюди включаються виконувані файли, стислі архіви і так далі Emacs вирішує, двійковий це файл чи ні, за його імені: шаблони імен, що вказують на виконавчі файли, визначаються змінної file-namebuffer-file-type-alist Зверніть увагу, якщо імя файлу відповідає одному з шаблонів для двійкових файлів в file-name-buffer-file-type-alist, Emacs використовує систему кодування no-conversion (див Розділ 187 [Системи кодування], с 165), яка вимикає всі перетворення кодування, а не тільки EOL

Крім того, якщо Emacs дізнається з вмісту файлу, що в ньому як роздільник рядків використовується переклад рядка, а не повернення каретки-прогон рядки, він не робить перетворення при читанні або запису цього файлу Таким чином, ви можете редагувати в MS-DOS файли з систем Unix або GNU без спеціальних зусиль, і в них залишаться знаки EOL в стилі Unix

Ви можете звернутися до файлу і вказати, чи потрібно сприймати його як текстовий або ж як двійковий, за допомогою команд find-file-text і find-file-binary Перетворення EOL – це частина більш загального механізму перетворення системи кодування, тому інший спосіб вказати це ж – скористатися командами для завдання системи кодування (див Розділ 189 [Завдання кодування], с 168) Наприклад, C-x hRETc undecided-unix hRETCx Cf foobartxt звернеться до файлу foobartxt без перетворення EOL

У рядку режиму показується, чи використовувалася для поточного буфера перетворення EOL Зазвичай після букви системи кодування на початку рядка режиму зявляється двокрапка Якщо в цьому буфері використовується перетворення послідовності кінець-рядки MS-DOS, цей знак замінюється на зворотну косу риску

Якщо ви використовуєте NFS або Samba для доступу до файлових систем, що знаходяться на компютерах з Unix або GNU, Emacs не повинен виробляти перетворення EOL для будь-яких файлів в цих файлових системах – навіть якщо ви створюєте новий файл Щоб зажадати це, позначте їх як нетрансльовані файлові системи, викликавши функцію

add-untranslated-filesystem Вона приймає один аргумент: імя файлової системи,

включаючи букву диска, і, можливо, каталог Наприклад,

(add-untranslated-filesystem &quotZ:&quot)

позначає як нетранслируемую файлову систему диск Z, а

(add-untranslated-filesystem &quotZ:\\foo&quot)

позначає як нетранслируемую файлову систему каталог \ foo на диску Z

Найчастіше add-untranslated-filesystem пишеться у файлі _emacs або ж у файлі

‘Site-startel, щоб всі користувачі вашої системи отримали від неї користь

Щоб скасувати дію add-untranslated-filesystem, використовуйте функцію remove-untranslated-filesystem Ця функція приймає один аргумент, який повинен бути такий же рядком, що була раніше передана add-untranslated-filesystem

C5  Друк в MS-DOS

Команди друку, такі як lpr-buffer (див Розділ 304 [Роздруківка], с 331) і psprint-buffer (див Розділ 305 [Postscript], с 332), можуть працювати в MS-DOS і MSWindows, посилаючи висновок на порти принтера, якщо недоступна команда в стилі Unix lpr Така поведінка контролюється тими ж змінними, що управляють печаткою через lpr в Unix (див Розділ 304 [Роздруківка], с 331, див Розділ 306 [Управління печаткою в Postscript], с 332), але MS-DOS і MS-Windows значення цих змінних за замовчуванням відрізняються від їх значень за замовчуванням в Unix

Якщо ви хочете використовувати ваш локальний принтер, що друкує звичайним для DOS чином, то встановіть лісповскую змінну lpr-command в значення ” (Це значення за замовчуванням), а printer-name – Рівний імені порту принтера – наприклад, PRN, звичайного порту локального принтера (це значення за замовчуванням), або LPT2, або COM1, для послідовного принтера Ви також можете встановити printer-name рівний імені файлу, в цьому випадку друкується висновок насправді додається в кінець цього файлу Якщо ви встановите printer-name в значення NUL, друкується висновок забувається (надсилається в системне нульове пристрій) без попереджень

У MS-Windows, коли встановлено мережеве програмне забезпечення, ви можете також використовувати принтер, що надається іншою машиною, встановивши printer-name рівний UNC-імені розділяється ресурсу для цього принтера – наприклад, / / joes_pc/hp4si. (Тут не має значення, пишете ви прості або зворотні косі риси) Щоб зясувати імена поділюваних принтерів, запустіть в командному підказкою DOS команду

‘Net view для отримання переліку серверів і net view імясервера , щоб побачити імена принтерів (і каталогів), що надаються цим сервером

Якщо ви встановлюєте printer-name рівний імені файлу, найкраще буде задати абсолютне імя Emacs змінює робочий каталог відповідно до каталогу за замовчуванням поточного буфера, так що якщо імя файлу в printer-name відносно, в результаті у вас виявиться кілька таких файлів, по одному в каталозі кожного буфера, звідки проводилася друк

Команди print-buffer і print-region викликають програму pr або використовують особливі перемикачі програми lpr, щоб створити на кожній надрукованій сторінці заголовок Зазвичай в MS-DOS і MS-Windows немає цих програм, тому за замовчуванням мінлива lpr-headers-switches встановлюється так, що запити на друк заголовків сторінок ігноруються Тому print-buffer і print-region дають той же висновок, що і lpr-buffer і lpr-region, відповідно Якщо у вас є підходяща програма pr (наприклад, з GNU Textutils), встановіть lpr-headers-switches рівний nil тоді Emacs викликатиме pr для створення заголовків сторінок і друкувати отриманий висновок, як зазначено змінної printer-name

Нарешті, якщо у вас є подібність lpr, ви можете встановити змінну lpr-command в значення lpr. Тоді Emacs буде використовувати для друку lpr, як і в інших системах (Якщо імя цієї програми відрізняється від lpr, встановіть lpr-command так, щоб вона вказувала, де її можна знайти) Коли lpr-command не дорівнює “, змінна lpr-switches несе свій звичайний сенс Якщо значенням змінної printer-name є рядок, то вона використовується як значення ключа -P для lpr, як і в Unix

Паралельний набір змінних, ps-lpr-command, ps-lpr-switches і ps-printername (див Розділ 306 [Управління печаткою в Postscript], с 332), визначає, як потрібно друкувати PostScript-файли Ці змінні використовуються таким же способом, як відповідні описані вище змінні для друку не в PostScript Таким чином, значення ps-printer-name використовується в якості імені пристрою (або файла), на яке посилається висновок PostScript, так само, як printer-name використовується для друку не в PostScript (Це два різних набору змінних у випадку, якщо у вас два принтера, приєднаних до різних портам, і лише один з них – PostScript-принтер)

Значення змінної ps-lpr-command одно за замовчуванням “, що направляє висновок PostScript на порт принтера, заданий в ps-printer-name Але ps-lpr-command можна також встановити рівний імені програми, що сприймає PostScript-файли Це означає, що якщо у вас не PostScript-принтер, ви можете задати в цієї змінної імя програми-інтерпретатора PostScript (такий як Ghostscript) Будь-які перемикачі, які необхідно передати інтерпретатору, вказуються у змінній ps-lpr-switches (Якщо значенням ps-printer-name є рядок, вона буде додана до списку перемикачів в якості значення ключа -P. Швидше за все, це буде корисно, тільки якщо ви користуєтеся lpr, тому, якщо ви друкуєте через інтерпретатор, вам слід Зробити ps-printer-name не рядки, щоб вона проігнорувала)

Наприклад, щоб використовувати Ghostscript для друку на принтері Epson, приєднаний-

ному до порту LPT2, помістіть в ваш файл _emacs такий код:

(Setq ps-printer-name t) Ghostscript не приймає-P (setq ps-lpr-command c :/ gs/gs386)

(setq ps-lpr-switches ’(&quot-q&quot &quot-dNOPAUSE&quot &quot-sDEVICE=epson&quot

&quot-r240x72&quot

&quot-sOutputFile=LPT2&quot &quot-Ic:/gs&quot))

(Це передбачає, що Ghostscript встановлений в каталозі “c :/ gs’.)

Для зворотної сумісності, якщо змінна dos-printer (dos-ps-printer) має значення, то воно перекриває значення printer-name (ps-printer-name) це відноситься тільки до MS-DOS і MS-Windows

C6  Підтримка різних мов в MS-DOS

Emacs підтримує в MS-DOS ті ж набори знаків різних мов, що і в Unix, і на інших платформах (див Глава 18 [MULE], с 161), включаючи системи кодування для перетворення між різними наборами знаків Однак, через несумісність між MS-DOS/MS-Windows і Unix у цієї підтримки є кілька специфічних для DOS аспектів, про які користувачі повинні знати Ці аспекти описані в даному розділі

M-x dos-codepage-setup

Приводить екран Emacs і системи кодування у відповідність з поточною кодо-

вої сторінкою DOS

M-x codepage-setup

Створює систему кодування для конкретної кодової сторінки DOS

За своїм дизайном MS-DOS підтримує один набір з 256 знаків в кожен момент часу, але дає вам вибрати з безлічі наборів знаків Ці альтернативні набори знаків відомі як кодові сторінки DOS Кожна кодова сторінка включає всі 128 знаків ASCII, але інші 128 (з кодами від 128 до 255) змінюються від однієї кодової сторінки до іншої Кожній кодової сторінці DOS присвоєно тризначний номер, як 850,

862, etc

На противагу X Windows, яка дозволяє вам використовувати декілька шрифтів одночасно, в MS-DOS не можна використовувати кілька кодових сторінок протягом одного сеансу Замість цього, MS-DOS завантажує одну кодову сторінку під час запуску, і щоб змінити кодову сторінку, ви повинні перезавантажити MS-DOS1 Практично ті ж обмеження застосовуються до виконуваних файлів DOS в інших системах, таких як MS-Windows

Якщо ви викликаєте Emacs в MS-DOS з ключем -unibyte (див Розділ A2 [Ключі запуску], с 386), Emacs не робить жодних перетворень знаків, що не входять в ASCII Навпаки, він зчитує і записує такі знаки буквально і буквально посилає їх восьмібітние коди на дисплей Таким чином, однобайтное Emacs підтримує в MSDOS поточну кодову сторінку, якою б вона не була, але не може уявити ніякі інші знаки

Для багатобайтові роботи на MS-DOS, Emacs повинен знати, які знаки може відображати обрана кодова сторінка DOS Тому він незабаром після старту посилає системі запит про номер обраної кодової сторінки і зберігає цей номер у змінній dos-codepage Деякі системи повертають 437, значення за замовчуванням, навіть якщо насправді кодова сторінка інша (Зазвичай це відбувається, якщо ви використовуєте кодову сторінку, вбудовану в дисплей) Ви можете веліти Emacs використовувати іншу кодову сторінку, встановлюючи у вашому файлі ініціалізації змінну dos-codepage

Багатобайтові Emacs підтримує тільки деякі кодові сторінки DOS, ті, що показують східні види письма, як японська кодова сторінка 932, і ті, які кодують один з наборів знаків ISO 8859

Далекосхідні кодові сторінки можуть безпосередньо відображати один з наборів знаків MULE для цих країн, тому Emacs просто готує до застосування підходящу систему кодування терміналу, яка підтримується цією кодовою сторінкою Описувані в решті частини голови особливі засоби відносяться в основному до кодовою сторінкам, що кодує набори знаків ISO 8859

Для кодових сторінок, які відповідають одному з наборів знаків ISO 8859, Emacs дізнається імя цього набору, грунтуючись на номері кодової сторінки Emacs автоматично створює систему кодування для підтримки читання і запису файлів в поточній кодової сторінці і використовує цю систему кодування за замовчуванням Імя цієї системи кодування – cpnnn, Де nnn – Це номер кодової страніци2

Всі системи кодування cpnnn використовують як мнемоніки для рядка режиму букву D (від DOS) Оскільки під час запуску і система кодування терміналу, і система кодування для введення / виведення файлів встановлюються в підходяще значення cpnnn, Рядок режиму в MS-DOS зазвичай починається -DD \ -. Див Розділ 13 [Рядок режиму], с 25

Так як кодова сторінка також вказує і на те, який вид листа ви використовуєте, Emacs автоматично запускає set-language-environment, щоб вибрати мовне середовище для цієї писемності (див Розділ 183 [Мовні середовища], с 162)

1 Зазвичай одна кодова сторінка прошита в памяті дисплея, тоді як інші можна встановлювати,

змінюючи системні файли конфігурації, а саме, CONFIGSYS, і перезавантажуючись

2 Стандартні системи кодування Emacs для ISO 8859 не підходять для цієї мети, оскільки зазвичай кодові сторінки DOS не відповідають стандартним кодами ISO Наприклад, літера ¸ c (c з Седільо) має в стандартному наборі символів Latin-1 код 231, але відповідна кодова сторінка 850 використовує для цієї букви код 135

Якщо буфер містить знак, що належить якомусь іншому набору ISO 8859, не тому, що підтримується обраної кодовою сторінкою DOS, Emacs показує його за допомогою послідовності символів ASCII Наприклад, якщо в поточній кодової сторінці немає гліфа для літери `o (маленької o з акцентом гравер), вона відображається як { o} , де фігурні дужки служать візуальним вказівкою на те, що це один знак (Це може виглядати дивно з деякими знаками не з латиниці, а, наприклад, з грецької або івриту але це все ж можна читати, якщо ви знаєте мову) Хоча знак може займає на екрані кілька стовпців, він насправді є поодиноким знаком, і всі команди Emacs розуміють його як одиночний

Не всім знакам з кодових сторінок DOS є відповідності в ISO 8859 – деякі використовуються для інших цілей, наприклад для псевдографіки У Emacs немає внутрішнього подання для цих знаків, тому коли ви зчитуєте файл, який містить такі знаки, вони перетворюються в певні знакові коди, що задаються змінної dosunsupported-character-glyph

Крім ISO 8859, Emacs підтримує багато інших наборів знаків, але він не може відображати їх в MS-DOS Тому, якщо в буфері зявляється один з таких багатобайтові знаків, Emacs для MS-DOS показує їх, як зазначено у змінній dos-unsupportedcharacter-glyph за замовчуванням цим гліфом є ​​марною трикутник Щоб побачити дійсний код такого знака і набір, до якого він належить, використовуйте команду C-u C-x = Див Розділ 49 [Інформація про позицію], с 40

За замовчуванням Emacs визначає систему кодування для підтримки поточної кодової сторінки Щоб визначити систему кодування для якоїсь іншої кодової сторінки (наприклад, щоб звернутися до файлу, написаному на машині з DOS в іншій країні), використовуйте команду Mx codepage-setup Вона запитує з можливістю завершення тризначний номер кодової сторінки, а потім створює для неї систему кодування Тоді для читання і запису файлу ви можете застосовувати цю нову систему кодування, але тоді ви повинні явно задавати її командам роботи з файлами (див Розділ 189 [Завдання кодування], с 168)

Ці системи кодування також корисні для звернення до файлів, що використовують кодові сторінки DOS, коли Emacs запущений на інших операційних системах

C7  Підпроцеси в MS-DOS

Оскільки MS-DOS – це однозадачная операційна система, асинхронні підпроцеси недоступні Зокрема, не працюють режим Shell і його варіанти Також не працюють більшість засобів Emacs, що використовують асинхронні підпроцеси, включаючи перевірку правопису і GUD Коли ви сумніваєтеся, спробуйте і побачите непрацюючі команди друкують повідомлення про помилку, яке говорить, що асинхронні підпроцеси НЕ підтримуються

Компіляція під Emacs з використанням Mx compile, пошук файлів за допомогою Mx grep і показ відмінностей між файлами за допомогою Mx diff насправді працюють, запускаючи підлеглі процеси синхронно Це означає, що ви не можете редагувати, поки підлеглий процес не завершиться

Навпаки, Emacs, скомпільований як рідне додаток Windows, підтримує

асинхронні підпроцеси Див Розділ C8 [Процеси під Windows], с 411

Команди друку, такі як lpr-buffer (див Розділ 304 [Роздруківка], с 331) і psprint-buffer (див Розділ 305 [Postscript], с 332), працюють в MS-DOS, посилаючи висновок на один з портів принтера Див Розділ C5 [Друк в MS-DOS], с 407

Коли ви запустили синхронний процес в MS-DOS, переконайтеся, що він завершився і не намагається читати введення з клавіатури Якщо програма не завершиться сама, ви не зможете перервати її вручну, тому що MS-DOS не надає загального способу перервати процес Іноді в таких випадках може допомогти натискання Cc або C-hBREAKi

Доступ до файлів на інших машинах не підтримується в MS-DOS Інші орієнтовані на роботу з мережею команди, такі як відправка пошти, ходіння по Web, віддалений вхід в систему і інші, теж не працюють, якщо в MS-DOS не вбудований доступ до мережі через мережевий редиректор

Dired в MS-DOS використовує пакет ls-lisp, де на інших платформах застосовується системна команда ls Тому Dired підтримує в MS-DOS лише деякі з можливих ключів, які ви можете перерахувати у змінній dired-listing-switches Працюють ключі -A, -a, -c, -i, -r, -S, -s, -t і -u.

C8  Підпроцеси в Windows  95 і NT

Emacs, скомпільований як рідне додаток 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, не використовуйте команду Shutdown в меню Start це тільки підвісить систему Замість цього, натисніть CTL-ALT-hDELі виберіть потім Shutdown Зазвичай це працює, хоча і може зайняти кілька хвилин

C9  Використання системного меню в Windows

Emacs, зібраний як рідне додаток Windows, зазвичай вимикає така властивість Windows, що притиснення клавіші hALTi  викликає меню Так робиться, тому що hALTi  працює в Emacs в якості hMETAi Часто при використанні Emacs користувачі

тимчасово натискають клавішу hMETAi, А потім міняють рішення якщо це буде викликати меню Windows, то сенс наступних команд зміниться Багато хто знаходить це неприємним

Ви можете знову задіяти обробку притиснення клавіші hALTi, Прийняту в Windows за замовчуванням, встановивши w32-pass-alt-to-system в відмінне від nil значення

Джерело: Річард Столмен, Керівництво по GNU Emacs

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*