我想在组织模式下计算子树(标题)中的字符。现在,我已经弄清楚了如何计算单个段落中的字符,而不是多个段落中的字符。我首先定义一个源代码块:
#+NAME: countChars
#+BEGIN_SRC sh :var X="" :results output
echo "$X" | wc --chars
#+END_SRC
然后在命名段落上使用它:
#+NAME: paragraph
This is the paragraph
#+CALL: countChars(paragraph)
这很好用,但是#+ NAME:仅覆盖一个段落。我尝试使用标题作为参数,但无法使其正常工作。
编辑:根据评论,我想到了:
#+NAME: countChars
#+BEGIN_SRC emacs-lisp :results output :eval no-export :exports results
(interactive)
(save-excursion
(org-mark-subtree)
(setq a (- (mark) (point)))
(deactivate-mark)
(prin1 'Count= )
(prin1 a))
#+END_SRC
以
调用时几乎可以实现我想要的功能#+CALL: countChars()
但存在计数源代码块(包括其自身)以及文本的问题。我只想计算文字(不包括标题)。
答案 0 :(得分:3)
您只能在源块(而不是子树)前面使用#+NAME
。
用emacs lisp编写代码更容易。
此代码块将计算当前子树中的字符数,不包括内容的标题或最后一行: 如果要使用emacs lisp计算当前子树中的字符数,请尝试以下操作:
(save-excursion
(org-mark-subtree) ;mark the whole subtre
(forward-line 1) ;move past header
(exchange-point-and-mark) ;swap point and mark (ends of region)
(forward-line -1) ;move backwards past the last line
(let ((nchars (- (point) (mark))))
(deactivate-mark) ;clear the region
(message "%d" nchars))))