Изменение пользовательского определения, чтобы не конфликтовать с Magit - PullRequest
0 голосов
/ 22 октября 2009

Я использую следующую умную вкладку defun в моем .emacs для завершения слова или просто для стандартной вкладки:

(global-set-key [(tab)] 'smart-tab)
(defun smart-tab ()
  "This smart tab is minibuffer compliant: it acts as usual in
    the minibuffer. Else, if mark is active, indents region. Else if
    point is at the end of a symbol, expands it. Else indents the
    current line."
  (interactive)
  (if (minibufferp)
      (unless (minibuffer-complete)
        (dabbrev-expand nil))
    (if mark-active
        (indent-region (region-beginning)
                       (region-end))
      (if (looking-at "\\_>")
          (dabbrev-expand nil)
        (indent-for-tab-command)))))

Однако, когда я использую magit-status для интеграции с git Git, я мог предварительно выбрать файл, в который была внесена модификация, нажать вкладку и сразу же увидеть diff в этом файле, чтобы увидеть, что было изменено. Однако всякий раз, когда я пытаюсь открыть вкладку, в мини-буфере появляется следующая ошибка:

indent-relative: Buffer is read-only: #<buffer *magit: my_project*

Есть какие-нибудь мысли по поводу приближения к этому и, возможно, применения смарт-вкладки выше только для определенных режимов?

Спасибо!

1 Ответ

5 голосов
/ 22 октября 2009

Я поддерживаю смарт-таб, доступный от GitHub . Последняя версия определяет второстепенный режим, который отключается в буфере только для чтения или в минибуфере, позволяя таким вещам, как ido-mode и magit, работать должным образом. Это также лучше в ситуациях, когда вы хотите, чтобы клавиша запускала команду, отличную от indent-for-tab-command, например, org-mode. Я настоятельно рекомендую вам использовать версию GitHub, так как она позволяет избежать многих головных болей базовой версии с глобальным связыванием клавиш.

...