Anche i miei 5 centesimi.
(setq skeleton-pair t)
(defvar skeletons-alist
'((?\(. ?\))
(?\" . ?\")
(?[ . ?])
(?{ . ?})
(?$ . ?$)))
(global-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "[") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "\"") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "\'") 'skeleton-pair-insert-maybe)
consiglio successivo consentirà al backspace alle cancella le coppie: una (|) b -> ab
(defadvice delete-backward-char (before delete-empty-pair activate)
(if (eq (cdr (assq (char-before) skeletons-alist)) (char-after))
(and (char-after) (delete-char 1))))
consiglio successivo farà backward-kill-word
(per me è M-backspace) per eliminare il par corrispondente anche se separato da altro testo; molto maneggevole.
(defadvice backward-kill-word (around delete-pair activate)
(if (eq (char-syntax (char-before)) ?\()
(progn
(backward-char 1)
(save-excursion
(forward-sexp 1)
(delete-char -1))
(forward-char 1)
(append-next-kill)
(kill-backward-chars 1))
ad-do-it))
Sto cercando di passare ora a paredit, però.
Ho usato una simile macro in precedenza, ma oggi uso così tanti editor diversi (emacs, vs, eclipse, pn) che non ho potuto fare affidamento su una funzione del genere. Invece ho interiorizzato questo comportamento e riesco a malapena a digitare un carattere di sinistra senza inserire in modo riflessivo il corrispondente carattere bilanciato. I non programmatori che mi vedono fare questo pensano che io sia strano. – Zano