From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: David PONCE Newsgroups: gmane.emacs.devel Subject: use of symbolic display elements in ruler-mode Date: Thu, 18 Mar 2004 14:14:34 +0100 (CET) Sender: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Message-ID: <6592006.1079615674954.JavaMail.www@wwinf0802> Reply-To: david.ponce@wanadoo.fr NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: sea.gmane.org 1079616144 8507 80.91.224.253 (18 Mar 2004 13:22:24 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Thu, 18 Mar 2004 13:22:24 +0000 (UTC) Original-X-From: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Thu Mar 18 14:22:15 2004 Return-path: Original-Received: from quimby.gnus.org ([80.91.224.244]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1B3xTT-0001kK-00 for ; Thu, 18 Mar 2004 14:22:15 +0100 Original-Received: from monty-python.gnu.org ([199.232.76.173]) by quimby.gnus.org with esmtp (Exim 3.35 #1 (Debian)) id 1B3xTS-0005vd-00 for ; Thu, 18 Mar 2004 14:22:14 +0100 Original-Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.30) id 1B3xO3-0003hM-Ff for emacs-devel@quimby.gnus.org; Thu, 18 Mar 2004 08:16:39 -0500 Original-Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.30) id 1B3xMw-0003gh-TZ for emacs-devel@gnu.org; Thu, 18 Mar 2004 08:15:30 -0500 Original-Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.30) id 1B3xMQ-0003bd-81 for emacs-devel@gnu.org; Thu, 18 Mar 2004 08:15:29 -0500 Original-Received: from [193.252.22.23] (helo=mwinf0802.wanadoo.fr) by monty-python.gnu.org with esmtp (Exim 4.30) id 1B3xM8-0003YM-SS for emacs-devel@gnu.org; Thu, 18 Mar 2004 08:14:41 -0500 Original-Received: from wwinf0802 (wwinf0802 [172.22.139.29]) by mwinf0802.wanadoo.fr (SMTP Server) with ESMTP id EB4FF1800128 for ; Thu, 18 Mar 2004 14:14:34 +0100 (CET) Original-To: emacs-devel X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.4 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Xref: main.gmane.org gmane.emacs.devel:20577 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:20577 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 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/emacs/emacs/lisp/ChangeLog,v retrieving revision 1.5775 diff -c -r1.5775 ChangeLog *** lisp/ChangeLog=0918 Mar 2004 03:07:38 -0000=091.5775 --- lisp/ChangeLog=0918 Mar 2004 12:40:37 -0000 *************** *** 1,3 **** --- 1,15 ---- + 2004-03-18 David Ponce +=20 + =09* ruler-mode.el (ruler-mode-header-line-format-old): Don't + =09`make-variable-buffer-local'. + =09(ruler-mode-ruler-function): Doc fix. + =09(ruler-mode-header-line-format): Simplify value. Doc fix. + =09(ruler-mode): Use `make-local-variable' and `kill-local-variable' + =09to save/restore a previous header line format. + =09(ruler-mode-space): Don't depend on a numeric WIDTH value. + =09(ruler-mode-ruler): Use symbolic display elements for scrollbar, + =09fringes and margins width. +=20 2004-03-17 Luc Teirlinck =20 =09* simple.el (clone-buffer): Doc fix. Index: lisp/ruler-mode.el =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D 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=0915 Mar 2004 08:39:06 -0000=091.19 --- lisp/ruler-mode.el=0918 Mar 2004 12:40:37 -0000 *************** *** 1,6 **** ;;; ruler-mode.el --- display a ruler in the header line =20 ! ;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. =20 ;; Author: David Ponce ;; Maintainer: David Ponce --- 1,6 ---- ;;; ruler-mode.el --- display a ruler in the header line =20 ! ;; Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. =20 ;; Author: David Ponce ;; Maintainer: David Ponce *************** *** 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=20 ;; function as the buffer-local value of `ruler-mode-ruler-function'. =20 ;; 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'. =20 ;; Installation *************** *** 531,549 **** =20 (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) =20 (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.") =20 (defconst ruler-mode-header-line-format ! '(:eval (funcall (if ruler-mode-ruler-function ! =09=09 ruler-mode-ruler-function ! =09=09 '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.") =20 ;;;###autoload (define-minor-mode ruler-mode --- 531,546 ---- =20 (defvar ruler-mode-header-line-format-old nil "Hold previous value of `header-line-format'.") =20 (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.") =20 (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'.") =20 ;;;###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))) =0C ;; 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))) =0C ;; 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) ! "")) =0C (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) !=20 ! ;; 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) !=20 ! ;; Setup the active area. ! (while (< i w) ! ;; Graduations. ! (cond ! ;; Show a number graduation. ! ((=3D (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) (>=3D k 0)) ! (aset ruler k (aref c (setq m (1- m)))) ! (setq k (1- k)))) ! ;; Show an intermediate graduation. ! ((=3D (mod j 5) 0) ! (aset ruler i ruler-mode-inter-graduation-char))) ! ;; Special columns. ! (cond ! ;; Show the `current-column' marker. ! ((=3D 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 (=3D 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. ! ((=3D 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. ! ((=3D 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))) !=20 ! ;; 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))))) =20 (provide 'ruler-mode) =20 --- 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)) =0C (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. ! ((=3D (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) (>=3D k 0)) ! (aset ruler k (aref c (setq m (1- m)))) ! (setq k (1- k)))) ! ;; Show an intermediate graduation. ! ((=3D (mod j 5) 0) ! (aset ruler i ruler-mode-inter-graduation-char))) ! ;; Special columns. ! (cond ! ;; Show the `current-column' marker. ! ((=3D 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 (=3D 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. ! ((=3D 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. ! ((=3D 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)))) =20 (provide 'ruler-mode) =20