среда, 22 июня 2016 г.

tab-magic v. 0.2

Продолжаем попытки повесить на клавишу Tab в Emacs все действия сразу. Первое нажатие выравнивает строку согласно лексеру, второе- динамическое дополнение (dabbrev, если возможно), или переключение между окнами, если дополнение не было найдено. Также стоит запретить dabbrev искать по остальным открытым буферам - иначе не будет работать правильно.
(defun tab-magic ()
  "Разные контекстные действия для Tab"
  (interactive)
  (let ((len (- (line-end-position) (line-beginning-position))))
    (defvar dabbrev-state nil)
    (defun dabbrev-point ()
      (if (boundp 'dabbrev--last-expansion-location)
   (format "%s" dabbrev--last-expansion-location)
 nil))
    (defun work-w-code ()
      (setq dabbrev-state (dabbrev-point))
      (indent-for-tab-command)
      (if (= (- (line-end-position) (line-beginning-position)) len)
   (unwind-protect
       (call-interactively 'dabbrev-expand)
     (if (string= dabbrev-state (dabbrev-point))
  (other-window 1)
       (setq dabbrev-state (dabbrev-point))))))

    ;; Настройки отдельных режимов (пример)
    (cond ((minibufferp) (minibuffer-complete))
   ;; 1
   ((eq major-mode 'org-mode) (if (org-at-heading-p)
      (org-cycle)
           (other-window 1)))
   ;; 2
   ((eq major-mode 'emacs-lisp-mode) (work-w-code))
    
   ;; 3
   ((eq major-mode 'sh-mode) (work-w-code))
   ;; 4
   (t (other-window 1))
   )))

0 коммент. :

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

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

Blogger Template by Blogcrowds