2013-04-14 15 views
5

私の質問はthis answer by Trey Jacksonからthis question from SyntaxT3rr0rになります。emacs操作後に領域を選択したままにする

Treyは、Emacsバッファの選択された領域の2桁の数字をそれぞれインクリメントする次の関数を提案しています。

(defun add-1-to-2-digits (b e) 
    "add 1 to every 2 digit number in the region" 
    (interactive "r") 
    (goto-char b) 
    (while (re-search-forward "\\b[0-9][0-9]\\b" e t) 
    (replace-match (number-to-string (+ 1 (string-to-int (match-string 0))))))) 

私はこの機能を自分の目的に使用したいと考えています。しかし、私は何回も連続して数字を増やしたいと思います。関数の問題点は、現在のフォームでは、各呼び出しの前にマウスで再度領域を選択する必要があるということです。

私の質問は:呼び出し後に選択された領域を残すようにTreyの機能を変更するにはどうすればいいですか?(私の究極の目的は、私は私がすべて2桁の数字で、押さえキー↑CTRLを続ける場合ようにキーボードショートカット(CTRL + のようなもの)にこの機能を割り当てることです私の選択した領域は継続的に増加します。

ところで、私はthis answer by Brian Campbellを認識しています。これは、exchange-point-and-markを使用して以前に選択した領域を再選択することを示唆しています。しかし、私はそれを試みました、そして、このインスタンスでは助けにならないようです。

+1

+1ここで貼り付けたのはマクロではなく機能です。 * elispの* defun *はマクロではなく関数を定義しています:)(私はあなたの質問を編集し、 "マクロ"を "関数"に変更しました)。 Lispの方言のマクロは全く別の獣であることに注意してください。) – TacticalCoder

+1

多分愚かな提案ですが...あなたのショートカットへの最初の呼び出しの後に選択した領域が表示されない場合でも、再び?私のシステム上では、数値はそのまま書かれた関数を使って昇降し続けます。 – TacticalCoder

+0

本当にですか?うん、それは私にとっては起こりません。私はマウスで領域をハイライトしてから、「Mx add-1-to-2-digits」を実行して数字を増やし、「Mx add-1-to-2-digits」と入力します。何も起こりません。私たちは何をしていますか? –

答えて

5

はここにあなたの関数が答えで示唆されているようにsave-excursion内にラップlet (deactivate-mark)を使用するように変更されていますユーザーイベント_jrにリンク:

https://stackoverflow.com/a/11080667/903943

(defun add-1-to-2-digits (b e) 
    "add 1 to every 2 digit number in the region" 
    (interactive "r") 
    (save-excursion 
    (let (deactivate-mark) 
     (goto-char b) 
     (while (re-search-forward "\\b[0-9][0-9]\\b" e t) 
     (replace-match (number-to-string (+ 1 (string-to-int (match-string 0))))))))) 
関連する問題