通常の飾り気のない答えは、を使用することlet
です。あなたが信じているように思われることに反して、それはグローバルストレージを割り当てません。実際、それは正反対です。
(let ((myvalue "temporary string"))
(message myvalue) )
=> "temporary string"
myvalue
=> Lisp error: (void-variable myvalue)
また、関数の実行中にのみ値が設定される変数を使用して、関数を簡単に作成できます。このinteractive
フォームを使用すると、ポイントとマークの値を簡単に取得できます。
(defun mysearch (point mark)
(interactive "r")
(let ((str (buffer-substring-no-properties point mark))
(message "your search for %s can commence ..." str) ) )
一般的なイディオムは、save-excursion
ポイントを別の場所に移動し、元の場所と最終的な場所の間の領域を取得して、それを使って何かを行うために使用することです。を終了するsave-excursion
と、カーソルの位置(およびその他のいくつかのもの)が以前の状態に戻ります。
(defun mysearch ()
(interactive)
(save-excursion
(let ((here (point)) str)
(forward-word -1)
(setq str (buffer-substring-no-properties (point) here))
(message "your search for %s can commence ..." str) ) ) )
おそらくあなたもhttp://ergoemacs.org/emacs/elisp_idioms.htmlを見たいと思うでしょう
関数の呼び出し間で値を保持する必要がある場合、一般的に行うことは、defvar
@philsが提案するような変数を使用することです。共通の接頭辞を持ついくつかの変数は、自分用に別のモジュールを作成する必要があるように聞こえます。名前空間のフットプリントが少ない柔軟なソリューションの場合は、独自のソリューションを作成しますobarray
(そして、ある種の第一人者のステータスを達成します)。http://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Symbols.html#Definition%20of%20mapatomsも参照してください。