13

矢印キーを押して移動するのと同じアクションをC-Spaceelispで実行したい.

適切な関数が見つからない (名前空間で論理的にグループ化されているか、何らかの方法でタグ付けされている場合...)。どちらですか?

4

4 に答える 4

18

を使用して、キーストロークを 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 に指示する必要があることに注意してください。

于 2012-07-27T14:55:32.557 に答える
4

この追加情報が他の人に役立つ場合に備えて、次のことを見つけました。

  • プログラムによる移動については、Moving Pointを参照してください。
  • (point)そして(mark)、それぞれの位置を取得するので(set-mark (+ 5 (mark)))、たとえば を実行できます。
于 2012-07-27T20:26:07.457 に答える
4

次のように、emacs Lisp コードで push-mark を使用する必要があります。

(defun mark-n (n)
  "Programmtically mark the next N lines"   
  (interactive "nNum lines to mark: ")
  (push-mark)  
  (next-line n))
于 2012-07-27T15:34:56.600 に答える
1

point領域はとの間のバッファの一部ですmark

于 2012-07-27T14:50:34.307 に答える