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: Re: use of symbolic display elements in ruler-mode Date: Fri, 19 Mar 2004 10:51:23 +0100 (CET) Sender: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Message-ID: <11643304.1079689883188.JavaMail.www@wwinf0402> 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 1079690457 15434 80.91.224.253 (19 Mar 2004 10:00:57 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Fri, 19 Mar 2004 10:00:57 +0000 (UTC) Cc: emacs-devel Original-X-From: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Fri Mar 19 11:00:49 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 1B4Go5-0004nP-00 for ; Fri, 19 Mar 2004 11:00:49 +0100 Original-Received: from monty-python.gnu.org ([199.232.76.173]) by quimby.gnus.org with esmtp (Exim 3.35 #1 (Debian)) id 1B4Go4-0004aH-00 for ; Fri, 19 Mar 2004 11:00:48 +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 1B4GnL-0001Z5-NN for emacs-devel@quimby.gnus.org; Fri, 19 Mar 2004 05:00:03 -0500 Original-Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.30) id 1B4Gmk-0001XX-1a for emacs-devel@gnu.org; Fri, 19 Mar 2004 04:59:26 -0500 Original-Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.30) id 1B4Gm2-0001Bi-VV for emacs-devel@gnu.org; Fri, 19 Mar 2004 04:59:14 -0500 Original-Received: from [193.252.22.27] (helo=mwinf0401.wanadoo.fr) by monty-python.gnu.org with esmtp (Exim 4.30) id 1B4Gf1-0007vc-SS for emacs-devel@gnu.org; Fri, 19 Mar 2004 04:51:28 -0500 Original-Received: from wwinf0402 (wwinf0402 [172.22.135.29]) by mwinf0401.wanadoo.fr (SMTP Server) with ESMTP id 3378E580012B; Fri, 19 Mar 2004 10:51:23 +0100 (CET) Original-To: storm@cua.dk 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:20603 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:20603 Hi Kim, > I just installed some changes to the :align-to and :width space > display properties. And added support for non-window systems. >=20 > Specifically, (scroll-bar . x) and (*-fringe . x) no longer exists. > Instead, you have to include scroll-bar and *-fringe in the > proper spots yourself. Following is a new patch that take into account those changes. > Note that you can include nil in the header-line-format list, > as long as the first element of the list is a string (just put "" > there). [...] That's a good thing to know ;-) Thanks! David P.S.: Please, could someone, who has CVS write access, install the patch for me? Thanks! 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.5776 diff -c -r1.5776 ChangeLog *** lisp/ChangeLog=0919 Mar 2004 00:21:10 -0000=091.5776 --- lisp/ChangeLog=0919 Mar 2004 09:45:05 -0000 *************** *** 1,3 **** --- 1,16 ---- + 2004-03-19 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): Default to `ruler-mode-ruler'. + =09(ruler-mode-header-line-format): Simply funcall the above. + =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. + =09(ruler-mode-ruler-function): Default to ruler-mode-ruler +=20 2004-03-19 Kim F. Storm =20 =09* progmodes/compile.el (compilation-start): Always set 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=0919 Mar 2004 09:45:05 -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,545 ---- =20 (defvar ruler-mode-header-line-format-old nil "Hold previous value of `header-line-format'.") =20 ! (defvar ruler-mode-ruler-function 'ruler-mode-ruler ! "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 ruler-mode-ruler-function)) "`header-line-format' used in ruler mode. ! Call `ruler-mode-ruler-function' to compute the ruler value.") =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] --- 552,569 ---- ;; 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 --- 617,740 ---- (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)))) ! (sb (ruler-mode-space ! 'scroll-bar ! 'face 'ruler-mode-pad-face)) ! ;; Remember the scrollbar vertical type. ! (sbvt (car (window-current-scroll-bars))) ! ;; 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 "" (and (eq 'left sbvt) sb) lf lm ! ruler rm rf (and (eq 'right sbvt) sb)) ! ;; fringes inside margins. ! (list "" (and (eq 'left sbvt) sb) lm lf ! ruler rf rm (and (eq 'right sbvt) sb))))) =20 (provide 'ruler-mode) =20