thing-at-point はカーソル位置のいろいろな THING を得る関数です。
THINGはline, url, sexp, symbolなどいろいろ取りますが、
ユーザ側で拡張できます。
date-at-point.el(レビュー) は、dateが取れるように拡張したパッケージです。
コードを読めばとても簡単なので、それを使って org-mode の
カーソル位置の要素 org-element を取得できるようにしてみました。
驚くほど簡単です。
(require 'org-element) (defun org-element-at-point-bounds () (let ((e (org-element-at-point))) (cons (org-element-property :begin e) (org-element-property :end e)))) (put 'org-element 'bounds-of-thing-at-point 'org-element-at-point-bounds)
開始位置、終了位置のコンスセルを返す関数を定義し、
bounds-of-thing-at-point に登録するだけです。
以下のorg文書の先頭でテストしてみます。
#+BEGIN_EXAMPLE
H1-1
body1
H1-2
body2
#+END_EXAMPLE
#+BEGIN_SRC emacs-lisp :results silent
(with-temp-buffer
(org-mode)
(save-excursion
(insert "* H1-1
body1
H1-2
body2"))
(thing-at-point 'org-element)
;; => "* H1-1\nbody1\n"
(let ((b (bounds-of-thing-at-point 'org-element)))
b ; => (1 . 14)
(buffer-substring (car b) (cdr b)) ; => "* H1-1\nbody1\n"
))
#+END_SRC
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。