1 |
;;; ruler-mode.el --- display a ruler in the header line |
;;; ruler-mode.el --- display a ruler in the header line |
2 |
|
|
3 |
;; Copyright (C) 2001 Free Software Foundation, Inc. |
;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. |
4 |
|
|
5 |
;; Author: David Ponce <david@dponce.com> |
;; Author: David Ponce <david@dponce.com> |
6 |
;; Maintainer: David Ponce <david@dponce.com> |
;; Maintainer: David Ponce <david@dponce.com> |
7 |
;; Created: 24 Mar 2001 |
;; Created: 24 Mar 2001 |
8 |
;; Version: 1.4 |
;; Version: 1.5 |
9 |
;; Keywords: environment convenience |
;; Keywords: convenience |
10 |
|
|
11 |
;; This file is part of GNU Emacs. |
;; This file is part of GNU Emacs. |
12 |
|
|
30 |
;; This library provides a minor mode to display a ruler in the header |
;; This library provides a minor mode to display a ruler in the header |
31 |
;; line. It works only on Emacs 21. |
;; line. It works only on Emacs 21. |
32 |
;; |
;; |
33 |
;; You can use the mouse to change the `fill-column', `window-margins' |
;; You can use the mouse to change the `fill-column' `comment-column', |
34 |
;; and `tab-stop-list' settings: |
;; `goal-column', `window-margins' and `tab-stop-list' settings: |
35 |
;; |
;; |
36 |
;; [header-line (shift down-mouse-1)] set left margin to the ruler |
;; [header-line (shift down-mouse-1)] set left margin to the ruler |
37 |
;; graduation where the mouse pointer is on. |
;; graduation where the mouse pointer is on. |
39 |
;; [header-line (shift down-mouse-3)] set right margin to the ruler |
;; [header-line (shift down-mouse-3)] set right margin to the ruler |
40 |
;; graduation where the mouse pointer is on. |
;; graduation where the mouse pointer is on. |
41 |
;; |
;; |
42 |
;; [header-line down-mouse-2] set `fill-column' to the ruler |
;; [header-line down-mouse-2] set `fill-column', `comment-column' or |
43 |
;; graduation where the mouse pointer is on. |
;; `goal-column' to the ruler graduation with the mouse dragging. |
44 |
;; |
;; |
45 |
;; [header-line (control down-mouse-1)] add a tab stop to the ruler |
;; [header-line (control down-mouse-1)] add a tab stop to the ruler |
46 |
;; graduation where the mouse pointer is on. |
;; graduation where the mouse pointer is on. |
55 |
;; |
;; |
56 |
;; In the ruler the character `ruler-mode-current-column-char' shows |
;; In the ruler the character `ruler-mode-current-column-char' shows |
57 |
;; the `current-column' location, `ruler-mode-fill-column-char' shows |
;; the `current-column' location, `ruler-mode-fill-column-char' shows |
58 |
;; the `fill-column' location and `ruler-mode-tab-stop-char' shows tab |
;; the `fill-column' location, `ruler-mode-comment-column-char' shows |
59 |
|
;; the `comment-column' location, `ruler-mode-goal-column-char' shows |
60 |
|
;; the `goal-column' and `ruler-mode-tab-stop-char' shows tab |
61 |
;; stop locations. `window-margins' areas are shown with a different |
;; stop locations. `window-margins' areas are shown with a different |
62 |
;; background color. |
;; background color. |
63 |
;; |
;; |
75 |
;; - `ruler-mode-default-face' the ruler default face. |
;; - `ruler-mode-default-face' the ruler default face. |
76 |
;; - `ruler-mode-fill-column-face' the face used to highlight the |
;; - `ruler-mode-fill-column-face' the face used to highlight the |
77 |
;; `fill-column' character. |
;; `fill-column' character. |
78 |
|
;; - `ruler-mode-comment-column-face' the face used to highlight the |
79 |
|
;; `comment-column' character. |
80 |
|
;; - `ruler-mode-goal-column-face' the face used to highlight the |
81 |
|
;; `goal-column' character. |
82 |
;; - `ruler-mode-current-column-face' the face used to highlight the |
;; - `ruler-mode-current-column-face' the face used to highlight the |
83 |
;; `current-column' character. |
;; `current-column' character. |
84 |
;; - `ruler-mode-tab-stop-face' the face used to highlight tab stop |
;; - `ruler-mode-tab-stop-face' the face used to highlight tab stop |
112 |
(defgroup ruler-mode nil |
(defgroup ruler-mode nil |
113 |
"Display a ruler in the header line." |
"Display a ruler in the header line." |
114 |
:version "21.4" |
:version "21.4" |
115 |
:group 'environment) |
:group 'convenience) |
116 |
|
|
117 |
(defcustom ruler-mode-show-tab-stops nil |
(defcustom ruler-mode-show-tab-stops nil |
118 |
"*If non-nil the ruler shows tab stop positions. |
"*If non-nil the ruler shows tab stop positions. |
134 |
(widget-put widget :error |
(widget-put widget :error |
135 |
(format "Invalid character value: %S" value)) |
(format "Invalid character value: %S" value)) |
136 |
widget)))) |
widget)))) |
137 |
|
|
138 |
(defcustom ruler-mode-fill-column-char (if window-system |
(defcustom ruler-mode-fill-column-char (if window-system |
139 |
?\¶ |
?\¶ |
140 |
?\|) |
?\|) |
145 |
(integer :tag "Integer char value" |
(integer :tag "Integer char value" |
146 |
:validate ruler-mode-character-validate))) |
:validate ruler-mode-character-validate))) |
147 |
|
|
148 |
|
(defcustom ruler-mode-comment-column-char ?\# |
149 |
|
"*Character used at the `comment-column' location." |
150 |
|
:group 'ruler-mode |
151 |
|
:type '(choice |
152 |
|
(character :tag "Character") |
153 |
|
(integer :tag "Integer char value" |
154 |
|
:validate ruler-mode-character-validate))) |
155 |
|
|
156 |
|
(defcustom ruler-mode-goal-column-char ?G |
157 |
|
"*Character used at the `goal-column' location." |
158 |
|
:group 'ruler-mode |
159 |
|
:type '(choice |
160 |
|
(character :tag "Character") |
161 |
|
(integer :tag "Integer char value" |
162 |
|
:validate ruler-mode-character-validate))) |
163 |
|
|
164 |
(defcustom ruler-mode-current-column-char (if window-system |
(defcustom ruler-mode-current-column-char (if window-system |
165 |
?\¦ |
?\¦ |
166 |
?\@) |
?\@) |
179 |
(integer :tag "Integer char value" |
(integer :tag "Integer char value" |
180 |
:validate ruler-mode-character-validate))) |
:validate ruler-mode-character-validate))) |
181 |
|
|
182 |
(defcustom ruler-mode-margins-char ?\ |
(defcustom ruler-mode-margins-char ?\s |
183 |
"*Character used in margin areas." |
"*Character used in margin areas." |
184 |
:group 'ruler-mode |
:group 'ruler-mode |
185 |
:type '(choice |
:type '(choice |
202 |
(character :tag "Character") |
(character :tag "Character") |
203 |
(integer :tag "Integer char value" |
(integer :tag "Integer char value" |
204 |
:validate ruler-mode-character-validate))) |
:validate ruler-mode-character-validate))) |
205 |
|
|
206 |
|
(defcustom ruler-mode-set-goal-column-ding-flag t |
207 |
|
"*Non-nil means do `ding' when `goal-column' is set." |
208 |
|
:group 'ruler-mode |
209 |
|
:type 'boolean) |
210 |
|
|
211 |
(defface ruler-mode-default-face |
(defface ruler-mode-default-face |
212 |
'((((type tty)) |
'((((type tty)) |
241 |
"Face used to highlight the fill column character." |
"Face used to highlight the fill column character." |
242 |
:group 'ruler-mode) |
:group 'ruler-mode) |
243 |
|
|
244 |
|
(defface ruler-mode-comment-column-face |
245 |
|
'((t |
246 |
|
(:inherit ruler-mode-default-face |
247 |
|
:foreground "red" |
248 |
|
))) |
249 |
|
"Face used to highlight the comment column character." |
250 |
|
:group 'ruler-mode) |
251 |
|
|
252 |
|
(defface ruler-mode-goal-column-face |
253 |
|
'((t |
254 |
|
(:inherit ruler-mode-default-face |
255 |
|
:foreground "red" |
256 |
|
))) |
257 |
|
"Face used to highlight the goal column character." |
258 |
|
:group 'ruler-mode) |
259 |
|
|
260 |
(defface ruler-mode-tab-stop-face |
(defface ruler-mode-tab-stop-face |
261 |
'((t |
'((t |
262 |
(:inherit ruler-mode-default-face |
(:inherit ruler-mode-default-face |
324 |
(message "Right margin set to %d (was %d)" rm rm0) |
(message "Right margin set to %d (was %d)" rm rm0) |
325 |
(set-window-margins nil lm rm))))) |
(set-window-margins nil lm rm))))) |
326 |
|
|
327 |
(defun ruler-mode-mouse-set-fill-column (start-event) |
(defvar ruler-mode-mouse-current-grab-object nil |
328 |
"Set `fill-column' to the graduation where the mouse pointer is on. |
"Column symbol dragged in the ruler. |
329 |
START-EVENT is the mouse click event." |
That is `fill-column', `comment-column', `goal-column', or nil when |
330 |
|
nothing is dragged.") |
331 |
|
|
332 |
|
(defun ruler-mode-mouse-grab-any-column (start-event) |
333 |
|
"Set a column symbol to the graduation with mouse dragging. |
334 |
|
See also variable `ruler-mode-mouse-current-grab-object'. |
335 |
|
START-EVENT is the mouse down event." |
336 |
(interactive "e") |
(interactive "e") |
337 |
|
(setq ruler-mode-mouse-current-grab-object nil) |
338 |
|
(let* ((start (event-start start-event)) |
339 |
|
m col w lm rm hs newc oldc) |
340 |
|
(save-selected-window |
341 |
|
(select-window (posn-window start)) |
342 |
|
(setq m (window-margins) |
343 |
|
lm (or (car m) 0) |
344 |
|
rm (or (cdr m) 0) |
345 |
|
col (- (car (posn-col-row start)) lm) |
346 |
|
w (window-width) |
347 |
|
hs (window-hscroll) |
348 |
|
newc (+ col hs)) |
349 |
|
;; |
350 |
|
;; About the ways to handle the goal column: |
351 |
|
;; A. update the value of the goal column if goal-column has |
352 |
|
;; non-nil value and if the mouse is dragged |
353 |
|
;; B. set value to the goal column if goal-column has nil and if |
354 |
|
;; the mouse is just clicked, not dragged. |
355 |
|
;; C. unset value to the goal column if goal-column has non-nil |
356 |
|
;; and mouse is just clicked on goal-column character on the |
357 |
|
;; ruler, not dragged. |
358 |
|
;; |
359 |
|
(and (>= col 0) (< (+ col lm rm) w) |
360 |
|
(cond |
361 |
|
((eq newc fill-column) |
362 |
|
(setq oldc fill-column) |
363 |
|
(setq ruler-mode-mouse-current-grab-object 'fill-column) |
364 |
|
t) |
365 |
|
((eq newc comment-column) |
366 |
|
(setq oldc comment-column) |
367 |
|
(setq ruler-mode-mouse-current-grab-object 'comment-column) |
368 |
|
t) |
369 |
|
((eq newc goal-column) ; A. update goal column |
370 |
|
(setq oldc goal-column) |
371 |
|
(setq ruler-mode-mouse-current-grab-object 'goal-column) |
372 |
|
t) |
373 |
|
((null goal-column) ; B. set goal column |
374 |
|
(setq oldc goal-column) |
375 |
|
(setq goal-column newc) |
376 |
|
;; mouse-2 coming AFTER drag-mouse-2 invokes `ding'. |
377 |
|
;; This `ding' flushes the next messages about setting |
378 |
|
;; goal column. So here I force fetch the event(mouse-2) |
379 |
|
;; and throw away. |
380 |
|
(read-event) |
381 |
|
;; Ding BEFORE `message' is OK. |
382 |
|
(if ruler-mode-set-goal-column-ding-flag |
383 |
|
(ding)) |
384 |
|
(message |
385 |
|
"Goal column %d (click `%s' on the ruler again to unset it)" |
386 |
|
newc |
387 |
|
(propertize (char-to-string ruler-mode-goal-column-char) |
388 |
|
'face 'ruler-mode-goal-column-face)) |
389 |
|
;; don't enter drag iteration |
390 |
|
nil)) |
391 |
|
(if (eq 'click (ruler-mode-mouse-drag-any-column-iteration |
392 |
|
(posn-window start))) |
393 |
|
(if (eq 'goal-column ruler-mode-mouse-current-grab-object) |
394 |
|
;; C. unset goal column |
395 |
|
(set-goal-column t)) |
396 |
|
;; *-column is updated; report it |
397 |
|
(message "%s is set to %d (was %d)" |
398 |
|
ruler-mode-mouse-current-grab-object |
399 |
|
(eval ruler-mode-mouse-current-grab-object) |
400 |
|
oldc)))))) |
401 |
|
|
402 |
|
(defun ruler-mode-mouse-drag-any-column-iteration (window) |
403 |
|
"Update the ruler while dragging the mouse. |
404 |
|
WINDOW is the window where the last down-mouse event is occurred. |
405 |
|
Return a symbol `drag' if the mouse is actually dragged. |
406 |
|
Return a symbol `click' if the mouse is just clicked." |
407 |
|
(let (newevent |
408 |
|
(drag-count 0)) |
409 |
|
(track-mouse |
410 |
|
(while (progn |
411 |
|
(setq newevent (read-event)) |
412 |
|
(mouse-movement-p newevent)) |
413 |
|
(setq drag-count (1+ drag-count)) |
414 |
|
(if (eq window (posn-window (event-end newevent))) |
415 |
|
(progn |
416 |
|
(ruler-mode-mouse-drag-any-column newevent) |
417 |
|
(force-mode-line-update))))) |
418 |
|
(if (and (eq drag-count 0) |
419 |
|
(eq 'click (car (event-modifiers newevent)))) |
420 |
|
'click |
421 |
|
'drag))) |
422 |
|
|
423 |
|
(defun ruler-mode-mouse-drag-any-column (start-event) |
424 |
|
"Update the ruler for START-EVENT, one mouse motion event." |
425 |
(let* ((start (event-start start-event)) |
(let* ((start (event-start start-event)) |
426 |
(end (event-end start-event)) |
(end (event-end start-event)) |
427 |
m col w lm rm hs fc) |
m col w lm rm hs newc) |
428 |
(if (eq start end) ;; mouse click |
(save-selected-window |
429 |
(save-selected-window |
(select-window (posn-window start)) |
430 |
(select-window (posn-window start)) |
(setq m (window-margins) |
431 |
(setq m (window-margins) |
lm (or (car m) 0) |
432 |
lm (or (car m) 0) |
rm (or (cdr m) 0) |
433 |
rm (or (cdr m) 0) |
col (- (car (posn-col-row end)) lm) |
434 |
col (- (car (posn-col-row start)) lm) |
w (window-width) |
435 |
w (window-width) |
hs (window-hscroll) |
436 |
hs (window-hscroll) |
newc (+ col hs)) |
437 |
fc (+ col hs)) |
(if (and (>= col 0) (< (+ col lm rm) w)) |
438 |
(and (>= col 0) (< (+ col lm rm) w) |
(set ruler-mode-mouse-current-grab-object newc))))) |
|
(progn |
|
|
(message "Fill column set to %d (was %d)" fc fill-column) |
|
|
(setq fill-column fc))))))) |
|
439 |
|
|
440 |
(defun ruler-mode-mouse-add-tab-stop (start-event) |
(defun ruler-mode-mouse-add-tab-stop (start-event) |
441 |
"Add a tab stop to the graduation where the mouse pointer is on. |
"Add a tab stop to the graduation where the mouse pointer is on. |
480 |
col (- (car (posn-col-row start)) lm) |
col (- (car (posn-col-row start)) lm) |
481 |
w (window-width) |
w (window-width) |
482 |
hs (window-hscroll) |
hs (window-hscroll) |
483 |
ts (+ col hs)) |
ts (+ col hs)) |
484 |
(and (>= col 0) (< (+ col lm rm) w) |
(and (>= col 0) (< (+ col lm rm) w) |
485 |
(member ts tab-stop-list) |
(member ts tab-stop-list) |
486 |
(progn |
(progn |
501 |
(define-key km [header-line down-mouse-3] |
(define-key km [header-line down-mouse-3] |
502 |
#'ignore) |
#'ignore) |
503 |
(define-key km [header-line down-mouse-2] |
(define-key km [header-line down-mouse-2] |
504 |
#'ruler-mode-mouse-set-fill-column) |
#'ruler-mode-mouse-grab-any-column) |
505 |
(define-key km [header-line (shift down-mouse-1)] |
(define-key km [header-line (shift down-mouse-1)] |
506 |
#'ruler-mode-mouse-set-left-margin) |
#'ruler-mode-mouse-set-left-margin) |
507 |
(define-key km [header-line (shift down-mouse-3)] |
(define-key km [header-line (shift down-mouse-3)] |
533 |
(progn |
(progn |
534 |
;; When `ruler-mode' is on save previous header line format |
;; When `ruler-mode' is on save previous header line format |
535 |
;; and install the ruler header line format. |
;; and install the ruler header line format. |
536 |
(setq ruler-mode-header-line-format-old header-line-format |
(when (local-variable-p 'header-line-format) |
537 |
header-line-format ruler-mode-header-line-format) |
(setq ruler-mode-header-line-format-old header-line-format)) |
538 |
|
(setq header-line-format ruler-mode-header-line-format) |
539 |
(add-hook 'post-command-hook ; add local hook |
(add-hook 'post-command-hook ; add local hook |
540 |
#'force-mode-line-update nil t)) |
#'force-mode-line-update nil t)) |
541 |
;; When `ruler-mode' is off restore previous header line format if |
;; When `ruler-mode' is off restore previous header line format if |
542 |
;; the current one is the ruler header line format. |
;; the current one is the ruler header line format. |
543 |
(if (eq header-line-format ruler-mode-header-line-format) |
(when (eq header-line-format ruler-mode-header-line-format) |
544 |
(setq header-line-format ruler-mode-header-line-format-old)) |
(kill-local-variable 'header-line-format) |
545 |
|
(when ruler-mode-header-line-format-old |
546 |
|
(setq header-line-format ruler-mode-header-line-format-old))) |
547 |
(remove-hook 'post-command-hook ; remove local hook |
(remove-hook 'post-command-hook ; remove local hook |
548 |
#'force-mode-line-update t))) |
#'force-mode-line-update t))) |
549 |
|
|
550 |
;; Add ruler-mode to the minor mode menu in the mode line |
;; Add ruler-mode to the minor mode menu in the mode line |
551 |
(define-key mode-line-mode-menu [ruler-mode] |
(define-key mode-line-mode-menu [ruler-mode] |
552 |
`(menu-item "Ruler" ruler-mode |
`(menu-item "Ruler" ruler-mode |
553 |
:button (:toggle . ruler-mode))) |
:button (:toggle . ruler-mode))) |
554 |
|
|
555 |
(defconst ruler-mode-ruler-help-echo |
(defconst ruler-mode-ruler-help-echo |
556 |
"\ |
"\ |
557 |
S-mouse-1/3: set L/R margin, \ |
S-mouse-1/3: set L/R margin, \ |
558 |
mouse-2: set fill col, \ |
mouse-2: set goal column, \ |
559 |
C-mouse-2: show tabs" |
C-mouse-2: show tabs" |
560 |
"Help string shown when mouse pointer is over the ruler. |
"Help string shown when mouse is over the ruler. |
561 |
`ruler-mode-show-tab-stops' is nil.") |
`ruler-mode-show-tab-stops' is nil.") |
562 |
|
|
563 |
(defconst ruler-mode-ruler-help-echo-tab |
(defconst ruler-mode-ruler-help-echo-when-goal-column |
564 |
|
"\ |
565 |
|
S-mouse-1/3: set L/R margin, \ |
566 |
|
C-mouse-2: show tabs" |
567 |
|
"Help string shown when mouse is over the ruler. |
568 |
|
`goal-column' is set and `ruler-mode-show-tab-stops' is nil.") |
569 |
|
|
570 |
|
(defconst ruler-mode-ruler-help-echo-when-tab-stops |
571 |
"\ |
"\ |
572 |
C-mouse1/3: set/unset tab, \ |
C-mouse1/3: set/unset tab, \ |
573 |
C-mouse-2: hide tabs" |
C-mouse-2: hide tabs" |
574 |
"Help string shown when mouse pointer is over the ruler. |
"Help string shown when mouse is over the ruler. |
575 |
`ruler-mode-show-tab-stops' is non-nil.") |
`ruler-mode-show-tab-stops' is non-nil.") |
576 |
|
|
577 |
|
(defconst ruler-mode-fill-column-help-echo |
578 |
|
"drag-mouse-2: set fill column" |
579 |
|
"Help string shown when mouse is on the fill column character.") |
580 |
|
|
581 |
|
(defconst ruler-mode-comment-column-help-echo |
582 |
|
"drag-mouse-2: set comment column" |
583 |
|
"Help string shown when mouse is on the comment column character.") |
584 |
|
|
585 |
|
(defconst ruler-mode-goal-column-help-echo |
586 |
|
"\ |
587 |
|
drag-mouse-2: set goal column, \ |
588 |
|
mouse-2: unset goal column" |
589 |
|
"Help string shown when mouse is on the goal column character.") |
590 |
|
|
591 |
(defconst ruler-mode-left-margin-help-echo |
(defconst ruler-mode-left-margin-help-echo |
592 |
"Left margin %S" |
"Left margin %S" |
593 |
"Help string shown when mouse is over the left margin area.") |
"Help string shown when mouse is over the left margin area.") |
609 |
(defmacro ruler-mode-left-scroll-bar-cols () |
(defmacro ruler-mode-left-scroll-bar-cols () |
610 |
"Return the width, measured in columns, of the left vertical scrollbar." |
"Return the width, measured in columns, of the left vertical scrollbar." |
611 |
'(if (eq (frame-parameter nil 'vertical-scroll-bars) 'left) |
'(if (eq (frame-parameter nil 'vertical-scroll-bars) 'left) |
612 |
(round (or (frame-parameter nil 'scroll-bar-width) 0) |
(let ((sbw (frame-parameter nil 'scroll-bar-width))) |
613 |
(frame-char-width)) |
;; nil means it's a non-toolkit scroll bar, |
614 |
|
;; and its width in columns is 14 pixels rounded up. |
615 |
|
(unless sbw (setq sbw 14)) |
616 |
|
;; Always round up to multiple of columns. |
617 |
|
(ceiling sbw (frame-char-width))) |
618 |
0)) |
0)) |
619 |
|
|
620 |
(defmacro ruler-mode-right-scroll-bar-cols () |
(defmacro ruler-mode-right-scroll-bar-cols () |
649 |
'face 'ruler-mode-default-face |
'face 'ruler-mode-default-face |
650 |
ruler) |
ruler) |
651 |
(put-text-property 0 (length ruler) |
(put-text-property 0 (length ruler) |
652 |
'help-echo |
'help-echo |
653 |
(if ruler-mode-show-tab-stops |
(if ruler-mode-show-tab-stops |
654 |
ruler-mode-ruler-help-echo-tab |
ruler-mode-ruler-help-echo-when-tab-stops |
655 |
ruler-mode-ruler-help-echo) |
(if goal-column |
656 |
|
ruler-mode-ruler-help-echo-when-goal-column |
657 |
|
ruler-mode-ruler-help-echo)) |
658 |
ruler) |
ruler) |
659 |
;; Setup the local map. |
;; Setup the local map. |
660 |
(put-text-property 0 (length ruler) |
(put-text-property 0 (length ruler) |
706 |
(while (< i (length ruler)) |
(while (< i (length ruler)) |
707 |
(aset ruler i ruler-mode-margins-char) |
(aset ruler i ruler-mode-margins-char) |
708 |
(setq i (1+ i))) |
(setq i (1+ i))) |
709 |
|
|
710 |
|
;; Show the `goal-column' marker. |
711 |
|
(if goal-column |
712 |
|
(progn |
713 |
|
(setq i (- goal-column o)) |
714 |
|
(and (>= i 0) (< i r) |
715 |
|
(aset ruler i ruler-mode-goal-column-char) |
716 |
|
(progn |
717 |
|
(put-text-property |
718 |
|
i (1+ i) 'face 'ruler-mode-goal-column-face |
719 |
|
ruler) |
720 |
|
(put-text-property |
721 |
|
i (1+ i) 'help-echo ruler-mode-goal-column-help-echo |
722 |
|
ruler)) |
723 |
|
))) |
724 |
|
|
725 |
|
;; Show the `comment-column' marker. |
726 |
|
(setq i (- comment-column o)) |
727 |
|
(and (>= i 0) (< i r) |
728 |
|
(aset ruler i ruler-mode-comment-column-char) |
729 |
|
(progn |
730 |
|
(put-text-property |
731 |
|
i (1+ i) 'face 'ruler-mode-comment-column-face |
732 |
|
ruler) |
733 |
|
(put-text-property |
734 |
|
i (1+ i) 'help-echo ruler-mode-comment-column-help-echo |
735 |
|
ruler))) |
736 |
|
|
737 |
;; Show the `fill-column' marker. |
;; Show the `fill-column' marker. |
738 |
(setq i (- fill-column o)) |
(setq i (- fill-column o)) |
739 |
(and (>= i 0) (< i r) |
(and (>= i 0) (< i r) |
740 |
(aset ruler i ruler-mode-fill-column-char) |
(aset ruler i ruler-mode-fill-column-char) |
741 |
(put-text-property |
(progn (put-text-property |
742 |
i (1+ i) 'face 'ruler-mode-fill-column-face |
i (1+ i) 'face 'ruler-mode-fill-column-face |
743 |
ruler)) |
ruler) |
744 |
|
(put-text-property |
745 |
|
i (1+ i) 'help-echo ruler-mode-fill-column-help-echo |
746 |
|
ruler))) |
747 |
|
|
748 |
;; Show the `tab-stop-list' markers. |
;; Show the `tab-stop-list' markers. |
749 |
(if ruler-mode-show-tab-stops |
(if ruler-mode-show-tab-stops |
757 |
(put-text-property |
(put-text-property |
758 |
i (1+ i) |
i (1+ i) |
759 |
'face (cond |
'face (cond |
760 |
;; Don't override the fill-column face |
;; Don't override the *-column face |
761 |
((eq ts fill-column) |
((eq ts fill-column) |
762 |
'ruler-mode-fill-column-face) |
'ruler-mode-fill-column-face) |
763 |
|
((eq ts comment-column) |
764 |
|
'ruler-mode-comment-column-face) |
765 |
|
((eq ts goal-column) |
766 |
|
'ruler-mode-goal-column-face) |
767 |
(t |
(t |
768 |
'ruler-mode-tab-stop-face)) |
'ruler-mode-tab-stop-face)) |
769 |
ruler))))) |
ruler))))) |
775 |
(put-text-property |
(put-text-property |
776 |
i (1+ i) 'face 'ruler-mode-current-column-face |
i (1+ i) 'face 'ruler-mode-current-column-face |
777 |
ruler)) |
ruler)) |
778 |
|
|
779 |
ruler))) |
ruler))) |
780 |
|
|
781 |
(provide 'ruler-mode) |
(provide 'ruler-mode) |