вторник, 14 июля 2015 г.

Учим Emacs хорошему тону :)

1. По умолчанию Emacs не закрывает временные (служебные) буферы, оставляя их висеть в списке. Возможно, я еще не достиг просветления и потому не понимаю, зачем оно нужно, но меня такое поведение категорически не устраивает. В прошлом посте была приведена функция 'rkill-buffers', которая закрывает все имхо ненужное, вот ей-то я и воспользуюсь снова:
(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)))

0 коммент. :

Отправить комментарий

Следующее Предыдущее Главная страница

Blogger Template by Blogcrowds