Shammer's Philosophy

My private adversaria

EmacsLisp行頭判定

EmacsLispで、カーソルが行頭にあるかどうか判定する関数を探したが、beginning-of-lineがヒットするばかりで自分の欲しいものが見つからなかったので自作したものをメモ。もっと良い方法ないのだろうか。そのものズバリなのがありそうな気もするのだが。

(defun cursor-is-beginning-of-line ()
  (equal "\n" (buffer-substring-no-properties (- (point) 1) (point))))

そもそも、これが欲しいと思ったのはカーソルが行頭かどうか判定して行頭なら何もしない、という処理を書きたいと思ったため。これを判定するテスト関数を用意。

(defun draw-line-left ()
  (interactive
   (cond ((cursor-is-beginning-of-line)
          nil)
         (t
          (insert "aaa")))))
(define-key global-map (kbd "C-c k") 'draw-line-left)

これを$HOME/.emacs.d/init.elに書いてEmacsを再起動し、*scratch*バッファでCtrl-c kの動作を確認。行頭にあるときだけ何も表示されなかった。期待通りに動作していそうだ(24.4.1)。