Как безопасно переопределить клавишу табуляции только для отступа в Emacs - PullRequest
3 голосов
/ 07 декабря 2011

Я новичок в emacs, и мне не особо нравится, как режимы emacs обрабатывают отступы, особенно при смешивании режимов (скажем, ASP и perl). Я написал следующие функции для отступов, как это делал бы «классический» редактор:

(defun classic-indent (width)
  "Tab the current line or block the 'classic' way"
  (save-excursion
  (if (not (use-region-p)) (select-current-line))
  (indent-rigidly (mark) (point) width)))

(defun indent-forward ()
  "tab two space forward"
  (interactive)
  (classic-indent 2))

(defun indent-back ()
  "tab two spaces back"
  (interactive)
  (classic-indent -2))


(defun select-current-line ()
  "Select the current line"
  (interactive)
  (end-of-line) ; move to end of line
  (set-mark (line-beginning-position)))

Идея состоит в том, чтобы связать отступ с <backtab> и отступ с <tab>. Функции прекрасно работают при вызове их с помощью M-x, а привязка <backtab> работает отлично, но если я попытаюсь связать <tab> напрямую, это помешает всяким классным вещам, таким как автозаполнение. Я попытался установить indent-line-function с:

(setq indent-line-function 'indent-forward)

и установка функции отступа основных режимов с помощью:

(setq cperl-indent-command 'indent-forward)

но ни один из них не имеет никакого эффекта. Я не уверен, правильно ли я их настраиваю или это даже правильный подход.

Подводя итог, Как я могу переопределить отступ с помощью клавиши табуляции, не перекрывая другое поведение "табуляции", как автозаполнение?

1 Ответ

0 голосов
/ 03 января 2012

В вики Emacs есть целая страница категории об отступах и TAB: http://www.emacswiki.org/emacs/CategoryIndentation. Смотрите это для других вики-страниц о библиотеках или фрагментах, которые предоставляют различные виды поведения TAB DWIM («умный» TAB).Вот пара:

...