]> git.eshelyaron.com Git - emacs.git/commitdiff
(line-at-pos): New defun.
authorKim F. Storm <storm@cua.dk>
Thu, 22 Jan 2004 20:42:52 +0000 (20:42 +0000)
committerKim F. Storm <storm@cua.dk>
Thu, 22 Jan 2004 20:42:52 +0000 (20:42 +0000)
(what-line): Use it.  Optimize by only counting lines in narrowed region once.

lisp/ChangeLog
lisp/simple.el

index 0073e5143abe9bc27364bf13010bd54c2f5f07c4..9373f8aa98499ae439c7f6b097dd85b54b5f230e 100644 (file)
@@ -1,3 +1,9 @@
+2004-01-22  Kim F. Storm  <storm@cua.dk>
+
+       * simple.el (line-at-pos): New defun.
+       (what-line): Use it.  Optimize by only counting lines in narrowed
+       region once.
+
 2004-01-22  Kenichi Handa  <handa@m17n.org>
 
        * language/cyrillic.el (ccl-encode-windows-1251-font): Rearrange
index d23ed11c6c3eaaaec4cb86d5d4ce82acef290a78..3d2be5730120cc1772aaeb328aab6e9fef576039 100644 (file)
@@ -498,20 +498,15 @@ that uses or sets the mark."
 (defun what-line ()
   "Print the current buffer line number and narrowed line number of point."
   (interactive)
-  (let ((opoint (point)) start)
-    (save-excursion
-      (save-restriction
-       (goto-char (point-min))
-       (widen)
-       (forward-line 0)
-       (setq start (point))
-       (goto-char opoint)
-       (forward-line 0)
-       (if (/= start (point-min))
-           (message "line %d (narrowed line %d)"
-                    (1+ (count-lines (point-min) (point)))
-                    (1+ (count-lines start (point))))
-         (message "Line %d" (1+ (count-lines (point-min) (point)))))))))
+  (let ((opoint (point)) (start (point-min))
+       (n (line-at-pos)))
+    (if (= start 1)
+       (message "Line %d" n)
+      (save-excursion
+       (save-restriction
+         (widen)
+         (message "line %d (narrowed line %d)" 
+                  (+ n (line-at-pos start) -1) n))))))
 
 (defun count-lines (start end)
   "Return number of lines between START and END.
@@ -536,6 +531,17 @@ and the greater of them is not at the start of a line."
                done)))
        (- (buffer-size) (forward-line (buffer-size)))))))
 
+(defun line-at-pos (&optional pos)
+  "Return (narrowed) buffer line number at position POS.
+If POS is nil, use current buffer location."
+  (let ((opoint (or pos (point))) start)
+    (save-excursion
+      (goto-char (point-min))
+      (setq start (point))
+      (goto-char opoint)
+      (forward-line 0)
+      (1+ (count-lines start (point))))))
+
 (defun what-cursor-position (&optional detail)
   "Print info on cursor position (on screen and within buffer).
 Also describe the character after point, and give its character code