Il problema deriva dal fatto che si rimbalza da enter
a newline-and-indent
, che non sembra essere idiomatico quando si utilizza scala-mode
. newline-and-indent
termina chiamando il numero indent-according-to-mode
, che verifica alcune impostazioni indesiderate, aggirazza se necessario e, se tutto è OK, termina chiamando indent-line-function
, che è una variabile locale del buffer.
Poiché questo è specifico della modalità, le modalità definiscono il proprio indent-line-function
. La maggior parte hanno un comportamento piuttosto coerente, ma la funzione di Scala è scala-indent-line
, visto qui:
(defun scala-indent-line()
"Indent current line as smartly as possible.
When called repeatedly, indent each time one stop further on the right."
(interactive)
(if (or (eq last-command this-command)
(eq last-command 'scala-undent-line))
(scala-indent-line-to (+ (current-indentation) scala-mode-indent:step))
(let
((indentation (scala-indentation)))
(scala-indent-line-to indentation))))
La cosa divertente di questo è che rileva le chiamate ei rientri ripetuti ulteriormente nel corso di volta in volta. Quando si utilizza M-x, last-command
non è scala-indent-line
, è execute-extended-command
. Quindi, quando si usa M-x, continua a rientrare al livello di indentazione corretto. Quando viene associato a un tasto, tuttavia, rileva che è stato eseguito immediatamente in precedenza e introduce un ulteriore livello.
L'effetto non è cumulativo ... Credo che questo sia a causa del comando dispari impostare al termine della funzione, che fa rientrare inizialmente la linea, ma poi i controlli per la corretta indentazione con (scala-indentation)
e rientri di conseguenza.
Non sono al 100% su questo, ma a prima vista è quello che sembra andare avanti.
fonte
2010-09-01 04:59:04
Bene, allora la soluzione è quella di non lasciarlo in quel percorso di codice. Le seguenti opere: (locale-set-key [ritorno] '(lambda() (interattivo) (setq ultimo comando nullo) (newline-e-trattino))))) – qrest