help-gnu-emacs
[Top][All Lists]
Advanced

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

what-cursor-position shows line-number


From: Andreas Roehler
Subject: what-cursor-position shows line-number
Date: Tue, 10 Apr 2007 08:41:34 +0200
User-agent: Thunderbird 1.5.0.4 (X11/20060516)

for discussion:

The following patch lets `what-cursor-position' include the line-number.

Complete function below.

diff -c

*** /home/speck/emacs/lisp/simple.el    Wed Apr  4 09:34:02 2007
--- simple-ar.el    Tue Apr 10 08:25:38 2007
***************
*** 916,928 ****
   "Print info on cursor position (on screen and within buffer).
 Also describe the character after point, and give its character code
 in octal, decimal and hex.
-
 For a non-ASCII multibyte character, also give its encoding in the
 buffer's selected coding system if the coding system encodes the
 character safely.  If the character is encoded into one byte, that
 code is shown in hex.  If the character is encoded into more than one
 byte, just \"...\" is shown.
-
 In addition, with prefix argument, show details about that character
 in *Help* buffer.  See also the command `describe-char'."
   (interactive "P")
--- 916,926 ----
***************
*** 930,935 ****
--- 928,936 ----
      (beg (point-min))
      (end (point-max))
          (pos (point))
+      ;; 2007-04-10 a.roehler@web.de changed section start
+      (line (line-number-at-pos))
+      ;; 2007-04-10 a.roehler@web.de changed section end
      (total (buffer-size))
      (percent (if (> total 50000)
               ;; Avoid overflow from multiplying by 100!
***************
*** 991,1003 ****
              (single-key-description char)
                (buffer-substring-no-properties (point) (1+ (point))))
              encoding-msg pos total percent beg end col hscroll)
!       (message "Char: %s %s point=%d of %d (%d%%) column=%d%s"
            (if enable-multibyte-characters
                (if (< char 128)
                (single-key-description char)
              (buffer-substring-no-properties (point) (1+ (point))))
              (single-key-description char))
!            encoding-msg pos total percent col hscroll))))))

 ;; Initialize read-expression-map.  It is defined at C level.
 (let ((m (make-sparse-keymap)))
--- 992,1008 ----
              (single-key-description char)
                (buffer-substring-no-properties (point) (1+ (point))))
              encoding-msg pos total percent beg end col hscroll)
! ;; 2007-04-10 a.roehler@web.de changed section start ! (message "Char: %s %s point=%d of %d (%d%%) column=%d%s line=%d"
!            ;; 2007-04-10 a.roehler@web.de changed section end
            (if enable-multibyte-characters
                (if (< char 128)
                (single-key-description char)
              (buffer-substring-no-properties (point) (1+ (point))))
              (single-key-description char))
!            ;; 2007-04-10 a.roehler@web.de changed section start
!            encoding-msg pos total percent col hscroll line))))))
!

 ;; Initialize read-expression-map.  It is defined at C level.
 (let ((m (make-sparse-keymap)))

;;;;;;;;;;;;;;


(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
in octal, decimal and hex.
For a non-ASCII multibyte character, also give its encoding in the
buffer's selected coding system if the coding system encodes the
character safely.  If the character is encoded into one byte, that
code is shown in hex.  If the character is encoded into more than one
byte, just \"...\" is shown.
In addition, with prefix argument, show details about that character
in *Help* buffer.  See also the command `describe-char'."
 (interactive "P")
 (let* ((char (following-char))
    (beg (point-min))
    (end (point-max))
        (pos (point))
    ;; 2007-04-10 a.roehler@web.de changed section start
    (line (line-number-at-pos))
    ;; 2007-04-10 a.roehler@web.de changed section end
    (total (buffer-size))
    (percent (if (> total 50000)
             ;; Avoid overflow from multiplying by 100!
             (/ (+ (/ total 200) (1- pos)) (max (/ total 100) 1))
           (/ (+ (/ total 2) (* 100 (1- pos))) (max total 1))))
    (hscroll (if (= (window-hscroll) 0)
             ""
           (format " Hscroll=%d" (window-hscroll))))
    (col (current-column)))
   (if (= pos end)
   (if (or (/= beg 1) (/= end (1+ total)))
       (message "point=%d of %d (%d%%) <%d-%d> column=%d%s"
            pos total percent beg end col hscroll)
     (message "point=%d of %d (EOB) column=%d%s"
          pos total col hscroll))
     (let ((coding buffer-file-coding-system)
       encoded encoding-msg display-prop under-display)
   (if (or (not coding)
       (eq (coding-system-type coding) t))
       (setq coding default-buffer-file-coding-system))
   (if (not (char-valid-p char))
       (setq encoding-msg
         (format "(%d, #o%o, #x%x, invalid)" char char char))
     ;; Check if the character is displayed with some `display'
     ;; text property.  In that case, set under-display to the
     ;; buffer substring covered by that property.
     (setq display-prop (get-text-property pos 'display))
     (if display-prop
         (let ((to (or (next-single-property-change pos 'display)
               (point-max))))
       (if (< to (+ pos 4))
           (setq under-display "")
         (setq under-display "..."
           to (+ pos 4)))
       (setq under-display
             (concat (buffer-substring-no-properties pos to)
                 under-display)))
       (setq encoded (and (>= char 128) (encode-coding-char char coding))))
     (setq encoding-msg
       (if display-prop
           (if (not (stringp display-prop))
           (format "(%d, #o%o, #x%x, part of display \"%s\")"
               char char char under-display)
             (format "(%d, #o%o, #x%x, part of display \"%s\"->\"%s\")"
                 char char char under-display display-prop))
         (if encoded
             (format "(%d, #o%o, #x%x, file %s)"
                 char char char
                 (if (> (length encoded) 1)
                 "..."
               (encoded-string-description encoded coding)))
           (format "(%d, #o%o, #x%x)" char char char)))))
   (if detail
       ;; We show the detailed information about CHAR.
       (describe-char (point)))
   (if (or (/= beg 1) (/= end (1+ total)))
       (message "Char: %s %s point=%d of %d (%d%%) <%d-%d> column=%d%s"
            (if (< char 256)
            (single-key-description char)
              (buffer-substring-no-properties (point) (1+ (point))))
            encoding-msg pos total percent beg end col hscroll)
;; 2007-04-10 a.roehler@web.de changed section start (message "Char: %s %s point=%d of %d (%d%%) column=%d%s line=%d"
          ;; 2007-04-10 a.roehler@web.de changed section end
          (if enable-multibyte-characters
              (if (< char 128)
              (single-key-description char)
            (buffer-substring-no-properties (point) (1+ (point))))
            (single-key-description char))
          ;; 2007-04-10 a.roehler@web.de changed section start
          encoding-msg pos total percent col hscroll line))))))

;;; End





reply via email to

[Prev in Thread] Current Thread [Next in Thread]