Перемещение курсора в режиме SGML
В главе "Перемещение курсора" говорилось о том, каким образом переместить курсор на один символ или слово влево или вправо, на строку вверх или вниз. PSGML усложняет структуру документа, в связи с чем возникают дополнительные требования к возможностям перемещения курсора.
Облегчить запоминание комбинаций клавиш перемещения курсора в режиме SGML, поможет тот факт, что в большинстве случаев клавиши, выполняющие аналогичные действия в Emacs и SGML, отличаются наличием в SGML-комбинациях клавиши Escape.
В Emacs перемещение курсора в начало и конец текущей строки осуществляется комбинациями клавиш C-a и C-e. PSGML-комбинации, осуществляющие перевод курсора в начало и конец текущего элемента выглядят как C-M-a (команда sgml-beginning-of-element) и C-M-e (команда sgml-end-of-element), также можно воспользоваться пунктами Beginning of element и End of element меню Move.
Чтобы "перепрыгнуть" на элемент вперед или назад, воспользуйтесь комбинацией C-M-f (sgml-forward-element) и C-M-b (sgml-backward-element) соответственно, либо воспользуйтесь пунктами Forward element и Backward element меню Move. Данные команды осуществляют перемещение по вложенным элементам. Например, если в элементе para при перемещении вперед был достигнут последний вложенный элемент, то в окне минибуфера появится сообщение:
No more elements in para element |
То же самое сообщение появится при попытке перемещения вперед внутри элемента, не содержащего вложенных элементов.
Sgml-backward-element ведет себя совершенно аналогично при достижении первого вложенного элемента.
Команды sgml-forward-element и sgml-backward-element демонстрируют интеллектуальные возможности PSGML, поскольку PSGML воспринимает документ не как простую совокупность текста и тэгов, а скорее как структурированный текст, в котором одни элементы являются частью других элементов, и все они объединены в определенной структуре. Три другие команды, которые используют преимущества структурированности документа, призваны помочь передвигаться по документу. Речь идет о командах sgml-down-element, sgml-up-element, и sgml-up-backward-element. (В дополнение к комбинациям клавиш, которые будут описаны ниже, имеет смысл упомянуть о пунктах Up element, Down element и Backward up element меню Move.) В данном случае перемещение "вверх" ("Up") и "вниз" ("Down") следует понимать в смысле перемещения вверх и вниз по уровням иерархии документа.
Нажатие C-M-d (команда sgml-down-element) осуществляет перемещение курсора вниз по иерархии документа, курсор перемещается в первую позицию после открывающего тэга.
При продвижении по иерархии элементов, имеется выбор перемещения курсора вперед или назад к пункту в родительском элементе текущего элемента. Команда sgml-up-element осуществляет перемещение по иерархии вверх. Запуск команды осуществляется нажатием комбинации клавиш C-c C-n. При нажатии данной комбинации курсор перемещается вперед по документу и вверх по иерархии. Т.е., если, например курсор был установлен внутри параграфа, то после нажатия C-c C-n, курсор будет установлен в первой позиции после закрывающего тэга данного параграфа. При повторном нажатии курсор перейдет в первую позицию после закрывающего тэга главы и т.д.
Перемещение курсора вверх по документу и вверх по иерархии осуществляется командой sgml-backward-up-element (комбинация клавиш C-M-u). При нажатии комбинации C-M-u курсор перемещается назад по документу и вверх по иерархии. Т.е., если, например курсор был установлен внутри параграфа, то после нажатия C-M-u, курсор будет установлен в первой позиции перед открывающим тэгом данного параграфа. При повторном нажатии курсор перейдет в первую позицию перед открывающим тэгом главы и т.д.
Другая полезная при перемещении курсора команда - это sgml-next-data-field (соответствующая комбинация - C-c C-d). Данная команда перемещает курсор в следующую позицию, где доступен ввод текстовой информации. Например, если курсор был установлен внутри параграфа, то после нажатия C-c С-d, курсор будет установлен после открывающего тэга следующего параграфа. Если внутри следующего параграфа есть вложенные элементы, внутри которых возможен ввод текста, то при повторном нажатии курсор будет установлен после открывающего тэга следующего вложенного элемента. Альтенативный способ запуска команды sgml-next-data-field - пункт Next Data Field меню Move.
Команда sgml-next-data-field бывает особенно полезной в случае вставки нескольких вложенных элементов командой sgml-insert-element (комбинация C-c C-e), когда не требуется немедленный ввод текста в каждый из элементов. Осуществлять навигацию по созданной структуре удобно нажатием C-c C-d.