1

Cu プレフィックスで呼び出されたときにリージョンをタグ \begin{environment} および \end{environment} で囲み、タグ \item を各行の先頭に挿入するテンポ テンプレートを設定しようとしています。領域。ただし、「save-excursion: Args out of range: 2247, 2312」エラーが発生します。

(require 'tempo)
(setq tempo-interactive t)

(tempo-define-template "env"
'("\\begin{" (p "Environment: " environment) "}" > n>
r> n>
"\\end{" (s environment) "}" > n
(save-excursion
(narrow-to-region start end)
(goto-char (point-min))
(while (re-search-forward "^" nil t) (replace-match "\\item " nil t))
(widen)
))
"env"
"Insert a LaTeX environment.")

(defun item (start end)
(interactive "r")
(save-excursion 
(narrow-to-region start end)
(goto-char (point-min))
(while (re-search-forward "^" nil t) (replace-match "\\item " nil t))
(widen)
)) 

item 関数自体は、リージョンに対して正常に機能します。tempo-template で elisp 関数項目を呼び出してみました。

(tempo-define-template "env"
'("\\begin{" (p "Environment: " environment) "}" > n>
r> n>
"\\end{" (s environment) "}" > n
(item point-min point-max)
)
"env"
"Insert a LaTeX environment.")

ただし、これにより「eval: Symbol's value as variable is void: point-min」エラーが発生します。問題を解決するための指針をいただければ幸いです。

4

2 に答える 2

2

point-minpoint-maxは関数なので、次のように呼び出す必要があります(item (point-min) (point-max))

(tempo-define-template
 "env"
 '("\\begin{" (p "Environment: " environment) "}" > n>
   r> n>
   "\\end{" (s environment) "}" > n
   (item (point-min) (point-max))) ; HERE
 "env"
 "Insert a LaTeX environment.")
于 2012-08-08T07:15:41.890 に答える
0

@Deokhwan Kim: ご検討いただきありがとうございます。テンプレートで (item (point-min) (point-max)) を使用すると、バッファー全体で置換が行われます。(item (region-beginning) (region-end)) を使用すると、変更されたテンプレートが機能するようになりました。

(require 'tempo)
(setq tempo-interactive t)

(tempo-define-template
 "list"
'("\\begin{" (p "List environment: " environment) "}" > n>
r> (item (region-beginning) (region-end)) 
"\\end{" (s environment) "}" > n>
)
"list"
"Insert a LaTeX list environment.")

(defun item (start end)
(interactive "r")
(save-excursion
(narrow-to-region start end)
(goto-char (point-min))
(while (re-search-forward "^[^\\]" (point-max) t) (replace-match "\\item " nil t))
(widen)
))
于 2012-08-09T01:58:07.450 に答える