wb-line-number

Window-based line number mode, which displays each number of line at the left window.
go to English page.

file

download file
[2003.03.17]v1.5.5 , selective-display で表示が正しくなかった bug fix.
あと hook とか少々追加, ちょびっと高速化.
[2003.01.23]v1.5.4 , electric-buffer-list が変な動作してた bug fix.
井上さんから bug 情報を頂きました. Thanx!!
[2002.12.26]v1.5.3 , scroll bar を face 表示に変更. and 少々高速化.
[2002.12.17]v1.5.2 , one-window-p の advice 追加, あとちょっとした変更
[2002.11.12]v1.5.1 , window 調整部分の bug 修正.
windows で起動時に on にしてるとエラー出てましたすいません.
[2002.11.10]v1.5 , 左端以外の window でも toggle 可能にしました.
左右均等に分割する wb-line-number-split-window-horizontally を追加.
左右並べたりとかecb で on のような使い方が可能になってます.
[2002.10.02]cache 方法の改良, 特に数 MB の file ではscroll がより高速になってる, はずです
[2002.05.30]error で post-command-hook を巻き添えにしないように変更
[2002.05.23]継続行の表示で行番号の表示が間違っていることがあった bug fix
[2002.05.11]shell-mode でヘンだったやつ対応、速度アップ、他
[2002.04.28]複数フレーム対応、微妙に bug fix, 他
[2002.04.10]call-last-kbd-macro,execute-kbd-macro の advice 追加
[2002.04.03]bug fix (delete-windows-on の advice 追加)
[2002.04.01]meadow や emacs20 でうまく動かなかった不具合の修正

screenshot

wanderlust
dired and source

wb-line-number.el

左っかわに行番号を表示する emacs lisp です。
line number なら mode-line に表示できるからいいじゃないかとか思うかもしれませんが、 個人的には左側に表示されている方がやっぱり便利なんです。今編集しているのが何行目な のかがいちいち mode-line に目を落とさなくてもわかる方がいいし、行番号でジャンプ するときも「だいたいあのへん」みたいに記憶できますし。

似たようなことをするのに setnu.el というのがありますが、これは継続行の処理がよろ しくなかったり outline minor mode なんかと相性がよくなかったり、イマイチでした。 なのでいっちょ作ってみようと思ったわけです。でもこういうのって builtin な機能で 実現してほしいですよね。emacs の高機能さには満足できるけど、このへんの小回りは vim とかの方が羨ましいです。
使い方はファイルに書いてあります。といっても、require するか eval するかして、 M-x wb-line-number-toggle とするだけです。すると左に行番号専用のウィンドウが表示 されるようになります。
軽く動作確認したのは以下の環境です。
  1. emacs21.1 in debian(woody)
  2. emacs20.7 in debian(woody)
  3. meadow1.14 in windows98(SE)
ちなみに今のところ Xemacs では動きません

あと追加の設定として、
(setq truncate-partial-width-windows nil)
(set-scroll-bar-mode nil)
(setq wb-line-number-scroll-bar t)
とすると、いろいろ便利かもしれません。
set-scroll-bar-mode を off にすると、X で使っているときにスクロールバーが無くな ります。その分左右が広くなりますし、wb-line-number を使っているときは見栄えもよ くなります。screenshot にあるように、私は日常で off にしています。
あと、wb-line-number-scroll-bar を t とするとテキストベースのスクロールバーが表 示されます。自分がいまどのへんに居るのかが視覚的にわかるので便利ですよ。X のスク ロールバーを消すとこういうのが欲しくなります。mode line にもパーセンテージとか出せますけど、パッと見でわかるのもなかなかいいと思っ てます。もし使用中に切り換えるなら、一度 toggle して off にしてください。
デフォルトで on となるよう変更しました(2002.11.10).

最初から on にしておく

