diff options
| author | Richard M. Stallman | 2001-12-13 07:55:49 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 2001-12-13 07:55:49 +0000 |
| commit | a5f7cb26edfbe40b892d0ef248f40dd4332939f9 (patch) | |
| tree | fdd96ef9bd61c39ca8d522ae0644664f8c521d90 | |
| parent | 9c8920d866fdbd49976439da7afc8f45a983535f (diff) | |
| download | emacs-a5f7cb26edfbe40b892d0ef248f40dd4332939f9.tar.gz emacs-a5f7cb26edfbe40b892d0ef248f40dd4332939f9.zip | |
(ruler-mode-left-fringe-cols): Variable removed.
(ruler-mode-left-fringe-cols): Function replaced by more efficient
implementation `ruler-mode-extra-left-cols'.
(ruler-mode-ruler): Use above new function. Take into account
that the fringe areas can now be resized.
| -rw-r--r-- | lisp/ruler-mode.el | 75 |
1 files changed, 18 insertions, 57 deletions
diff --git a/lisp/ruler-mode.el b/lisp/ruler-mode.el index 83b9d2e7548..9d86074a0f0 100644 --- a/lisp/ruler-mode.el +++ b/lisp/ruler-mode.el | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ;; Author: David Ponce <david@dponce.com> | 5 | ;; Author: David Ponce <david@dponce.com> |
| 6 | ;; Maintainer: David Ponce <david@dponce.com> | 6 | ;; Maintainer: David Ponce <david@dponce.com> |
| 7 | ;; Created: 24 Mar 2001 | 7 | ;; Created: 24 Mar 2001 |
| 8 | ;; Version: 1.3.1 | 8 | ;; Version: 1.4 |
| 9 | ;; Keywords: environment | 9 | ;; Keywords: environment |
| 10 | 10 | ||
| 11 | ;; This file is part of GNU Emacs. | 11 | ;; This file is part of GNU Emacs. |
| @@ -438,75 +438,36 @@ C-mouse-2: hide tabs" | |||
| 438 | "Right margin %S" | 438 | "Right margin %S" |
| 439 | "Help string shown when mouse is over the right margin area.") | 439 | "Help string shown when mouse is over the right margin area.") |
| 440 | 440 | ||
| 441 | (defvar ruler-mode-left-fringe-cols nil | 441 | (defun ruler-mode-extra-left-cols () |
| 442 | "Hold last result of function `ruler-mode-left-fringe-cols'. | 442 | "Return number of extra columns on the left side of selected frame. |
| 443 | This cache is local to each frame.") | 443 | That is the number of columns occupied by the left fringe area and |
| 444 | (make-variable-frame-local 'ruler-mode-left-fringe-cols) | 444 | vertical scrollbar on the left side of the selected frame." |
| 445 | 445 | (let ((w (frame-first-window)) | |
| 446 | (defun ruler-mode-left-fringe-cols (&optional check) | 446 | (xy (cons 0 0))) |
| 447 | "Return the character width of fringe and left vertical scrollbar. | 447 | (with-current-buffer (window-buffer w) |
| 448 | That is a pair (FRINGE-COLS . VSCROLLBAR-COLS) where: | 448 | (let (header-line-format) |
| 449 | 449 | (while (not (listp (coordinates-in-window-p xy w))) | |
| 450 | - - FRINGE-COLS is the number of columns occupied by a fringe area. | 450 | (setcar xy (1+ (car xy)))) |
| 451 | 451 | (car xy))))) | |
| 452 | - - VSCROLLBAR-COLS is the number of columns occupied by the left | ||
| 453 | vertical scrollbar or 0 if there is no vertical scrollbar on the | ||
| 454 | left side. | ||
| 455 | |||
| 456 | The first time this function is called its result is saved in a frame | ||
| 457 | local cache and then returned on next calls. If optional argument | ||
| 458 | CHECK is non-nil or if the frame 'vertical-scroll-bars parameter has | ||
| 459 | been changed the function re-computes the result." | ||
| 460 | (let* ((f (selected-frame)) | ||
| 461 | (vsb (frame-parameter f 'vertical-scroll-bars)) | ||
| 462 | (lfc (frame-parameter f 'ruler-mode-left-fringe-cols))) | ||
| 463 | (if (or check (not (eq (cdr lfc) vsb))) | ||
| 464 | (let* ((w (frame-first-window f)) | ||
| 465 | (sbw (frame-pixel-width f)) | ||
| 466 | (chw (frame-char-width f)) | ||
| 467 | (chx (/ 1.0 (float chw))) | ||
| 468 | (pos (cons 0.0 0)) | ||
| 469 | (lfw 0.0) | ||
| 470 | coord) | ||
| 471 | (if vsb | ||
| 472 | (modify-frame-parameters | ||
| 473 | f '((vertical-scroll-bars . nil)))) | ||
| 474 | (setq coord (coordinates-in-window-p pos w)) | ||
| 475 | (while (not (memq coord '(left-fringe mode-line))) | ||
| 476 | (setcdr pos (1+ (cdr pos))) | ||
| 477 | (setq coord (coordinates-in-window-p pos w))) | ||
| 478 | (while (eq coord 'left-fringe) | ||
| 479 | (setcar pos (+ (car pos) chx)) | ||
| 480 | (setq lfw (+ lfw chx) | ||
| 481 | coord (coordinates-in-window-p pos w))) | ||
| 482 | (or vsb | ||
| 483 | (modify-frame-parameters | ||
| 484 | f '((vertical-scroll-bars . right)))) | ||
| 485 | (setq sbw (/ (abs (- sbw (frame-pixel-width f))) chw) | ||
| 486 | lfw (floor lfw)) | ||
| 487 | (setq lfc (cons (cons lfw (if (eq vsb 'left) sbw 0)) vsb)) | ||
| 488 | (modify-frame-parameters | ||
| 489 | f (list (cons 'vertical-scroll-bars vsb) | ||
| 490 | (cons 'ruler-mode-left-fringe-cols lfc))))) | ||
| 491 | (car lfc))) | ||
| 492 | 452 | ||
| 493 | (defun ruler-mode-ruler () | 453 | (defun ruler-mode-ruler () |
| 494 | "Return a string ruler." | 454 | "Return a string ruler." |
| 495 | (if ruler-mode | 455 | (if ruler-mode |
| 496 | (let* ((lfr (ruler-mode-left-fringe-cols)) | 456 | (let* ((j (ruler-mode-extra-left-cols)) |
| 497 | (w (+ (window-width) 1 (cdr lfr))) | 457 | (k (/ (or (frame-parameter nil 'right-fringe) 0) |
| 458 | (frame-char-width))) | ||
| 459 | (w (+ (window-width) j)) | ||
| 498 | (m (window-margins)) | 460 | (m (window-margins)) |
| 499 | (l (or (car m) 0)) | 461 | (l (or (car m) 0)) |
| 500 | (r (or (cdr m) 0)) | 462 | (r (or (cdr m) 0)) |
| 501 | (j (+ (car lfr) (cdr lfr))) | ||
| 502 | (o (- (window-hscroll) l j)) | 463 | (o (- (window-hscroll) l j)) |
| 503 | (i 0) | 464 | (i 0) |
| 504 | (ruler (concat | 465 | (ruler (concat |
| 505 | ;; unit graduations | 466 | ;; unit graduations |
| 506 | (make-string w ruler-mode-basic-graduation-char) | 467 | (make-string w ruler-mode-basic-graduation-char) |
| 507 | ;; extra space to fill the header line | 468 | ;; extra space to fill the header line |
| 508 | (make-string j ?\ ))) | 469 | (make-string k ?\ ))) |
| 509 | c k) | 470 | c) |
| 510 | 471 | ||
| 511 | ;; Setup default face and help echo. | 472 | ;; Setup default face and help echo. |
| 512 | (put-text-property 0 (length ruler) | 473 | (put-text-property 0 (length ruler) |