矢印キーを押して移動するのと同じアクションをC-Space
elispで実行したい.
適切な関数が見つからない (名前空間で論理的にグループ化されているか、何らかの方法でタグ付けされている場合...)。どちらですか?
を使用して、キーストロークを elisp に変換できます。C-h k key
mark を設定するための elisp 関数は、set-mark-command
オプションではない引数を 1 つ取ります。Emacs は、特別なinteractive
関数を使用して、elisp 関数を引数付きで自然に記述できるようにします。これにより、キーストロークから直接呼び出すことが可能でありながら、他の elisp プログラムで簡単に再利用できる一般的なものになります。また、いくつかのC-uプレフィックス ロジックが組み込まれています。
の場合set-mark-command
、最初の関数は です(interactive "P")
。これは、キーボードから呼び出されたときにプレフィックスが引数として渡されることを意味します。これを elisp で直接シミュレートするには、次のようにします。
(set-mark-command nil)
たとえば、elisp で現在の行を選択するには、次のようにします。
(defun my-select-current-line ()
(interactive)
(move-beginning-of-line nil)
(set-mark-command nil)
(move-end-of-line nil)
(setq deactivate-mark nil))
最後にマークをアクティブのままにするように emacs に指示する必要があることに注意してください。
この追加情報が他の人に役立つ場合に備えて、次のことを見つけました。
(point)
そして(mark)
、それぞれの位置を取得するので(set-mark (+ 5 (mark)))
、たとえば を実行できます。次のように、emacs Lisp コードで push-mark を使用する必要があります。
(defun mark-n (n)
"Programmtically mark the next N lines"
(interactive "nNum lines to mark: ")
(push-mark)
(next-line n))
point
領域はとの間のバッファの一部ですmark
。