Modifica di un defun personalizzato per non entrare in conflitto con Magit
-
05-07-2019 - |
Domanda
Uso il seguente defun smart-tab nel mio .emacs per il completamento di una parola o semplicemente per fare una scheda standard:
(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)))))
Tuttavia, quando sto usando magit-status
per l'integrazione con git Git, in precedenza potevo selezionare un file che ha subito una modifica, premere la scheda e vedere immediatamente un diff su quel file per vedere cosa è stato modificato. Tuttavia, ogni volta che provo una scheda ora, ottengo il seguente errore nel mio mini-buffer.
indent-relative: Buffer is read-only: #<buffer *magit: my_project*
Qualche idea su come affrontare questo e forse applicare la smart-tab sopra solo a determinate modalità?
Grazie!
Soluzione
Sono il manutentore di smart-tab, disponibile da GitHub . L'ultima versione definisce una modalità minore che si spegne in un buffer di sola lettura o nel minibuffer, permettendo a cose come la modalità ido e magit di funzionare correttamente. È anche migliore nella gestione di situazioni in cui si desidera che la chiave esegua un comando diverso rispetto a indent-for-tab-command
, come la modalità organizzazione. Consiglio vivamente di utilizzare la versione di GitHub, in quanto evita molti mal di testa della versione di base con un keybinding globale.