emacsタブ拡張
標準のlisp-modeのタブ動作では、望み通りにインデントされないことがあるので、バックタブ(Shift+Tab)用の関数を作成。
標準のタブでのインデント:
(multiple-value-bind (a b c) (values 1 2 3) (list a b c))
作成したバックタブ用関数でのインデント:
※ 一つ上のS式の位置より、半角スペース二つ分後ろにインデントされる
(multiple-value-bind (a b c) (values 1 2 3) (list a b c))
.emacsに追加したソースは下記の通り
(defun backtab () (interactive) (let ((old (progn (forward-line 0) (point))) (end (progn (backward-up-list) (point))) (beg (progn (forward-line 0) (point)))) (goto-char old) (let ((ts (thing-at-point 'whitespace))) (unless (and (= (length ts) 1) (char-equal ?\n (aref ts 0))) (delete-char (length ts)))) (while (< beg end) (let ((c (char-after beg))) (insert-char (if (char-equal c ?\t) ?\t ? ) 1)) (setq beg (+ beg 1))) (insert-char ? 2))) ;; 良く分からないのでグローバルで設定 (global-set-key [backtab] 'backtab)