unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: David PONCE <david.ponce@wanadoo.fr>
Subject: use of symbolic display elements in ruler-mode
Date: Thu, 18 Mar 2004 14:14:34 +0100 (CET)	[thread overview]
Message-ID: <6592006.1079615674954.JavaMail.www@wwinf0802> (raw)


Hi,

Here is a patch for ruler-mode.el that now uses symbolic display
elements for scrollbar, fringes and margins width.

Please, could someone install the patch for me?
Thanks!

Sincerely,
David

Index: lisp/ChangeLog
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/ChangeLog,v
retrieving revision 1.5775
diff -c -r1.5775 ChangeLog
*** lisp/ChangeLog	18 Mar 2004 03:07:38 -0000	1.5775
--- lisp/ChangeLog	18 Mar 2004 12:40:37 -0000
***************
*** 1,3 ****
--- 1,15 ----
+ 2004-03-18  David Ponce  <david@dponce.com>
+ 
+ 	* ruler-mode.el (ruler-mode-header-line-format-old): Don't
+ 	`make-variable-buffer-local'.
+ 	(ruler-mode-ruler-function): Doc fix.
+ 	(ruler-mode-header-line-format): Simplify value.  Doc fix.
+ 	(ruler-mode): Use `make-local-variable' and `kill-local-variable'
+ 	to save/restore a previous header line format.
+ 	(ruler-mode-space): Don't depend on a numeric WIDTH value.
+ 	(ruler-mode-ruler): Use symbolic display elements for scrollbar,
+ 	fringes and margins width.
+ 
  2004-03-17  Luc Teirlinck  <teirllm@auburn.edu>
  
  	* simple.el (clone-buffer): Doc fix.
Index: lisp/ruler-mode.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/ruler-mode.el,v
retrieving revision 1.19
diff -c -r1.19 ruler-mode.el
*** lisp/ruler-mode.el	15 Mar 2004 08:39:06 -0000	1.19
--- lisp/ruler-mode.el	18 Mar 2004 12:40:37 -0000
***************
*** 1,6 ****
  ;;; ruler-mode.el --- display a ruler in the header line
  
! ;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  
  ;; Author: David Ponce <david@dponce.com>
  ;; Maintainer: David Ponce <david@dponce.com>
--- 1,6 ----
  ;;; ruler-mode.el --- display a ruler in the header line
  
! ;; Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
  
  ;; Author: David Ponce <david@dponce.com>
  ;; Maintainer: David Ponce <david@dponce.com>
***************
*** 95,101 ****
  ;; important to use the same font family and size for ruler and text
  ;; areas.
  ;;
! ;; You can override the ruler format by defining an appropriate 
  ;; function as the buffer-local value of `ruler-mode-ruler-function'.
  
  ;; Installation
--- 95,101 ----
  ;; important to use the same font family and size for ruler and text
  ;; areas.
  ;;
! ;; You can override the ruler format by defining an appropriate
  ;; function as the buffer-local value of `ruler-mode-ruler-function'.
  
  ;; Installation
***************
*** 531,549 ****
  
  (defvar ruler-mode-header-line-format-old nil
    "Hold previous value of `header-line-format'.")
