Эта статеечка для начинающих пользователей Emacs, рассказывает об управлении окнами в этом замечательном редакторе.
Многие пользователи, работающие под Линуксом, так же как впрочем и под другими Unix-ами, а некоторые даже и под Windows, используют в качестве редактора Emacs.
Редактор не просто мощный, а сверхмощный, но как каждая мощная вещь, требует некоторых усилий в освоении. Расскажу про управление окнами.
Несколько слов о терминологии. В Emacs она несколько необычна. То, что обычно мы называем окном, в Emacs называется фреймом (frame). Окном (window) называется некоторая часть фрейма. Обычно окно занимает весь фрейм, но можно разделить фрейм на несколько окон, что очень, очень удобно.
Например команда C-x 2 делит текущее окно по горизонтали на два других окна, команда C-x 3 делает то же самое, но по вертикали, C-x 0 уничтожает текущее окно. Для навигации по окнам есть несколько способов. Первый, это просто кликнуть мышкой по нужному окну. Второй, использовать комбинацию клавиш «перейти к следующему окну», C-x o, команда/функция (other-window). Ну и третий способ, вставить в .emacs строчку:
Теперь можно двигаться по окнам, используя комбинацию клавиш Shift-<стрелка> или по emacs-овски, <S-up>, <S-down>, <S-left>, <S-right>.
То же самое можно делать из скриптов.
Таки образом, например определив в нашем файле .emacs функцию:
и вызвав ее на выполнение, мы получим следующую конфигурацию окон:
Лично я, в своем органайзере, на базе org-mode использую вот такую комбинацию:
Интересно, но какая из всего этого польза? Ну например, можем в каждом из окон открыть интересующий нас файл. Модифицируем функцию:
Так, хорошо, но вот если у нас уже поделено пространство на окна, наша функция делит текущее окно на три части, а мы хотим, чтобы наши окна занимали бы весь фрейм. Нет вопросов. Добавляем первой строчкой уничтожение других окон:
Теперь мы хотим, чтобы в правом окне, у нас находился бы всегда один и тот же буфер, с открытым файлом, а Emacs делает хочет, и запросто может поместить в нашем окне нежелательный нам буфер. Применим dedicated-mode. В Ubuntu он находится в пэкидже emacs-goodies. Итак, устанавливаем emacs-goodies. и добавляем в нашу функцию команду:
Обратите внимание на строчку (other-window 1), это мы перегнали курсор в нужное нам окно, и только тогда подали команду (dedicated-mode). Теперь наше правое окно будет всегда связано с буфером файла «file_1».
Эту же самую команду можно подать и интерактивно, она привязана к клавишам ESC M-d.
Табличка клавиш/функций:
Многие пользователи, работающие под Линуксом, так же как впрочем и под другими Unix-ами, а некоторые даже и под Windows, используют в качестве редактора Emacs.
Редактор не просто мощный, а сверхмощный, но как каждая мощная вещь, требует некоторых усилий в освоении. Расскажу про управление окнами.
Несколько слов о терминологии. В Emacs она несколько необычна. То, что обычно мы называем окном, в Emacs называется фреймом (frame). Окном (window) называется некоторая часть фрейма. Обычно окно занимает весь фрейм, но можно разделить фрейм на несколько окон, что очень, очень удобно.
Например команда C-x 2 делит текущее окно по горизонтали на два других окна, команда C-x 3 делает то же самое, но по вертикали, C-x 0 уничтожает текущее окно. Для навигации по окнам есть несколько способов. Первый, это просто кликнуть мышкой по нужному окну. Второй, использовать комбинацию клавиш «перейти к следующему окну», C-x o, команда/функция (other-window). Ну и третий способ, вставить в .emacs строчку:
(windmove-default-keybindings)
Теперь можно двигаться по окнам, используя комбинацию клавиш Shift-<стрелка> или по emacs-овски, <S-up>, <S-down>, <S-left>, <S-right>.
То же самое можно делать из скриптов.
Таки образом, например определив в нашем файле .emacs функцию:
(defun my-make-three-windows () "Make three windows" (interactive) (split-window-horizontally) (split-window-vertically) )
и вызвав ее на выполнение, мы получим следующую конфигурацию окон:
|-----------+-----------| | | | | | | |-----------+ | | | | | | | |-----------+-----------|
Лично я, в своем органайзере, на базе org-mode использую вот такую комбинацию:
+----------+---------------+---------------+ | | | | | | | | | | | | | +---------------+---------------+ | | | | | | | | | +----------+-------------------------------+
Интересно, но какая из всего этого польза? Ну например, можем в каждом из окон открыть интересующий нас файл. Модифицируем функцию:
(defun my-make-three-windows () "Make three windows" (interactive) (find-file "~/file_1") (split-window-horizontally) (find-file "~/file_2") (split-window-vertically) (find-file "~/file_3"))
Так, хорошо, но вот если у нас уже поделено пространство на окна, наша функция делит текущее окно на три части, а мы хотим, чтобы наши окна занимали бы весь фрейм. Нет вопросов. Добавляем первой строчкой уничтожение других окон:
(defun my-make-three-windows () "Make three windows" (interactive) (delete-other-windows) (find-file "~/file_1") (split-window-horizontally) (find-file "~/file_2") (split-window-vertically) (find-file "~/file_3"))
Теперь мы хотим, чтобы в правом окне, у нас находился бы всегда один и тот же буфер, с открытым файлом, а Emacs делает хочет, и запросто может поместить в нашем окне нежелательный нам буфер. Применим dedicated-mode. В Ubuntu он находится в пэкидже emacs-goodies. Итак, устанавливаем emacs-goodies. и добавляем в нашу функцию команду:
(defun my-make-three-windows () "Make three windows" (interactive) (delete-other-windows) (find-file "~/file_1") (split-window-horizontally) (find-file "~/file_2") (split-window-vertically) (find-file "~/file_3") (other-window 1) (other-window 1) (dedicated-mode))
Обратите внимание на строчку (other-window 1), это мы перегнали курсор в нужное нам окно, и только тогда подали команду (dedicated-mode). Теперь наше правое окно будет всегда связано с буфером файла «file_1».
Эту же самую команду можно подать и интерактивно, она привязана к клавишам ESC M-d.
Табличка клавиш/функций:
|---------+---------------------------+---------------------------------------| | Клавиши | Функция | Действие | |---------+---------------------------+---------------------------------------| | C-x 1 | delete-other-windows | Удалить другие окна, оставить текущее | | С-x 2 | split-window-vertically | Делит по вертикали | | C-x 3 | split-window-horizontally | Делит по горизонтали | | C-x 0 | delete-window | Уничтожает текущее окно | | ESC M-d | dedicated-mode | Влк/выкл назначенный режим | | C-x o | other-window | Перейти в следующее окно | |---------+---------------------------+---------------------------------------|