A small postscript - the save-excursion fix I suggested does not quite work as it leaves point _before_ the inserted terminator not after it. The following rearrangement works around that: (defun perl-electric-terminator (arg) "Insert character and adjust indentation. If at end-of-line, and not in a comment or a quote, correct the's indentation." (interactive "P") (let ((insertpos (point))) (and (not arg) ; decide whether to indent (eolp) (save-excursion (beginning-of-line) (and (not ; eliminate comments quickly (and comment-start-skip (re-search-forward comment-start-skip insertpos t)) ) (or (/= last-command-char ?:) ;; Colon is special only after a label .... (looking-at "\\s-*\\(\\w\\|\\s_\\)+$")) (let ((pps (parse-partial-sexp (perl-beginning-of-function) insertpos))) (not (or (nth 3 pps) (nth 4 pps) (nth 5 pps)))))) (progn ; must insert, indent, delete (insert-char last-command-char 1) (save-excursion (perl-indent-line)) (delete-char -1)))) (self-insert-command (prefix-numeric-value arg))) Keith Ponting Aurix Ltd, Malvern WR14 3SZ UK