質問: outline-mode にてある heading が sibling の中で末の要素であることを確認したいと考えています。 イメージとしては、 (defun last-sibling-heading-p () ......) が定義されるイメージなのですが、これはどう実装したらよいでしょうか?
回答: 「outline-mode にてある heading が sibling の中で末の要素であることを確認したい」 ということだと、 1. outline-modeのフォーマットのテキストデータをパーズして、その中の「末の要素」だけ抜き出す 2. Emacsのoutline-mode 中でをカーソルが、ある heading 上にあって、sibling の中では「末の要素」になっているかを確認する関数を作りたい 等の解釈ができるかと思います。 自分は、2の場合で回答したいと思います。 とりあえず、動作としては、 ``` (defun last-sibling-heading-p () (save-excursion (let ((start (point)) prev) (ignore-errors (outline-forward-same-level 1)) (setq prev (point)) (ignore-errors (outline-forward-same-level 1)) (and (= prev (point)) (>= start (point)))))) ;; M-x fooでカーソル位置のsiblingが「末の要素」かを確認する (defun foo () (interactive) (message (if (last-sibling-heading-p) "last" "butlast"))) ``` のようなものを想定されているのでしょうか。 このコマンドの場合 ``` * A ** a ** b ** c * B * C ``` のような場合、cの位置にカーソルがあれば、"last"と表示されます。 もしこの動作が希望ということであれば、上の実装はいい加減なものですので、 emacs-lispに詳しい方がもっと良い実装を教えてくれるかもしれません。