]> code.delx.au - gnu-emacs/blobdiff - lisp/linum.el
* lisp/textmodes/rst.el (rst-compile-toolsets): Add pdf and s5 to option alist.
[gnu-emacs] / lisp / linum.el
index 2108431b474fb77921e1ef1e4ccb2e90c7d6536d..4ab4b10a7c9c711ab814e4b67e6c12b1eaef03cb 100644 (file)
@@ -1,10 +1,11 @@
 ;;; linum.el --- display line numbers in the left margin
 
-;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+;; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
 
 ;; Author: Markus Triska <markus.triska@gmx.at>
 ;; Maintainer: FSF
 ;; Keywords: convenience
+;; Version: 0.9x
 
 ;; This file is part of GNU Emacs.
 
@@ -82,17 +83,22 @@ and you have to scroll or press \\[recenter-top-bottom] to update the numbers."
                                            'linum-update-current) nil t)
           (add-hook 'after-change-functions 'linum-after-change nil t))
         (add-hook 'window-scroll-functions 'linum-after-scroll nil t)
-        (add-hook 'window-size-change-functions 'linum-after-size nil t)
+        ;; Using both window-size-change-functions and
+        ;; window-configuration-change-hook seems redundant. --Stef
+        ;; (add-hook 'window-size-change-functions 'linum-after-size nil t)
         (add-hook 'change-major-mode-hook 'linum-delete-overlays nil t)
         (add-hook 'window-configuration-change-hook
-                  'linum-after-config nil t)
+                  ;; FIXME: If the buffer is shown in N windows, this
+                  ;; will be called N times rather than once.  We should use
+                  ;; something like linum-update-window instead.
+                  'linum-update-current nil t)
         (linum-update-current))
     (remove-hook 'post-command-hook 'linum-update-current t)
     (remove-hook 'post-command-hook 'linum-schedule t)
-    (remove-hook 'window-size-change-functions 'linum-after-size t)
+    ;; (remove-hook 'window-size-change-functions 'linum-after-size t)
     (remove-hook 'window-scroll-functions 'linum-after-scroll t)
     (remove-hook 'after-change-functions 'linum-after-change t)
-    (remove-hook 'window-configuration-change-hook 'linum-after-config t)
+    (remove-hook 'window-configuration-change-hook 'linum-update-current t)
     (remove-hook 'change-major-mode-hook 'linum-delete-overlays t)
     (linum-delete-overlays)))
 
@@ -108,7 +114,7 @@ and you have to scroll or press \\[recenter-top-bottom] to update the numbers."
   (mapc #'delete-overlay linum-overlays)
   (setq linum-overlays nil)
   (dolist (w (get-buffer-window-list (current-buffer) nil t))
-    (set-window-margins w 0)))
+    (set-window-margins w 0 (cdr (window-margins w)))))
 
 (defun linum-update-current ()
   "Update line numbers for the current buffer."
@@ -161,9 +167,12 @@ and you have to scroll or press \\[recenter-top-bottom] to update the numbers."
             (overlay-put ov 'before-string
                          (propertize " " 'display `((margin left-margin) ,str)))
             (overlay-put ov 'linum-str str))))
-      (forward-line)
+      ;; Text may contain those nasty intangible properties, but that
+      ;; shouldn't prevent us from counting those lines.
+      (let ((inhibit-point-motion-hooks t))
+        (forward-line))
       (setq line (1+ line)))
-    (set-window-margins win width)))
+    (set-window-margins win width (cdr (window-margins win)))))
 
 (defun linum-after-change (beg end len)
   ;; update overlays on deletions, and after newlines are inserted
@@ -175,15 +184,15 @@ and you have to scroll or press \\[recenter-top-bottom] to update the numbers."
 (defun linum-after-scroll (win start)
   (linum-update (window-buffer win)))
 
-(defun linum-after-size (frame)
-  (linum-after-config))
+;; (defun linum-after-size (frame)
+;;   (linum-after-config))
 
 (defun linum-schedule ()
   ;; schedule an update; the delay gives Emacs a chance for display changes
   (run-with-idle-timer 0 nil #'linum-update-current))
 
-(defun linum-after-config ()
-  (walk-windows (lambda (w) (linum-update (window-buffer w))) nil 'visible))
+;; (defun linum-after-config ()
+;;   (walk-windows (lambda (w) (linum-update (window-buffer w))) nil 'visible))
 
 (defun linum-unload-function ()
   "Unload the Linum library."