[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: Does emacs have a line numbering feature?
From: |
brianjiang |
Subject: |
RE: Does emacs have a line numbering feature? |
Date: |
Mon, 10 Sep 2007 11:11:37 +0800 |
I find sometimes the line number doesn't show. e.g., open a file, then use
"occur" to find a text string and click occur buffer to jump to the next
occurrence of string in another page, then the line number doesn't show. When I
click the file buffer, the line numbers then show.
I find it is because the linum.el uses "window-start" and "window-end" to
determine the which text lines are visible currently. But they are sometimes
not reliable. See the text from the "help":
Redisplay updates the window-start position (if you have not
specified it explicitly since the previous redisplay)--for
example, to make sure point appears on the screen. Nothing except
redisplay automatically changes the window-start position; if you
move point, do not expect the window-start position to change in
response until after the next redisplay.
So I change something in the linum.el as below. And it currently works well for
me. Maybe there are some better solutions I don't know.
(defun linum-update ()
"Update displayed line numbers for the current buffer."
(save-excursion
;;(goto-char (window-start)) ;; brian: comment out
(let (;;(line (line-number-at-pos)) ;; brian
;;(limit (1+ (window-end nil t))) ;; brian
line
limit
pos
w-h
w-s
(fmt (if (stringp linum-format) linum-format (linum-dynamic-format)))
ov
free)
;; brian: hack it...........................
(setq pos (point))
(setq w-s (window-start))
(setq limit (1+ (window-end nil t)) )
(when (or (> pos limit)
(< pos w-s))
(setq w-h (window-height))
(forward-line w-h)
(setq limit (point))
;; don't worry about nagitive position
(goto-char pos)
(forward-line (- 0 w-h))
(setq w-s (point))
)
(goto-char w-s)
(setq line (line-number-at-pos))
;; brian: end of hacking.....................
(dolist (ov (overlays-in (point) limit))
(when (overlay-get ov 'linum)
(push ov free)))
;; Create an overlay (or reuse an existing one) for each visible
;; line in this window.
(while (and (not (eobp)) (< (point) limit))
(if (null free)
(progn
(setq ov (make-overlay (point) (point)))
(overlay-put ov 'linum t)
(push ov linum-overlays))
(setq ov (pop free))
(move-overlay ov (point) (point)))
(overlay-put ov 'before-string (format fmt line))
(overlay-put ov 'margin 'left-margin)
(forward-line)
(setq line (1+ line)))
(mapc #'delete-overlay free))))
Regards,
Brian
-----Original Message-----
From: help-gnu-emacs-bounces+brianjiang=gdnt.com.cn@gnu.org
[mailto:help-gnu-emacs-bounces+brianjiang=gdnt.com.cn@gnu.org] On Behalf Of
Drew Adams
Sent: 2007年9月10日 6:59
To: Michael Trausch; help-gnu-emacs@gnu.org
Subject: RE: Does emacs have a line numbering feature?
> >>> (setq line-number-mode t)
> >>> (setq column-number-mode t)
> >> Yeah, I already had that in, and it works. However, if I do
> >> something similar for linum-mode, it seems to just ignore it.
> >
> > Yes, because setting a minor mode variable to activate it is the
> > wrong thing to do. It might work sometimes, but generally you
> > should either customize the variable or use the minor mode function.
> > So the code above should better be
> >
> > (line-number-mode 1)
> > (column-number-mode 1)
> >
> > because by convention a minor mode is turned on if the argument is
> > positive.
> >
>
> Okay... I tried that, too, for linum-mode, and it doesn't work. Am I
> missing something obvious or am I an idiot? :-P
Linum mode is a local minor mode: turning it on does so only for the current
buffer.
Are you using Emacs 22? If so, then you can define a different command,
`global-linum-mode', as follows (after loading linum.el):
(define-globalized-minor-mode global-linum-mode
linum-mode (lambda nil (linum-mode 1)))
Then just put this in your .emacs: (global-linum-mode 1).
You can toggle line numbering in all buffers at once using command
`global-linum-mode'. Even the minibuffer is affected, which might not be what
you want.
You might ask Markus to add this command to the library.
If you don't have Emacs 22, then you will probably need to turn on the
(local) mode in each buffer, using a hook.
HTH.
_______________________________________________
help-gnu-emacs mailing list
help-gnu-emacs@gnu.org
http://lists.gnu.org/mailman/listinfo/help-gnu-emacs
- RE: Does emacs have a line numbering feature?, (continued)
Re: Does emacs have a line numbering feature?, Michaël Cadilhac, 2007/09/07
Re: Does emacs have a line numbering feature?, Tassilo Horn, 2007/09/07
Re: Does emacs have a line numbering feature?, Michael Trausch, 2007/09/09
Re: Does emacs have a line numbering feature?, Michael Trausch, 2007/09/09
Re: Does emacs have a line numbering feature?, Markus Triska, 2007/09/10
Re: Does emacs have a line numbering feature?, Andrew Russell, 2007/09/12