Bene, il modo in cui paredit sembra funzionare è che controlla le tabelle di sintassi per vedere se stai inserendo una coppia subito dopo una parola/simbolo/ecc., nel qual caso costringe uno spazio da inserire. Devi sovrascrivere quella funzionalità, che può essere fatta in diversi modi: consigli, ridefinire la funzione determinin spazio g, modificare la tabella della sintassi, ecc
mi piacerebbe provare il dritto in avanti:
(defun paredit-space-for-delimiter-p (endp delimiter)
(and (not (if endp (eobp) (bobp)))
(memq (char-syntax (if endp (char-after) (char-before)))
(list ?\" ;; REMOVED ?w ?_
(let ((matching (matching-paren delimiter)))
(and matching (char-syntax matching)))))))
Ciò, ovviamente, si applicano a tutti i luoghi in cui si utilizza paredit
. Se desideri qualcosa di più specifico della modalità, puoi aggiungere alcune condizioni a quella dichiarazione and
(ad esempio (and ... (memq major-mode '(c-mode lisp-mode)))
).
Quindi ... Credo di aver cambiato la "fonte", ma si può fare la stessa cosa con un pezzo di defadvice
... è tutto chiaro, quindi la differenza è minima. Non sembra essere un'impostazione per controllare questo tipo di comportamento.
fonte
2009-05-27 03:36:21
ho sempre voluto questo per lungo tempo, dal momento che trovo autopair.el _very_ lento. Paredit ora funziona come un incantesimo in 'c-mode'. Grazie! :) –
Per essere specifici della modalità, si può anche scrivere '(defvar-local my-paredit-no-insert-space nil)' e usare '(e ... my-paredit-no-insert-space)' invece di '(e ... (memq major-mode '(c-mode lisp-mode))))' e quindi imposta 'my-paredit-no-insert-space' su' t' da 'c-mode-common- hook'. In questo modo due persone con le preferenze di differenza possono utilizzare la stessa nuova definizione di 'paredit-space-for-delimiter-p' –
' Se vuoi qualcosa di più specifico della modalità, puoi aggiungere alcune condizioni a questo e l'istruzione' - Voglio non sovrascrive questo per alcune modalità, ma non capisco quale istruzione 'if' posso aggiungere alla condizione. Puoi chiarire per favore? – Max