[xyzzy:00168] Re: アウトラインもどき
- Subject: [xyzzy:00168] Re: アウトラインもどき
- From: Masahito Henmi <henmi@xxxxxxxxxxxxx>
- X-mailer: Denshin 8 Go V321.2b5
須田さん、亀井さん、こんにちは。逸見 です。
ジャンプの方のコードを少し工夫してみました。
アウトラインを作る時に (concat "Outline-" バッファ名)としているので
ジャンプ側では、頭8文字取り除いて
(substring (buffer-name (selected-buffer)) 8)
元のバッファを割り出すようにしました。
このため、複数のアウトラインを表示できるようになりました。
亀井さんの
>アウトライン元のバッファが表示されていないときにF12したら
>勝手に出てきてほしい
+--------------+
| 略 | 元 |
+--------------+
こう、いう状態になったあと何らかの都合で、
C-x 1 して
+--------------+
| 略 |
+--------------+
こうなったりとか、
F2を押して別のファイルに切り替えたりとか
+--------------+
| 略 | 別 |
+--------------+
した時に、F12を押したら、元のファイルを探して
表示したいということでしょう。
よくわからないのですが、亀井さんのコードを、ほぼ
そのまま使って、うまく動いています。
(cond ((= (count-windows 'foo) 1)
(split-window-vertically (outline-margin))
(other-window) <---ここがちょっと気になる。
(set-buffer bname))
(t (pop-to-buffer bname)))
でも、元のバッファーを削除されてたら、しょうがないね。
ところで、(count-windows 'foo) の 'fooって何?
あと、アウトラインウインドウだけF12をoutline-jump
に割り当てるのは
(defvar *outline-mode-map* nil)
(unless *outline-mode-map*
(setq *outline-mode-map* (make-sparse-keymap))
(define-key *outline-mode-map* #\F12 'outline-jump)
)
(setq buffer-mode 'outline-mode)
(setq mode-name "Outline")
(use-keymap *outline-mode-map*)
この辺でやっています。
ところで、whileループの最後の
(or (forward-char 1)
(return))))
これって何?
(forward-char 1)だけじゃあ駄目?
http://www.netlaputa.ne.jp/~henmi/lisp/xyzzy/editor/980125.html
によると :no-dupをつけると次から探すので
(while (scan-buffer *outline-pattern* :regexp t :no-dup)
処理
)
これでいいのかも。
------------------------------------------------------------
逸見雅人 Email henmi@xxxxxxxxxxxxx
Masahito Henmi