Учим Emacs хорошему тону :)
1. По умолчанию Emacs не закрывает временные (служебные) буферы, оставляя их висеть в списке. Возможно, я еще не достиг просветления и потому не понимаю, зачем оно нужно, но меня такое поведение категорически не устраивает. В прошлом посте была приведена функция 'rkill-buffers', которая закрывает все имхо ненужное, вот ей-то я и воспользуюсь снова:
2. Не в той раскладке!
Если вместо Ctrl+B на английском вы печатаете Ctrl+И на русском (и комбинация Ctrl+И ни к чему не привязана), то Emacs вызовет функцию 'undefined', которая выводит информационное сообщение "<Key> is undefined". Можно ее слегка переопределить:
3. Полезная функция ;)
- поиск по собственному коду и конфигам: вначале она полезна потому, что изучаешь язык и многое еще не понимаешь до конца, а потом- потому что забываешь, что, как, где и зачем.
UPD сентябрь 2015
Ну и правильный вариант "полезной функции", без всякого grep`а
(global-set-key (kbd "<escape>") (lambda ()
(interactive)
(keyboard-escape-quit)
(rkill-buffers wf-buffers-group1)))
Клавиша Esc в первую очередь выполняет стандартную функцию отмены действия. Лично я вообще не сторонник заучивания каких-либо клавиш по умолчанию, особенно не совпадающих в разных приложениях (в Emacs это Ctrl+G, а не Esc, в Firefox- Ctrl+T вместо Ctrl+N, и так далее), и исключений обычно не делаю.2. Не в той раскладке!
Если вместо Ctrl+B на английском вы печатаете Ctrl+И на русском (и комбинация Ctrl+И ни к чему не привязана), то Emacs вызовет функцию 'undefined', которая выводит информационное сообщение "<Key> is undefined". Можно ее слегка переопределить:
(defadvice undefined (around undefined-advice activate)
(shell-command "xdotool key ISO_Next_Group")
(message "Ru > En switched, try again!"))
чтобы в таком случае автоматически переключалась раскладка, в данном примере это сделано с помощью xdotool.3. Полезная функция ;)
- поиск по собственному коду и конфигам: вначале она полезна потому, что изучаешь язык и многое еще не понимаешь до конца, а потом- потому что забываешь, что, как, где и зачем.
(defun mylispcode-search ()
"Search string in Emacs *.el files"
(interactive)
(let ((q (read-string " > ")) (f "~/*.org ~/.emacs ~/.emacs.d/*.el"))
(message (shell-command-to-string (concat "grep -h -A 1 -B 1 " q " " f)))))
UPD сентябрь 2015
Ну и правильный вариант "полезной функции", без всякого grep`а
(defun mylispcode-search ()
"Search string in Emacs *.el files"
(interactive)
(let ( (lf (directory-files "~/.emacs.d/misc_settings/" t nil nil)) f)
(setq lf (cddr lf)) ;; remove "." and ".." links from list
(add-to-list 'lf "~/.emacs")
(generate-new-buffer "*SEARCH")
(with-current-buffer "*SEARCH"
(lisp-mode)
(dolist (f lf)
(insert (concat "\n [" (format "%s" f) "] \n\n"))
(insert-file-contents f)
(goto-char (point-max))))
(switch-to-buffer "*SEARCH")
(goto-char (point-min))
(re-search-forward (read-string ">> ") nil t)))
Отправить комментарий