Favorite Softwares

xyzzy

TIPS 〜 七転八倒編

SOFTWARE] - [SOFTWARE.favorite] - [xyzzy] - [ルートメニュー
  1. 終了時の保存確認を Windows と同じように
  2. C と C++ でのインデントの違い
  3. Tab キーで Tab を入力したい



目次に戻る
1. 終了時の保存確認を Windows と同じように
(話題が出たときの最新版) xyzzy 0.2.1.198

 xyzzy では、バッファが変更されたときに終了しようとすると、ほかの Windows アプリケーションと逆のことを聞いてくるダイアログボックスが表示されます。ほかのアプリケーションは『保存しますか? はい/いいえ』なのに対し、xyzzy は『セーブしないで終了しますか? はい/いいえ』となります。保存するとき、xyzzy では「いいえ」を選ぶのに対して、ほかのアプリケーションでは「はい」を選ばなければならないわけですね。
 これは美しくない! という人は次のコードを試してみましょう。
 [xyzzy:07071]、[xyzzy:07073] より。

(defun query-kill-xyzzy ()
  (handler-case
      (save-excursion
        (dolist (buffer (buffer-list) t)
          (when (need-buffer-save-p buffer)
            (set-buffer buffer)
            (refresh-screen)
            (when (yes-no-or-cancel-p "~a~%をセーブする?"
                                      (if (file-visited-p) (get-buffer-file-name) buffer))
              (or (call-interactively (if (file-visited-p) 'save-buffer 'emacs-write-file))
                  (return nil))))))
    (quit () nil)
    (error () nil)))

(add-hook '*query-kill-xyzzy-hook* 'query-kill-xyzzy)



目次に戻る
2. C と C++ でのインデントの違い
(話題が出たときの最新版) xyzzy 0.2.2.207

 [xyzzy:07390]、[xyzzy:07392] より。
 ANSI C 以前では、C 言語で次のようなプロトタイプ宣言が許されていました。

foo ( x )
    int  x;

 しかし、この書き方は C++ においては許可されていません。
 まずはこれが基礎知識。
 で、上のような書き方において int の前のインデント量は c-argdecl-indent で指定されていました。さて、C++ モードでもこの変数に対応するものがあるのですが、前述の通り C++ では構文的に許されていないので「この変数はどこで使われるんだ?」ということになります。
 実はこの変数はコンストラクタの初期子で使われています。

bar::foo ( x )
    : a ( x )

 この初期子に使われるインデントが c++-argdecl-indent となります。




目次に戻る
3. Tab キーで Tab を入力したい
(話題が出たときの最新版) xyzzy 0.2.2.207

 [xyzzy: 07397]、[xyzzy: 07398] より。
 すべてのモードで Tab キーを押したら Tab が入力できるようにしたい場合、次のようにします。

(let ((keymap (make-sparse-keymap)))
  (define-key keymap #\TAB 'self-insert-command)
  (add-hook '*create-buffer-hook*
            #'(lambda (buffer)
                (set-minor-mode-map keymap buffer))))

 亀井さんによると「なんでそんなに TAB を入れたがる人が多いのか理解できない」そうですが…。(^^;




SOFTWARE] - [SOFTWARE.favorite] - [xyzzy] - [ルートメニュー