- (make-variable-buffer-local 'ruler-mode-header-line-format-old)
  
  (defvar ruler-mode-ruler-function nil
!   "If non-nil, function to call to return ruler string.
  This variable is expected to be made buffer-local by modes.")
  
  (defconst ruler-mode-header-line-format
!   '(:eval (funcall (if ruler-mode-ruler-function
! 		       ruler-mode-ruler-function
! 		     'ruler-mode-ruler)))
    "`header-line-format' used in ruler mode.
! If the non-nil value for ruler-mode-ruler-function is given, use it.
! Else use `ruler-mode-ruler' is used as default value.")
  
  ;;;###autoload
  (define-minor-mode ruler-mode
--- 531,546 ----
  
  (defvar ruler-mode-header-line-format-old nil
    "Hold previous value of `header-line-format'.")
  
  (defvar ruler-mode-ruler-function nil
!   "If non-nil, function to call to return ruler header line format.
  This variable is expected to be made buffer-local by modes.")
  
  (defconst ruler-mode-header-line-format
!   '(:eval (funcall (or ruler-mode-ruler-function 'ruler-mode-ruler)))
    "`header-line-format' used in ruler mode.
! If `ruler-mode-ruler-function' is non-nil, call it to compute the
! ruler value, else use `ruler-mode-ruler'.")
  
  ;;;###autoload
  (define-minor-mode ruler-mode
***************
*** 556,573 ****
          ;; When `ruler-mode' is on save previous header line format
          ;; and install the ruler header line format.
          (when (local-variable-p 'header-line-format)
!           (setq ruler-mode-header-line-format-old header-line-format))
          (setq header-line-format ruler-mode-header-line-format)
!         (add-hook 'post-command-hook    ; add local hook
!                   #'force-mode-line-update nil t))
      ;; When `ruler-mode' is off restore previous header line format if
      ;; the current one is the ruler header line format.
      (when (eq header-line-format ruler-mode-header-line-format)
        (kill-local-variable 'header-line-format)
        (when (local-variable-p 'ruler-mode-header-line-format-old)
!         (setq header-line-format ruler-mode-header-line-format-old)))
!     (remove-hook 'post-command-hook     ; remove local hook
!                  #'force-mode-line-update t)))
  \f
  ;; Add ruler-mode to the minor mode menu in the mode line
  (define-key mode-line-mode-menu [ruler-mode]
--- 553,570 ----
          ;; When `ruler-mode' is on save previous header line format
          ;; and install the ruler header line format.
          (when (local-variable-p 'header-line-format)
!           (set (make-local-variable 'ruler-mode-header-line-format-old)
!                header-line-format))
          (setq header-line-format ruler-mode-header-line-format)
!         (add-hook 'post-command-hook 'force-mode-line-update nil t))
      ;; When `ruler-mode' is off restore previous header line format if
      ;; the current one is the ruler header line format.
      (when (eq header-line-format ruler-mode-header-line-format)
        (kill-local-variable 'header-line-format)
        (when (local-variable-p 'ruler-mode-header-line-format-old)
!         (setq header-line-format ruler-mode-header-line-format-old)
!         (kill-local-variable 'ruler-mode-header-line-format-old)))
!     (remove-hook 'post-command-hook 'force-mode-line-update t)))
  \f
  ;; Add ruler-mode to the minor mode menu in the mode line
  (define-key mode-line-mode-menu [ruler-mode]
***************
*** 621,753 ****
  (defsubst ruler-mode-space (width &rest props)
    "Return a single space string of WIDTH times the normal character width.
  Optional argument PROPS specifies other text properties to apply."
!   (if (> width 0)
!       (apply 'propertize " " 'display (list 'space :width width) props)
!     ""))
  \f
  (defun ruler-mode-ruler ()
!   "Return a string ruler."
!   (when ruler-mode
!     (let* ((w     (window-width))
!            (m     (window-margins))
!            (lsb   (scroll-bar-columns 'left))
!            (lf    (fringe-columns 'left t))
!            (lm    (or (car m) 0))
!            (rsb   (scroll-bar-columns 'right))
!            (rf    (fringe-columns 'right t))
!            (rm    (or (cdr m) 0))
!            (ruler (make-string w ruler-mode-basic-graduation-char))
!            (i     0)
!            (j     (window-hscroll))
!            k c l1 l2 r2 r1 h1 h2 f1 f2)
! 
!       ;; Setup the default properties.
!       (put-text-property 0 w 'face 'ruler-mode-default-face ruler)
!       (put-text-property 0 w
!                          'help-echo
!                          (cond
!                           (ruler-mode-show-tab-stops
!                            ruler-mode-ruler-help-echo-when-tab-stops)
!                           (goal-column
!                            ruler-mode-ruler-help-echo-when-goal-column)
!                           (t
!                            ruler-mode-ruler-help-echo))
!                          ruler)
!       ;; Setup the local map.
!       (put-text-property 0 w 'local-map ruler-mode-map ruler)
! 
!       ;; Setup the active area.
!       (while (< i w)
!         ;; Graduations.
!         (cond
!          ;; Show a number graduation.
!          ((= (mod j 10) 0)
!           (setq c (number-to-string (/ j 10))
!                 m (length c)
!                 k i)
!           (put-text-property
!            i (1+ i) 'face 'ruler-mode-column-number-face
!            ruler)
!           (while (and (> m 0) (>= k 0))
!             (aset ruler k (aref c (setq m (1- m))))
!             (setq k (1- k))))
!          ;; Show an intermediate graduation.
!          ((= (mod j 5) 0)
!           (aset ruler i ruler-mode-inter-graduation-char)))
!         ;; Special columns.
!         (cond
!          ;; Show the `current-column' marker.
!          ((= j (current-column))
!           (aset ruler i ruler-mode-current-column-char)
!           (put-text-property
!            i (1+ i) 'face 'ruler-mode-current-column-face
!            ruler))
!          ;; Show the `goal-column' marker.
!          ((and goal-column (= j goal-column))
!           (aset ruler i ruler-mode-goal-column-char)
!           (put-text-property
!            i (1+ i) 'face 'ruler-mode-goal-column-face
!            ruler)
!           (put-text-property
!            i (1+ i) 'help-echo ruler-mode-goal-column-help-echo
!            ruler))
!          ;; Show the `comment-column' marker.
!          ((= j comment-column)
!           (aset ruler i ruler-mode-comment-column-char)
!           (put-text-property
!            i (1+ i) 'face 'ruler-mode-comment-column-face
!            ruler)
!           (put-text-property
!            i (1+ i) 'help-echo ruler-mode-comment-column-help-echo
!            ruler))
!          ;; Show the `fill-column' marker.
!          ((= j fill-column)
!           (aset ruler i ruler-mode-fill-column-char)
!           (put-text-property
!            i (1+ i) 'face 'ruler-mode-fill-column-face
!            ruler)
!           (put-text-property
!            i (1+ i) 'help-echo ruler-mode-fill-column-help-echo
!            ruler))
!          ;; Show the `tab-stop-list' markers.
!          ((and ruler-mode-show-tab-stops (member j tab-stop-list))
!           (aset ruler i ruler-mode-tab-stop-char)
!           (put-text-property
!            i (1+ i) 'face 'ruler-mode-tab-stop-face
!            ruler)))
!         (setq i (1+ i)
!               j (1+ j)))
! 
!       ;; Highlight the fringes and margins.
!       (if (nth 2 (window-fringes))
!           ;; fringes outside margins.
!           (setq l1 lf
!                 l2 lm
!                 r2 rm
!                 r1 rf
!                 h1 ruler-mode-fringe-help-echo
!                 h2 ruler-mode-margin-help-echo
!                 f1 'ruler-mode-fringes-face
!                 f2 'ruler-mode-margins-face)
!         ;; fringes inside margins.
!         (setq l1 lm
!               l2 lf
!               r2 rf
!               r1 rm
!               h1 ruler-mode-margin-help-echo
!               h2 ruler-mode-fringe-help-echo
!               f1 'ruler-mode-margins-face
!               f2 'ruler-mode-fringes-face))
!       ;; Return the ruler propertized string.  Using list here,
!       ;; instead of concat visually separate the different areas.
!       (list
!        (ruler-mode-space lsb 'face 'ruler-mode-pad-face)
!        (ruler-mode-space l1 'face f1 'help-echo (format h1 "Left" l1))
!        (ruler-mode-space l2 'face f2 'help-echo (format h2 "Left" l2))
!        ruler
!        (ruler-mode-space r2 'face f2 'help-echo (format h2 "Right" r2))
!        (ruler-mode-space r1 'face f1 'help-echo (format h1 "Right" r1))
!        (ruler-mode-space rsb 'face 'ruler-mode-pad-face)))))
  
  (provide 'ruler-mode)
  
--- 618,738 ----
  (defsubst ruler-mode-space (width &rest props)
    "Return a single space string of WIDTH times the normal character width.
  Optional argument PROPS specifies other text properties to apply."
!   (apply 'propertize " " 'display (list 'space :width width) props))
  \f
  (defun ruler-mode-ruler ()
!   "Compute and return an header line ruler."
!   (let* ((w (window-width))
!          (m (window-margins))
!          (f (window-fringes))
!          (i 0)
!          (j (window-hscroll))
!          ;; Setup the scrollbar, fringes, and margins areas.
!          (lf (ruler-mode-space
!               'left-fringe
!               'face 'ruler-mode-fringes-face
!               'help-echo (format ruler-mode-fringe-help-echo
!                                  "Left" (or (car f) 0))))
!          (rf (ruler-mode-space
!               'right-fringe
!               'face 'ruler-mode-fringes-face
!               'help-echo (format ruler-mode-fringe-help-echo
!                                  "Right" (or (cadr f) 0))))
!          (lm (ruler-mode-space
!               'left-margin
!               'face 'ruler-mode-margins-face
!               'help-echo (format ruler-mode-margin-help-echo
!                                  "Left" (or (car m) 0))))
!          (rm (ruler-mode-space
!               'right-margin
!               'face 'ruler-mode-margins-face
!               'help-echo (format ruler-mode-margin-help-echo
!                                  "Right" (or (cdr m) 0))))
!          (lsb (ruler-mode-space '(scroll-bar . left)
!                                 'face 'ruler-mode-pad-face))
!          (rsb (ruler-mode-space '(scroll-bar . right)
!                                 'face 'ruler-mode-pad-face))
!           ;; Create an "clean" ruler.
!          (ruler
!           (propertize
!            (make-string w ruler-mode-basic-graduation-char)
!            'face 'ruler-mode-default-face
!            'local-map ruler-mode-map
!            'help-echo (cond
!                        (ruler-mode-show-tab-stops
!                         ruler-mode-ruler-help-echo-when-tab-stops)
!                        (goal-column
!                         ruler-mode-ruler-help-echo-when-goal-column)
!                        (ruler-mode-ruler-help-echo))))
!          k c)
!     ;; Setup the active area.
!     (while (< i w)
!       ;; Graduations.
!       (cond
!        ;; Show a number graduation.
!        ((= (mod j 10) 0)
!         (setq c (number-to-string (/ j 10))
!               m (length c)
!               k i)
!         (put-text-property
!          i (1+ i) 'face 'ruler-mode-column-number-face
!          ruler)
!         (while (and (> m 0) (>= k 0))
!           (aset ruler k (aref c (setq m (1- m))))
!           (setq k (1- k))))
!        ;; Show an intermediate graduation.
!        ((= (mod j 5) 0)
!         (aset ruler i ruler-mode-inter-graduation-char)))
!       ;; Special columns.
!       (cond
!        ;; Show the `current-column' marker.
!        ((= j (current-column))
!         (aset ruler i ruler-mode-current-column-char)
!         (put-text-property
!          i (1+ i) 'face 'ruler-mode-current-column-face

!          ruler))
!        ;; Show the `goal-column' marker.
!        ((and goal-column (= j goal-column))
!         (aset ruler i ruler-mode-goal-column-char)
!         (put-text-property
!          i (1+ i) 'face 'ruler-mode-goal-column-face
!          ruler)
!         (put-text-property
!          i (1+ i) 'help-echo ruler-mode-goal-column-help-echo
!          ruler))
!        ;; Show the `comment-column' marker.
!        ((= j comment-column)
!         (aset ruler i ruler-mode-comment-column-char)
!         (put-text-property
!          i (1+ i) 'face 'ruler-mode-comment-column-face
!          ruler)
!         (put-text-property
!          i (1+ i) 'help-echo ruler-mode-comment-column-help-echo
!          ruler))
!        ;; Show the `fill-column' marker.
!        ((= j fill-column)
!         (aset ruler i ruler-mode-fill-column-char)
!         (put-text-property
!          i (1+ i) 'face 'ruler-mode-fill-column-face
!          ruler)
!         (put-text-property
!          i (1+ i) 'help-echo ruler-mode-fill-column-help-echo
!          ruler))
!        ;; Show the `tab-stop-list' markers.
!        ((and ruler-mode-show-tab-stops (member j tab-stop-list))
!         (aset ruler i ruler-mode-tab-stop-char)
!         (put-text-property
!          i (1+ i) 'face 'ruler-mode-tab-stop-face
!          ruler)))
!       (setq i (1+ i)
!             j (1+ j)))
!     ;; Return the ruler propertized string.  Using list here,
!     ;; instead of concat visually separate the different areas.
!     (if (nth 2 (window-fringes))
!         ;; fringes outside margins.
!         (list lsb lf lm ruler rm rf rsb)
!       ;; fringes inside margins.
!       (list lsb lm lf ruler rf rm rsb))))
  
  (provide 'ruler-mode)
  

             reply	other threads:[~2004-03-18 13:14 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-03-18 13:14 David PONCE [this message]
2004-03-18 14:27 ` use of symbolic display elements in ruler-mode Stefan Monnier
  -- strict thread matches above, loose matches on Subject: below --
2004-03-18 14:52 David PONCE
2004-03-19  1:50 ` Kim F. Storm
2004-03-19  9:51 David PONCE
2004-03-19 14:20 ` Kim F. Storm
2004-03-19 13:45 David PONCE

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6592006.1079615674954.JavaMail.www@wwinf0802 \
    --to=david.ponce@wanadoo.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).