wb-line-number.el は, minor-mode ではありません.
window 構成を変更するのだから, minor-mode にはなりえませんよね.
なので, 特定の major-mode (たとえば cperl-mode とか) のときに on にするというこ とはできません.
やるとすれば起動したときから on にしておく, というのが現実的でしょう.
(require 'wb-line-number)
(wb-line-number-toggle)
画面構成を大きく変更するような操作をしたときの挙動はまだ未知のものがあるかもしれ ません.

lookup
wanderlust
navi2ch
windows.el

などでは現時点で問題ないことを確認していますが, もし変な動作をすることがあれば報せて頂けると助かります.

to use with sdic

一緒に sdic を使っていると画面分割でエラーが出てしまうようです.
wb-line-number1.5.2 で少し改善されて ますが, 完全ではありません. 完全にするには, 以下のコードを .emacs などに追加して みてください. 関数を再定義しています...
;; utility function
(defun next-window-nondedicated (&optional WINDOW MINIBUF ALL-FRAMES)
  (let ((win (next-window WINDOW MINIBUF ALL-FRAMES)))
    (while (window-dedicated-p win)
      (setq win (next-window-nondedicated win MINIBUF ALL-FRAMES)))
    win))
(eval-after-load "sdic"
  '(defun sdic-display-buffer (&optional start-point)
     "検索結果表示バッファを表示する関数"
     (let ((old-buffer (current-buffer)))
       (unwind-protect
           (let* ((buf (set-buffer sdic-buffer-name))
                  (w1 (selected-window))
                  (w2 (get-buffer-window buf))
                  (p (or start-point (point)))
                  (h sdic-window-height))
             (if w2 (progn (select-window w2) (setq h (window-height w2)))
               (setq w2 (select-window (if (one-window-p)
                                           (split-window w1 (- (window-height) h))
                                         (next-window-nondedicated))))  ;; altered
               (set-window-buffer w2 buf))
             (set-window-start w2 p)
             (and sdic-warning-hidden-entry
                  (> p (point-min))
                  (message "この前にもエントリがあります。"))
             (goto-char p)
             (if sdic-disable-select-window (select-window w1))
             (buffer-size))
         (set-buffer old-buffer)))))

正木 さんから bug 情報を頂きました. thanx!!

to use with yatex

一緒に yatex を使っていて, C-c t j のような外部コマンドを呼び出すとき, 経過の表示方法な どが通常とは違う画面挙動になってしまうようです.
そういう場合は以下のコードを .emacs などに追加してみてください.
(eval-after-load "yatexlib"
  '(progn
     (defadvice YaTeX-window-list (after wb-line-number-adv-aft-YaTeX-window-list)
       (let ((l ad-return-value))
         (while l
           (and (window-dedicated-p (car l))
                (setq ad-return-value (delete (car l) ad-return-value)))
           (setq l (cdr l)))))
     (ad-enable-regexp   "^wb-line-number-adv-aft-YaTeX-window-list")
     (ad-activate-regexp "^wb-line-number-adv-aft-YaTeX-window-list")))

正木 さんから bug 情報を頂きました. thanx!!

to use with ecb

上のスクリーンショットでは ecb を使っているのがありますが, 普通に使おうとしても うまくいかないのです.
もし ecb と一緒に使いたい場合は以下のように記述してみてください.
(require 'ecb)
(add-hook 'wb-line-number-before-disable-hook
          (lambda ()
            (when (and (boundp 'ecb-edit-window)
                       ecb-minor-mode
                       (eq ecb-edit-window (selected-window)))
              (setq ecb-edit-window
                    (wb-line-number-get-neighbor-left-window
                     (selected-window))))))
(add-hook 'wb-line-number-after-disable-hook
          (lambda ()
            (when (and (boundp 'ecb-edit-window)
                       ecb-minor-mode
                       (not (window-live-p ecb-edit-window)))
              (setq ecb-edit-window (selected-window)))))
(add-hook 'wb-line-number-after-enable-hook
          (lambda ()
            (when (and (boundp 'ecb-edit-window)
                       ecb-minor-mode
                       (eq ecb-edit-window
                           (wb-line-number-get-neighbor-left-window
                            (selected-window))))
              (setq ecb-edit-window (selected-window)))))
んで, 一旦 wb-line-number-disable(か toggle) で off にしてから, ecb-activate で ecb を on に, そのあと改めて wb-line-number-enable(か toggle)で on にしてみてく ださい. こんな風にすれば使えるはずです. ちょい面倒ですね. ホントは何もしないでも 普通に使えるような設定がほしいところですがなんか ecb はいろいろ根が深いようなので...
私も常用してるわけではないのであまり熱心でないというのもあるかも...すいません
ついでといいますか, ecb と, windows.el や escreen のような画面構成を切り換えるような elisp, とはあまり相性がよくないようです.
ecb は便利かもしれないけどあの画面構成は保ったまま一時的に別のことしたい時ってあ りますよね. なのでちょっと残念です.
そのうち対応されないかなあ.








左に行番号が出ると、普段見慣れないのでかなり違和感があるかもしれません。
当初は私もそうでしたから(笑)。
でも次第に慣れてくるものです。
今ではたまに off にすると逆に違和感があるくらいです。
画面は縦はともかく横って結構余りませんか?
X の中で emacs をフルスクリーンに近い状態で使用している方は多いと思いますが、左の数桁くら い消費しても大勢に影響ないんではないかと。







役に立たないので戻る