[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:00168] Re: アウトラインもどき



 須田さん、亀井さん、こんにちは。逸見 です。

ジャンプの方のコードを少し工夫してみました。
アウトラインを作る時に  (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

Index Home