C-M-p/C-M-nで対応するダブルクオートに飛ぶ
なんか欲しくなったので書いてみた. backward-list/forward-listへのアドバイスとして.
何をするかと言えば, ポイントが「"」にあれば, C-M-pやらC-M-nで対応する「"」に飛ぶだけ.
普通は, 中括弧とか丸括弧に作用するC-M-p/C-M-nがダブルクオートの場合でも動く, そんだけ.
まあ, こいつらと似た風に働く.
ちなみに, バックスラッシュ「\」でダブルクオートがエスケープされてたら, 同じくエスケープされたのに飛ぶ.
(defadvice backward-list (around backward-quote) (let ((ch (char-before (point))) (op (point)) pos) (cond ((= ch ?\") (let ((bslash (if (= ?\\ (char-before (1- (point)))) t nil))) (goto-char (1- (point))) (goto-char (catch 'loop (while (re-search-backward "\"" nil t) (setq pos (match-beginning 0)) (cond ((null pos) (throw 'loop op)) ((or (and bslash (= (char-before pos) ?\\)) (and (not bslash) (/= (char-before pos) ?\\))) (throw 'loop pos)) (t nil))))))) (t ad-do-it)))) ;; 活性 (ad-activate 'backward-list) ;; ;; 不活性 ;; (ad-deactivate 'backward-list) (defadvice forward-list (around forward-quote) (let ((ch (char-after (point))) (op (point)) pos) (cond ((and (= ch ?\") (/= (ad-get-arg 0) -1)) (let ((bslash (if (= ?\\ (char-before (point))) t nil))) (goto-char (1+ (point))) (goto-char (catch 'loop (while (re-search-forward "\"" nil t) (setq pos (match-beginning 0)) (cond ((null pos) (throw 'loop op)) ((or (and bslash (= (char-before pos) ?\\)) (and (not bslash) (/= (char-before pos) ?\\))) (throw 'loop (1+ pos))) (t nil))))))) (t ad-do-it)))) ;; 活性 (ad-activate 'forward-list) ;; ;; 不活性 ;; (ad-deactivate 'forward-list)
本格的にやるならtimerまわしてポイントがダブルクオートの上にあるなら対応するのを光らせた方がいいかな?
つか, scan-listsへのアドバイスにしたら, アドバイス1つで済んだかなあ?まあいいや.
追記
更新時刻
- 1かいめ 2008年, 3月18日, 4:00
- 2かいめ 2008年, 3月19日, 1:37