2012-07-27 14 views
12

C-Space +矢印キーを動かすだけで、elispでは同じ動作をしたいと思います。プログラムで領域を選択する

(名前空間に論理的にグループ化されていたり、何らかの形でタグ付けされている場合)正しい関数を見つけることができません。どちらですか?

答えて

15

C-h k キーを使用して、キーストロークをelispに変換できます。

set-mark-commandというマークを設定するためのelisp関数には、オプションではない引数が1つあります。 Emacsは特別なinteractive関数を使用して、elisp関数を引数で自然に書くことができます。これにより、他のelispプログラムで汎用的で再利用が容易になり、キーストロークから直接呼び出すことも可能です。また、C-uプレフィクスロジックが組み込まれています。

set-mark-commandの場合、その最初の機能は(interactive "P")です。これは、キーボードから呼び出されたときに接頭辞が引数として渡されることを意味します。あなたが最後にまたは他のアクティブなマークを残すためにEmacsに指示する必要があり

(defun my-select-current-line() 
    (interactive) 
    (move-beginning-of-line nil) 
    (set-mark-command nil) 
    (move-end-of-line nil) 
    (setq deactivate-mark nil)) 

注:現在のelispの中の行を選択するために、例えば

(set-mark-command nil) 

:あなたはとelispの中でこれを直接シミュレートすることができますリージョンはハイライト表示されません(ただし、ポイントとマークは、それらを去った場所になります)。

+0

ポイントを行の終わりに設定して '(set-mark-command 0)'を実行すると、ポイントは移動しますがマークは移動せず、何も選択されません。私は何が欠けていますか?ありがとうございました。 – vemv

+0

領域の先頭にマークを設定し、ポイントを最後まで移動します。また、argは実際にはゼロではなくnilでなければなりません。私は例で私の答えを更新しました。 – ataylor

+0

機能は動作します(ありがとう!)私は視覚的なフィードバックを得ていません。つまり、 'deactivate-mark'は違いがないようです。とにかく私の特定の目的のために重要ではない。 – vemv

1

この領域は、pointmarkの間のバッファの一部です。

+0

私は 'set-mark'を使う必要があると思います。しかし、POSの引数の予想される種類は何ですか? – vemv

4

あなたは次のように、コードをLISPのemacsにプッシュマークを使用する必要があります。

(defun mark-n (n) 
    "Programmtically mark the next N lines" 
    (interactive "nNum lines to mark: ") 
    (push-mark) 
    (next-line n)) 
3

をこの追加情報は、他の誰かに使用である念のために、私は次を見つけた:

  • プログラム的な動きについてはMoving Point
  • (point)(mark)のそれぞれの位置を取得するので、たとえば(set-mark (+ 5 (mark)))を実行できます。
関連する問題