2010年11月14日日曜日

【XYZZYTips】「""」などの囲み文字を連続して入力したらカーソルを文字の間に移動させる

自分は開発作業で「XYZZY」というエディタを利用しているのですが、ネットとか見てると意外と利用者が多そうなので、自分で作ったスクリプトをちょっと公開してみようかと。

新人の頃に「"」などの囲み文字は「""」というように最初に対の形で入力して、その後に中身を書いていくという癖を付けられました。まあ、囲み文字を閉じ忘れるのにはいいと思うのですが、如何せんカーソルを一度戻して入力を続けるというのが結構面倒なんですよね。
今はPHPで仕事をしてるんですけど、PHPなんで当然HTMLタグとかも書いたりしてると、囲み文字が結構あって、その都度カーソル戻って入力するのが、結構嫌だった。

そこでXYZZYで「""」や「<>」と入力すると勝手に1文字分カーソルが戻ってくれるようなマクロを作りました。
こちらがソースになります。
;;囲み文字を入力したら、カーソルを戻して囲み文字の間にカーソルが入るようにする
(setq *backword-char-item-list* '((#\) "()") (#\] "[]") (#\} "{}") (#\' "\'\'") (#\" "\"\"") (#\> "<>")))
(defun backword-char-command-hook (list)
   (if (consp list)
      (let ((last-command (first (first list))) (back-key (first (rest (first list)))))
         (add-hook '*post-command-hook*
            #'(lambda()
               (if (and (eq *last-command-char* last-command)
                     (looking-back back-key)
                   ) (backward-char)))
         )
         (backword-char-command-hook (rest list))
      )
    ))
(backword-char-command-hook *backword-char-item-list*)
つたないコードですが、誰かの参考になれば幸いです。

0 件のコメント:

コメントを投稿