Emacs для начинающих

       

Наращиваем мускулы Макросы и Shell


Надеюсь, мне удалось продемонстрировать, если и не все богатство штатных возможностей редактора NEdit, то - изрядную его долю. Однако величие программы в том, что штатными средствами его функциональность не исчерпывается. Поскольку может быть почти неограниченно наращена с помощью внутреннего языка макрокоманд - раз, и с помощью подключения скриптов командной оболочки - два.

Вкратце о возможности создания собственных макросов (путем написания их кода руками) я уже упоминал. Однако есть и другой способ, который для начала может оказаться более простым - протоколирование действий. Для этого требуется всего-навсего:

  • включить режим протоколирования (через меню Macro - Learn Keystrokes или через комбинацию Alt+K);
  • произвести посредством клавиатуры (но не с помощью мыши!) все необходимые действия в той последовательности, в какой мы хотим их сохранить на будущее;
  • завершить режим протоколирования (через меню Macro - Finish Learn или повторным нажатием комбинации клавиш Alt+K);
  • в случае ошибки при наборе команд - прервать протоклирование (через меню Macro - Cansel Learn) и, включив протоклирование по новой, повторить требуемые действия уже без ошибок.

Запротоколированная последовательность действий будет фуркционировать в течение данного сеанса работы с NEdit. И может быть вызвана первый раз через меню Macro - Reply Keystrokes и, в дальнейшем, через Macro - Repeat. Однако при следующем запуске NEdit будет утрачена.

Чтобы этого не случилось, следует сохнанить ее в меню для потомства. Для этого, успешно завершив протоклирование данного макроса, отправляемся в меню Preferences, выбираем там пункт Default Settings, а в нем - опцию Customize Menu. Каковая, в свою очередь обнаруживает, как уже говорилось, пункт Macro Menu, вызывающий панель Macro Commands.

В списке доступных команд (в левой части панели) фиксируемся на пункте New. В поле Menu Entry задаем название команды и, при необходимости, название более высокого уровня для группы сходных команд, например, таким образом: Group commands>Command1


(без пробелов перед и после знака >). Здесь же можно приписать команду к какому-либо из доступных языковых режимов, например, Group commands>Command1@SGML/HTML

будет указывать, что данная команда активизируется только при выборе языкового режима SGML/HTML.

Затем заполняем поле Accelerator. Здесь за нашей командой можно закремить какую-либо клавишу (из числа, например, функциональных, или Windows-клавиш) или их комбинацию: например, сочетание клавиш Alt или Ctrl, возможно, в сочетании с Shift, с какой-либо буквой, желательно, имеющей мнемонический смысл.

Для этого достаточно просто зафиксировать зафиксировать курсор в поле Accelerator и нажать требуемую клавишу (например, F12) или их комбинацию (скажем, Ctrl+литера). Следует только внимательно следить, чтобы эта клавишная комбинация не использовалась для вызолва штатных функций NEdit: в этом случае приоритет в любом случае будет за последними, а, возможно, клавишная комбинация не будет вызывать ни старого, ни нового закремленного действия.

Вслед за этим можно заполнить поле Mnemonic, введя в него какую-либо букву из имени нашей команды (как оно указано в поле Menu Entry). При вызове меню буква эта будет подчеркнута и, теоретически, может использоваться для быстрого вызова команды (сочетанием ее с клавишей Alt). Однако на деле это работает далеко не всегда. Вернее, почти всегда не работает, поскольку болшинство букв латинского алфавита уже задействованы для штатных команд NEdit.

Наконец, последнее из предварительных действие - это включение, по потребности, переключателя Requires Selection. Он предназначен для команд, которые осуществимы только с предварительно выделенными фрагментами (типа компирования, вырезания и т.д.).

А вот теперь нажимаем экранную клавишу Paste Learn/Replay Macro (правой части панели). И текст макроса волшебным образом появляется в поле Macro Command to Execute. Где может быть любым образом отредатирован, дополнен, сокращен и т.д. После чего жмем клавишу OK, выходя их режима редактирования Macro Menu - и с удовольствием и пользой применяем новую функцию на практике. Если все работает нормально - сохранаяем текущюю ситуацию через Preferences - Save Defaults для увековечивания внесенных нами изменений.

Каковые, как уже говорилось, фиксируются в секции nedit.macroCommands:



файла . nedit из пользовательского каталога. Где также могут быть отредактированы непосредственно.

Таким образом можно насытить меню редактора NEdit командами для выполнения часто требуемых, но отстутствующих в штатном комплекте действий. Например, как будет показано ниже, для ввода тэгов HTML. Однако и этого может показаться недостаточным для полного счастья. Например, возникнет потребность в систематическом исполнении каких-либо внешних программ. Например, команд оболочки.

Конечно, на сей предмет можно прибегнуть к стандартному окну термиала - во-первых, к строке минитерминала (вызываемой через меню Shell - Execute Command, или клавишной комбинацией (Alt+X) - во-вторых, и к непосредственному вводу команд в поле редактирования NEdit с последующим их запуском (через меню Shell - Execute Command Line) - в третьих. Однако все это - не предел комфорта.

К тому же подчас необходимо, чтобы команда оболочки выполнялась в отношении редактируемого в данный момент в NEdit документа. Примером чего служит приведенная в прошлом разделе команда ispell для проверки орфографии. И тут нам на помощь приходит возможность редактирования меню Shell (через Preferences - Default Settings - Customize Menu - Shell Menu).

Выбрав соотвествующие пункты приведенной последовательности, вызываем панель Shell Commands и выбираем из списка доступных команд пункт New. Подобно тому, как это проделывалось для макросов, заполняем поля Menu Entry, то есть имени команды (также, возможно, иерархически построенного и привязанного к языковому режиму), Acceleretor (для закремления комбинаций клавиш) и Mnemonic (для выделения литеры быстрого вызова).

Затем определяемся c входными элементами команды в строке переключателей Command Input. Здесь можно предписать команде исполняться для выделенного фрагмента (selection), текущего окна (window), каждого элемента документа (either) или ни для чего (none). Объяснить смысл каждого переключателя в общем виде я несколько затрудняюсь, но на практике смысл их в отношении каждой конкретной команды обычно достаточно прозрачен.

Аналогично - и с выходными элементами команды. Каковые могут быть показаны в текущем или новом окне, а также в виде диалоговой панели.

Следующая ниже группа переключателей при установке в положение On предписывает:




  • замещать элемент ввода элементом вывода (Output replace input);
  • сохранять текущий файл перед выполнением команды (Save file before executing command);
  • перечитывать его же после выполнения таковой (Re-load file after execute command).


Определившись и с этим, можно непосредственно задавать команду вместе со всеми требуемыми параметрами и их значениями. Это делается в поле ввода команды (Shell Command to Execute), точно также, как в командной строке консоли или терминального окна.

Однако можно и набрать команду непосредственно в поле редактирования NEdit, после чего просто скопировать (с помощью мыши или клавишных комбинаций) ее в поле ввода команды. Преимущество последнего способа в том, что предварительно (с помощью меню Shell Execute Command Line) можно проверить работоспособность команды и, руководствуясь сообщениями об ошибках, ее отредактировать. Можно, разумеется, и просто скопировать успешно запускаемую команду и окна терминала...

Завершив создание новой команды, принимаем введенные изменений (через экранную кнопку Apply) или выходим из режима редактирования Shell через OK. А, выполнив проверку правильности созданной команды, сохраняем ситуацию (через Save Defaults) для использования в дальнейшем.


Содержание раздела