первый запуск emacs' вам не покажет ничего особенного, но как только у вас возникнет проблема или неудобство, вы обязательно найдете решение (если конечно захотите). в этом посте я покажу вам некоторые вещи, которые помогли мне и, надеюсь, помогут вам. заранее предупреждаю, что некоторые функции из тех, что я перечислю ниже, написаны не мною и выражаю благодарность их авторам за то, что они сделали.
проверено и работает на emacs cvs.
ВИД.
1) начну с элементарного. интерфейс. я не пользуюсь кнопками, меню, скролл баром, т.к. считаю их неэффективными и безполезными. убираем их.
Код: Выделить всё
(scroll-bar-mode nil)
(tool-bar-mode nil)
(menu-bar-mode nil)
2) мне не нравятся цвета, что идут по умолчанию. решил заменить их на более темные и приятные глазу (у меня LCD).
Код: Выделить всё
(set-background-color «#333333»)
(set-foreground-color «#ffffff»)
если они вас не устраивают, вы можете посмотреть список всех цветов 'M-x list-color-display' и изменить на понравившийся. цвет курсора — (set-cursor-color <цвет>)
3) шрифты. вот тут можно спорить бесконечно. как многим известно, в emacs с относительно недавних пор появилась поддержка xft. кому-то оно может и нравится, но для программирования я больше предпочитаю bitmap шрифты. единственный минус — это utf8, далеко не все держат его. по этой причине я выбрал terminus. и 0 от о в нем отличишь, а это важный момент. я меняю шрифты через .Xdefaults. в windows это делается через реестр, гугл поможет.
Emacs.font: -*-terminus-medium-*-*-*-16-*-*-*-*-*-*-*
4) utf8. для правильного отображения utf8 в shell и dired.
Код: Выделить всё
(setq file-name-coding-system 'utf-8)
ГОРЯЧИЕ КЛАВИШИ И ПОЛЕЗНЫЕ МЕЛОЧИ
5) поменяйте capslock на ctrl. очень важная вещь. это, думаю, самое главное для эффективного использования emacs. насчет этого тоже возникает множество споров, но мне кажется это довольно удобным. добавьте в .xmodmaprc (если его нет у вас, создайте) следующее:
Код: Выделить всё
keycode 66 = Control_L
clear Lock
add Control = Control_L
добавьте строку в .xinitrc или .xsession, в зависимости от того, как вы грузите иксы.
Код: Выделить всё
xmodmap .xmodmaprc
6) удобный скроллинг и выделение текущей строки. по умолчанию emacs прокручивает почти на половину экрана, что крайне неудобно. исправим это. и еще бывает, что теряешь место курсора, для этого включаем подсветку текущей строки.
Код: Выделить всё
(setq scroll-step 1)
(global-hl-line-mode 1)
7) мы знаем, 'C-x o' переключает фокус на следущее окно. а если окон 5 или 10? делаем навигацию проще.
Код: Выделить всё
(windmove-default-keybindings 'meta)
теперь навигация будет проходить следущим образом: alt + \arrow keys\.
8) изменять размеры окна, по умолчанию, можно мышкой… для этого нужно убирать руку от клавиатуры. а это удобно? я тоже так думаю. добавлем следущее в .emacs.
Код: Выделить всё
(defun win-resize-top-or-bot ()
«Figure out if the current window is on top, bottom or in the
middle»
(let* ((win-edges (window-edges))
(this-window-y-min (nth 1 win-edges))
(this-window-y-max (nth 3 win-edges))
(fr-height (frame-height)))
(cond
((eq 0 this-window-y-min) «top»)
((eq (- fr-height 1) this-window-y-max) «bot»)
(t «mid»))))
(defun win-resize-left-or-right ()
«Figure out if the current window is to the left, right or in the
middle»
(let* ((win-edges (window-edges))
(this-window-x-min (nth 0 win-edges))
(this-window-x-max (nth 2 win-edges))
(fr-width (frame-width)))
(cond
((eq 0 this-window-x-min) «left»)
((eq (+ fr-width 4) this-window-x-max) «right»)
(t «mid»))))
(defun win-resize-enlarge-horiz ()
(interactive)
(cond
((equal «top» (win-resize-top-or-bot)) (enlarge-window -1))
((equal «bot» (win-resize-top-or-bot)) (enlarge-window 1))
((equal «mid» (win-resize-top-or-bot)) (enlarge-window -1))
(t (message «nil»))))
(defun win-resize-minimize-horiz ()
(interactive)
(cond
((equal «top» (win-resize-top-or-bot)) (enlarge-window 1))
((equal «bot» (win-resize-top-or-bot)) (enlarge-window -1))
((equal «mid» (win-resize-top-or-bot)) (enlarge-window 1))
(t (message «nil»))))
(defun win-resize-enlarge-vert ()
(interactive)
(cond
((equal «left» (win-resize-left-or-right)) (enlarge-window-horizontally -1))
((equal «right» (win-resize-left-or-right)) (enlarge-window-horizontally 1))
((equal «mid» (win-resize-left-or-right)) (enlarge-window-horizontally -1))))
(defun win-resize-minimize-vert ()
(interactive)
(cond
((equal «left» (win-resize-left-or-right)) (enlarge-window-horizontally 1))
((equal «right» (win-resize-left-or-right)) (enlarge-window-horizontally -1))
((equal «mid» (win-resize-left-or-right)) (enlarge-window-horizontally 1))))
(global-set-key [C-M-down] 'win-resize-mi2nimize-vert)
(global-set-key [C-M-up] 'win-resize-enlarge-vert)
(global-set-key [C-M-left] 'win-resize-minimize-horiz)
(global-set-key [C-M-right] 'win-resize-enlarge-horiz)
(global-set-key [C-M-up] 'win-resize-enlarge-horiz)
(global-set-key [C-M-down] 'win-resize-minimize-horiz)
(global-set-key [C-M-left] 'win-resize-enlarge-vert)
(global-set-key [C-M-right] 'win-resize-minimize-vert)
как видно из keymap' ом, 'ctrl + alt + \arrow keys\' резайзит окна.
9) думаю, не только меня раздражает, то что надо всегда набирать yes или no, когда закрываешь буфер или покидаешь emacs. не легче набрать y или n?
Код: Выделить всё
(fset 'yes-or-no-p 'y-or-n-p)
это сэкономит от одного до двух лишних нажатий.
10) при работе с большим количеством буферов я испытывал неудобство при переключении между ними, я долго не мог найти то, что мне нужно. оказывается, у emacs'а был режим и для этого.
Код: Выделить всё
(iswitchb-mode 1)
кстати, это старый вариант переключения между буферами. не пойму, зачем его убрали. теперь по нажатию 'C-x b' будет вызыватся iswitchb-buffer. он автоматически отбрасывает ненужное, а когда остается единственный вариант, то достаточно нажать tab и вы переключитесь на нужный буфер. единственный минус, который я заметил — если есть буферы с названиями: in и main, то введя in он выбирает main, а обратиться к in бывает невозможно. может и есть на это клавиша или команда, но я не нашел.
и еще я решил добавить более удобные клавиши для переключения на следущий/предыдущий буфер.
Код: Выделить всё
(global-set-key [?\C-,] 'previous-buffer)
(global-set-key [?\C-.] 'next-buffer)
11) бывают моменты, когда забываешь зажать ctrl для навигации через 'C-n' 'C-p' и т.д. и получаются ненужные последовательности типа: nnnnnnnnnnnn ppppppppppp ffffffff. не удалять же все backspace' ом… можно сделать горячую клавишу для bacward-kill-word.
Код: Выделить всё
(global-set-key «\C-w» 'backward-kill-word)
(global-set-key «\C-x\C-k» 'kill-region)
(global-set-key «\C-c\C-k» 'kill-region)
теперь чтобы «убить» выделенный текст придется нажимать 'C-x C-k', т.к. на 'C-w' мы назначили bacward-kill-region.
12) макросы — мощная вещь как в программировании, так и в emacs. они достойны того, чтобы выделить им удобные кейбиндинги.
Код: Выделить всё
(global-set-key [f2] 'kmacro-call-macro)
(global-set-key [f3] 'kmacro-start-macro-or-insert-counter)
(global-set-key [f4] 'kmacro-end-or-call-macro)
f2 — call macro
f3 — start macro
f4 — end macro
13) часто бывает, когда надо переключится на начало буффера, а потом обратно на место, где был ранее. для этого есть закладки. для удобства я добавил горячие клавиши для их вызова.
Код: Выделить всё
(global-set-key [f5] 'bookmark-set)
(global-set-key [f6] 'bookmark-jump)
f5, вводите имя закладки, делайте что нужно, f6, вводите имя закладки, и вы опять на том же месте.
14) используйте воркспейсы. это дает много новых возможностей. например, вы сможете читать почту с помощью gnus на первом воркспейсе, отлаживать программу на втором, редактировать код на третьем, а на пятом шелл. чертовски удобно, неправда ли?
вот ссылка на workspaces.el.
скопируйте его в свою загрузочную директорию. если у вас ее нет. то создайте директорию elisp (или как вам удобно) в домашнем каталоге (или как вам удобно) и добавьте в .emacs:
Код: Выделить всё
(add-to-list 'load-path «~/elisp»);; если уже подгрузили, то естественно это уже писать не надо
(require 'workspaces)
(global-set-key [?\C-q] 'workspace-goto)
я решил выбрать 'C-q'. 'C-q' \0-9\ — переключает на нужный воркспейс. как вы уже, наверное, поняли максимальное их количество- 9.
15) если вы работаете с большим количеством файлов/буферов и решили закрыть emacs, а потом решили возобновить работу. не открывать же их заново… попросим emacs сохранять сессию перед выходом.
Код: Выделить всё
(desktop-save-mode t)
КОНЕЦ
на этом всё. если вас интересует мой .emacs, обращайтесь, у меня там еще несколько записей касающиеся программирования и отладки. буду рад услышать вашу критику. с уважением, wzrd.