dup-line(3)
もうちょっと詰めて当初の想定に近いものができた。そこら中変わってるのでもう一回。
(defun dup-line () (interactive) (labels ((indent () (buffer-substring (save-excursion (progn (goto-bol) (point))) (point)))) (let ((cur-indent (indent)) (cur-column (current-column)) (column (save-excursion (goto-eol) (current-column)))) (multiple-value-bind (from to) (save-excursion (values (while (backward-line) (goto-column cur-column) (if (equal (indent) cur-indent) (return (progn (goto-column column) (point))))) (progn (scan-buffer "[ -]\\|$" :regexp t :tail t) (point)))) (goto-eol) (if from (dolist (x (coerce (buffer-substring from to) 'list)) (overwrite-char x)) (message "ないよ"))) (if (= cur-column column) nil (goto-column cur-column)))))
「想定に近い」というのは、undoしたときのカーソルの位置が気にくわないので。位置が変わって欲しくないんだけど、どうすればいいのかさっぱり。