markの位置に印をつける(その2)
一応マークに色をつけるだけのはずなんだけど、色々あってダラダラ長くなった感じ。
前にも書いてるけど
himadatenodeの日記 - マークの位置に印をつける
http://d.hatena.ne.jp/himadatanode/20060912/p1
前に書いたのだとparenのときの表示で色が消えてしまうので、それの対策をしてみた。ら、妙に面倒だった。
;キー設定C-F5でmarkを表示しないかするかをon/off ;;markのトグル (global-set-key #\C-F5 'marker-view-toggle) (set-function-bar-label #\C-F5 "F5 : mark toggle") ;;マークの位置を表示 (global-set-key #\C-F4 'view-point-color) (set-function-bar-label #\C-F4 "F4 : view mark") ;マークの開始 ;デフォルトではC-@ | C-SPCでは領域を反転しない(rv-) (global-set-key #\C-@ 'my-set-mark-command) ;マークをつけるときに色を変える感じ ;mark操作が、よく分かっていないので無駄がありそうな木もするけど、まあよしとした。 ;マークの強調表示 (defun my-set-mark-command () (interactive) (delete-text-attributes 'mark-pointer) (set-mark-command) (change-point-color(point)) (setq my-mark-point (make-marker (selected-buffer))) (set-marker my-mark-point (point))) ;指定の場所を色づけ ;なにかと便利そうなので関数にして (defun change-point-color (from) (set-text-attribute from (+ from 1) 'mark-pointer ;色とかは好みで好きにこの辺を変えても良い感じ。 :bold t :foreground 0 :background 2 :underline t)) ;マークの色が消えてるときにマークした場所を再カラーリング ;エラーの処理の仕方がよく分からないので怪しい感じ。まあ望んだようには動く。 (defun view-point-color() (interactive) (delete-text-attributes 'mark-pointer) (handler-case (set-text-attribute (marker-point my-mark-point) (+ (marker-point my-mark-point) 1) 'mark-pointer :bold t :foreground 0 :background 1 :underline t) (error (c) (plain-error "マークがないよ" ))) ) ;parenで画面が書きえられるのの対策に ;*post-command-hook*を使って ;toggleで切り替え (defvar *marker-toggle* nil) ;適当に判別して切り替え (defun marker-view-toggle() (interactive) (delete-text-attributes 'mark-pointer) (if *marker-toggle* (progn (delete-hook '*post-command-hook* 'view-point-color) (setq *marker-toggle* nil) (message "marker-off")) (progn (add-hook '*post-command-hook* 'view-point-color) (setq *marker-toggle* t) (message "marker-on")) ))
なんだか、エラーが出まくったので、よくわからないエラー処理とかマークの操作を、適当に読んだ感じと、動かした感じで何とか誤魔かして色々する感じに。しかも*post-command-hook*使うとエラーが出ると悲惨なので、ついでに試しているときに作ったトグルするのも、其のまま実用することに、もし変なことになったら直ぐに機能をoffに出来るように安全機能用。
矩形リージョンを表示とかも地味に欲しい気もしないでもない。