transient-mark-mode と comment-dwim とボク の1日後

※2009/05/15 00:15追記

http://anoncvs.mew.org/ml/mew-dist-3.1/msg02106.html
から有用な情報が得られました。
引用させてもらいます。

Emacs-21.3.50 だと C-SPC(C-@) が機能拡張していて、
transient-mark-mode => nil でも

NEWS> One method is to type C-SPC C-SPC; this enables Transient Mark mode
NEWS> and sets the mark at point.  The other method is to type C-u C-x C-x.
NEWS> This enables Transient Mark mode temporarily but does not alter the
NEWS> mark or the region.

と、C-SPC, C-SPC と連打したときだけハイライトするなんていうのが
ありますよ、と教えて貰ったことがあります。それなりに便利なインタ
フェースだと思いました。

ということは,通常状態では,transient-mark-mode を nil にしておいて,
C-SPC C-SPC でマーク-->移動で,リージョンが見えて,
この状態で,M-; すればオッケー牧場ということか。
==> ためしてみたら,オッケーだったよ!!


これで,全てが解決した!! 平和が訪れた!!
ちなみに transient-mark-mode は M-x transient-mark-mode で toggle できる。
また,transient-mark-mode が無効の状態では,常に mark が有効らしい。


いやー,作った物は無駄にはなったけど,いい経験になった。
勉強にもなった。なにより楽しかったし,ドキドキ感もあった!!

※2009/05/14 23:55追記

だめぽ。正常に動作しないぽ。
mark-active 変数関係?
どうも,transient-mark-mode とか,リージョンのことを
もひとつ理解できてないっぽい。


テクなしなボクは,大人しく transient-mark-mode を有効にしておいた方がいいかも。

とりあえず,昨日言っていたことが,できたっぽい。

答えは ソースコード(newcomment.el の comment-normalize-vars 関数)内にありました。
というか,パクってきました。

;; transient-mark-mode が nil だと,M-; で,
;; [un]comment-region が呼ばれないようなので,
;; 一時的に,transient-mark-mode を有効にする。
;; newcomment.el を参考。
(defun my-comment-dwim (arg)
  "Just call comment-dwim with transient-mark-mode enabled."
  (interactive "*P")
    (unless comment-start
      (let ((cs (read-string "No comment syntax is defined.  Use: ")))
        (if (zerop (length cs))
            (error "No comment syntax defined")
          (set (make-local-variable 'comment-start) cs))))
    (let ((transient-mark-mode t))
      (comment-dwim arg)))

(global-set-key "\M-;" my-comment-dwim)


comment-normalize-vars 関数を見ると,
どうやら,comment-start という変数を使っているみたい。
で,それが nil なら,read-string 関数を使って,comment-start 変数に,
使用するコメント開始文字を設定している。


だもんで,その一連の処理を行ってから,transient-mark-mode を t にして,
comment-dwim を呼ぶようにしました。


おまけで,開いているバッファのコメント開始文字を変更したい場合は,
M-; して,(setq comment-start nil) すれば,
次回コメントアウトしたときに,何を使うか聞かれる。
また,現在何を使用することになっているかは,comment-start 変数を
見てみればわかる,と。

まとめ

とりあえずできちゃったけど(酸っぱい物が食べたいです),
これで,慣習的に,良いのかどうかはぶっちゃけわからん。
なので,つっこみありましたら,よろしくお願いします。