diff options
| author | Juanma Barranquero | 2003-01-13 08:22:50 +0000 |
|---|---|---|
| committer | Juanma Barranquero | 2003-01-13 08:22:50 +0000 |
| commit | 60ab677b331335cd43cc0b245e9e27d4c3ff4ba7 (patch) | |
| tree | 09ec58bdeb460c03144aad8de4fedb5ee0f27f2b | |
| parent | 3ea137e95cfaeb34dd6fe755bbfe3486bea88ddc (diff) | |
| download | emacs-60ab677b331335cd43cc0b245e9e27d4c3ff4ba7.tar.gz emacs-60ab677b331335cd43cc0b245e9e27d4c3ff4ba7.zip | |
(ruler-mode-comment-column-char, ruler-mode-goal-column-char)
(ruler-mode-set-goal-column-ding-flag, ruler-mode-mouse-current-grab-object):
New variables.
(ruler-mode-comment-column-face, ruler-mode-goal-column-face): New faces.
(ruler-mode-mouse-set-fill-column): Removed.
(ruler-mode-mouse-grab-any-column, ruler-mode-mouse-drag-any-column-iteration)
(ruler-mode-mouse-drag-any-column): New functions.
(ruler-mode-map): [header-line down-mouse-2] Bound to
`ruler-mode-mouse-grab-any-column' instead of
`ruler-mode-mouse-set-fill-column'.
(ruler-mode): Cleanup buffer local variable `header-line-format' if it didn't
exist when `ruler-mode' was enabled.
(ruler-mode-ruler-help-echo): Updated its value.
(ruler-mode-ruler-help-echo-when-goal-column): New help string used when
goal-column is already set.
(ruler-mode-ruler-help-echo-tab): Renamed to...
(ruler-mode-ruler-help-echo-when-tab-stops): New.
(ruler-mode-fill-column-help-echo, ruler-mode-comment-column-help-echo)
(ruler-mode-goal-column-help-echo): New help strings.
(ruler-mode-ruler): Use `ruler-mode-ruler-help-echo-when-goal-column' instead of
`ruler-mode-ruler-help-echo' if `goal-column' is set. Show `comment-column' and
`goal-column'. Echo the different help string for each *-column characters on
the ruler.
| -rw-r--r-- | lisp/ruler-mode.el | 296 |
1 files changed, 245 insertions, 51 deletions
diff --git a/lisp/ruler-mode.el b/lisp/ruler-mode.el index 4c709167100..10d7a411ba1 100644 --- a/lisp/ruler-mode.el +++ b/lisp/ruler-mode.el | |||
| @@ -1,11 +1,11 @@ | |||
| 1 | ;;; ruler-mode.el --- display a ruler in the header line | 1 | ;;; ruler-mode.el --- display a ruler in the header line |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2001 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 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.4 | 8 | ;; Version: 1.5 |
| 9 | ;; Keywords: convenience | 9 | ;; Keywords: convenience |
| 10 | 10 | ||
| 11 | ;; This file is part of GNU Emacs. | 11 | ;; This file is part of GNU Emacs. |
| @@ -30,8 +30,8 @@ | |||
| 30 | ;; This library provides a minor mode to display a ruler in the header | 30 | ;; This library provides a minor mode to display a ruler in the header |
| 31 | ;; line. It works only on Emacs 21. | 31 | ;; line. It works only on Emacs 21. |
| 32 | ;; | 32 | ;; |
| 33 | ;; You can use the mouse to change the `fill-column', `window-margins' | 33 | ;; You can use the mouse to change the `fill-column' `comment-column', |
| 34 | ;; and `tab-stop-list' settings: | 34 | ;; `goal-column', `window-margins' and `tab-stop-list' settings: |
| 35 | ;; | 35 | ;; |
| 36 | ;; [header-line (shift down-mouse-1)] set left margin to the ruler | 36 | ;; [header-line (shift down-mouse-1)] set left margin to the ruler |
| 37 | ;; graduation where the mouse pointer is on. | 37 | ;; graduation where the mouse pointer is on. |
| @@ -39,8 +39,8 @@ | |||
| 39 | ;; [header-line (shift down-mouse-3)] set right margin to the ruler | 39 | ;; [header-line (shift down-mouse-3)] set right margin to the ruler |
| 40 | ;; graduation where the mouse pointer is on. | 40 | ;; graduation where the mouse pointer is on. |
| 41 | ;; | 41 | ;; |
| 42 | ;; [header-line down-mouse-2] set `fill-column' to the ruler | 42 | ;; [header-line down-mouse-2] set `fill-column', `comment-column' or |
| 43 | ;; graduation where the mouse pointer is on. | 43 | ;; `goal-column' to the ruler graduation with the mouse dragging. |
| 44 | ;; | 44 | ;; |
| 45 | ;; [header-line (control down-mouse-1)] add a tab stop to the ruler | 45 | ;; [header-line (control down-mouse-1)] add a tab stop to the ruler |
| 46 | ;; graduation where the mouse pointer is on. | 46 | ;; graduation where the mouse pointer is on. |
| @@ -55,7 +55,9 @@ | |||
| 55 | ;; | 55 | ;; |
| 56 | ;; In the ruler the character `ruler-mode-current-column-char' shows | 56 | ;; In the ruler the character `ruler-mode-current-column-char' shows |
| 57 | ;; the `current-column' location, `ruler-mode-fill-column-char' shows | 57 | ;; the `current-column' location, `ruler-mode-fill-column-char' shows |
| 58 | ;; the `fill-column' location and `ruler-mode-tab-stop-char' shows tab | 58 | ;; 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 | ||
| 59 | ;; stop locations. `window-margins' areas are shown with a different | 61 | ;; stop locations. `window-margins' areas are shown with a different |
| 60 | ;; background color. | 62 | ;; background color. |
| 61 | ;; | 63 | ;; |
| @@ -73,6 +75,10 @@ | |||
| 73 | ;; - `ruler-mode-default-face' the ruler default face. | 75 | ;; - `ruler-mode-default-face' the ruler default face. |
| 74 | ;; - `ruler-mode-fill-column-face' the face used to highlight the | 76 | ;; - `ruler-mode-fill-column-face' the face used to highlight the |
| 75 | ;; `fill-column' character. | 77 | ;; `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. | ||
| 76 | ;; - `ruler-mode-current-column-face' the face used to highlight the | 82 | ;; - `ruler-mode-current-column-face' the face used to highlight the |
| 77 | ;; `current-column' character. | 83 | ;; `current-column' character. |
| 78 | ;; - `ruler-mode-tab-stop-face' the face used to highlight tab stop | 84 | ;; - `ruler-mode-tab-stop-face' the face used to highlight tab stop |
| @@ -128,7 +134,7 @@ or remove a tab stop. \\[ruler-mode-toggle-show-tab-stops] or | |||
| 128 | (widget-put widget :error | 134 | (widget-put widget :error |
| 129 | (format "Invalid character value: %S" value)) | 135 | (format "Invalid character value: %S" value)) |
| 130 | widget)))) | 136 | widget)))) |
| 131 | 137 | ||
| 132 | (defcustom ruler-mode-fill-column-char (if window-system | 138 | (defcustom ruler-mode-fill-column-char (if window-system |
| 133 | ?\¶ | 139 | ?\¶ |
| 134 | ?\|) | 140 | ?\|) |
| @@ -139,6 +145,22 @@ or remove a tab stop. \\[ruler-mode-toggle-show-tab-stops] or | |||
| 139 | (integer :tag "Integer char value" | 145 | (integer :tag "Integer char value" |
| 140 | :validate ruler-mode-character-validate))) | 146 | :validate ruler-mode-character-validate))) |
| 141 | 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 | |||
| 142 | (defcustom ruler-mode-current-column-char (if window-system | 164 | (defcustom ruler-mode-current-column-char (if window-system |
| 143 | ?\¦ | 165 | ?\¦ |
| 144 | ?\@) | 166 | ?\@) |
| @@ -180,6 +202,11 @@ or remove a tab stop. \\[ruler-mode-toggle-show-tab-stops] or | |||
| 180 | (character :tag "Character") | 202 | (character :tag "Character") |
| 181 | (integer :tag "Integer char value" | 203 | (integer :tag "Integer char value" |
| 182 | :validate ruler-mode-character-validate))) | 204 | :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) | ||
| 183 | 210 | ||
| 184 | (defface ruler-mode-default-face | 211 | (defface ruler-mode-default-face |
| 185 | '((((type tty)) | 212 | '((((type tty)) |
| @@ -214,6 +241,22 @@ or remove a tab stop. \\[ruler-mode-toggle-show-tab-stops] or | |||
| 214 | "Face used to highlight the fill column character." | 241 | "Face used to highlight the fill column character." |
| 215 | :group 'ruler-mode) | 242 | :group 'ruler-mode) |
| 216 | 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 | |||
| 217 | (defface ruler-mode-tab-stop-face | 260 | (defface ruler-mode-tab-stop-face |
| 218 | '((t | 261 | '((t |
| 219 | (:inherit ruler-mode-default-face | 262 | (:inherit ruler-mode-default-face |
| @@ -281,27 +324,118 @@ START-EVENT is the mouse click event." | |||
| 281 | (message "Right margin set to %d (was %d)" rm rm0) | 324 | (message "Right margin set to %d (was %d)" rm rm0) |
| 282 | (set-window-margins nil lm rm))))) | 325 | (set-window-margins nil lm rm))))) |
| 283 | 326 | ||
| 284 | (defun ruler-mode-mouse-set-fill-column (start-event) | 327 | (defvar ruler-mode-mouse-current-grab-object nil |
| 285 | "Set `fill-column' to the graduation where the mouse pointer is on. | 328 | "Column symbol dragged in the ruler. |
| 286 | START-EVENT is the mouse click event." | 329 | 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." | ||
| 287 | (interactive "e") | 336 | (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." | ||
| 288 | (let* ((start (event-start start-event)) | 425 | (let* ((start (event-start start-event)) |
| 289 | (end (event-end start-event)) | 426 | (end (event-end start-event)) |
| 290 | m col w lm rm hs fc) | 427 | m col w lm rm hs newc) |
| 291 | (if (eq start end) ;; mouse click | 428 | (save-selected-window |
| 292 | (save-selected-window | 429 | (select-window (posn-window start)) |
| 293 | (select-window (posn-window start)) | 430 | (setq m (window-margins) |
| 294 | (setq m (window-margins) | 431 | lm (or (car m) 0) |
| 295 | lm (or (car m) 0) | 432 | rm (or (cdr m) 0) |
| 296 | rm (or (cdr m) 0) | 433 | col (- (car (posn-col-row end)) lm) |
| 297 | col (- (car (posn-col-row start)) lm) | 434 | w (window-width) |
| 298 | w (window-width) | 435 | hs (window-hscroll) |
| 299 | hs (window-hscroll) | 436 | newc (+ col hs)) |
| 300 | fc (+ col hs)) | 437 | (if (and (>= col 0) (< (+ col lm rm) w)) |
| 301 | (and (>= col 0) (< (+ col lm rm) w) | 438 | (set ruler-mode-mouse-current-grab-object newc))))) |
| 302 | (progn | ||
| 303 | (message "Fill column set to %d (was %d)" fc fill-column) | ||
| 304 | (setq fill-column fc))))))) | ||
| 305 | 439 | ||
| 306 | (defun ruler-mode-mouse-add-tab-stop (start-event) | 440 | (defun ruler-mode-mouse-add-tab-stop (start-event) |
| 307 | "Add a tab stop to the graduation where the mouse pointer is on. | 441 | "Add a tab stop to the graduation where the mouse pointer is on. |
| @@ -346,7 +480,7 @@ START-EVENT is the mouse click event." | |||
| 346 | col (- (car (posn-col-row start)) lm) | 480 | col (- (car (posn-col-row start)) lm) |
| 347 | w (window-width) | 481 | w (window-width) |
| 348 | hs (window-hscroll) | 482 | hs (window-hscroll) |
| 349 | ts (+ col hs)) | 483 | ts (+ col hs)) |
| 350 | (and (>= col 0) (< (+ col lm rm) w) | 484 | (and (>= col 0) (< (+ col lm rm) w) |
| 351 | (member ts tab-stop-list) | 485 | (member ts tab-stop-list) |
| 352 | (progn | 486 | (progn |
| @@ -367,7 +501,7 @@ START-EVENT is the mouse click event." | |||
| 367 | (define-key km [header-line down-mouse-3] | 501 | (define-key km [header-line down-mouse-3] |
| 368 | #'ignore) | 502 | #'ignore) |
| 369 | (define-key km [header-line down-mouse-2] | 503 | (define-key km [header-line down-mouse-2] |
| 370 | #'ruler-mode-mouse-set-fill-column) | 504 | #'ruler-mode-mouse-grab-any-column) |
| 371 | (define-key km [header-line (shift down-mouse-1)] | 505 | (define-key km [header-line (shift down-mouse-1)] |
| 372 | #'ruler-mode-mouse-set-left-margin) | 506 | #'ruler-mode-mouse-set-left-margin) |
| 373 | (define-key km [header-line (shift down-mouse-3)] | 507 | (define-key km [header-line (shift down-mouse-3)] |
| @@ -399,37 +533,61 @@ START-EVENT is the mouse click event." | |||
| 399 | (progn | 533 | (progn |
| 400 | ;; When `ruler-mode' is on save previous header line format | 534 | ;; When `ruler-mode' is on save previous header line format |
| 401 | ;; and install the ruler header line format. | 535 | ;; and install the ruler header line format. |
| 402 | (setq ruler-mode-header-line-format-old header-line-format | 536 | (when (local-variable-p 'header-line-format) |
| 403 | header-line-format ruler-mode-header-line-format) | 537 | (setq ruler-mode-header-line-format-old header-line-format)) |
| 538 | (setq header-line-format ruler-mode-header-line-format) | ||
| 404 | (add-hook 'post-command-hook ; add local hook | 539 | (add-hook 'post-command-hook ; add local hook |
| 405 | #'force-mode-line-update nil t)) | 540 | #'force-mode-line-update nil t)) |
| 406 | ;; When `ruler-mode' is off restore previous header line format if | 541 | ;; When `ruler-mode' is off restore previous header line format if |
| 407 | ;; the current one is the ruler header line format. | 542 | ;; the current one is the ruler header line format. |
| 408 | (if (eq header-line-format ruler-mode-header-line-format) | 543 | (when (eq header-line-format ruler-mode-header-line-format) |
| 409 | (setq header-line-format ruler-mode-header-line-format-old)) | 544 | (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))) | ||
| 410 | (remove-hook 'post-command-hook ; remove local hook | 547 | (remove-hook 'post-command-hook ; remove local hook |
| 411 | #'force-mode-line-update t))) | 548 | #'force-mode-line-update t))) |
| 412 | 549 | ||
| 413 | ;; Add ruler-mode to the minor mode menu in the mode line | 550 | ;; Add ruler-mode to the minor mode menu in the mode line |
| 414 | (define-key mode-line-mode-menu [ruler-mode] | 551 | (define-key mode-line-mode-menu [ruler-mode] |
| 415 | `(menu-item "Ruler" ruler-mode | 552 | `(menu-item "Ruler" ruler-mode |
| 416 | :button (:toggle . ruler-mode))) | 553 | :button (:toggle . ruler-mode))) |
| 417 | 554 | ||
| 418 | (defconst ruler-mode-ruler-help-echo | 555 | (defconst ruler-mode-ruler-help-echo |
| 419 | "\ | 556 | "\ |
| 420 | S-mouse-1/3: set L/R margin, \ | 557 | S-mouse-1/3: set L/R margin, \ |
| 421 | mouse-2: set fill col, \ | 558 | mouse-2: set goal column, \ |
| 422 | C-mouse-2: show tabs" | 559 | C-mouse-2: show tabs" |
| 423 | "Help string shown when mouse pointer is over the ruler. | 560 | "Help string shown when mouse is over the ruler. |
| 424 | `ruler-mode-show-tab-stops' is nil.") | 561 | `ruler-mode-show-tab-stops' is nil.") |
| 425 | 562 | ||
| 426 | (defconst ruler-mode-ruler-help-echo-tab | 563 | (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 | ||
| 427 | "\ | 571 | "\ |
| 428 | C-mouse1/3: set/unset tab, \ | 572 | C-mouse1/3: set/unset tab, \ |
| 429 | C-mouse-2: hide tabs" | 573 | C-mouse-2: hide tabs" |
| 430 | "Help string shown when mouse pointer is over the ruler. | 574 | "Help string shown when mouse is over the ruler. |
| 431 | `ruler-mode-show-tab-stops' is non-nil.") | 575 | `ruler-mode-show-tab-stops' is non-nil.") |
| 432 | 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 | |||
| 433 | (defconst ruler-mode-left-margin-help-echo | 591 | (defconst ruler-mode-left-margin-help-echo |
| 434 | "Left margin %S" | 592 | "Left margin %S" |
| 435 | "Help string shown when mouse is over the left margin area.") | 593 | "Help string shown when mouse is over the left margin area.") |
| @@ -452,11 +610,11 @@ C-mouse-2: hide tabs" | |||
| 452 | "Return the width, measured in columns, of the left vertical scrollbar." | 610 | "Return the width, measured in columns, of the left vertical scrollbar." |
| 453 | '(if (eq (frame-parameter nil 'vertical-scroll-bars) 'left) | 611 | '(if (eq (frame-parameter nil 'vertical-scroll-bars) 'left) |
| 454 | (let ((sbw (frame-parameter nil 'scroll-bar-width))) | 612 | (let ((sbw (frame-parameter nil 'scroll-bar-width))) |
| 455 | ;; nil means it's a non-toolkit scroll bar, | 613 | ;; nil means it's a non-toolkit scroll bar, |
| 456 | ;; and its width in columns is 14 pixels rounded up. | 614 | ;; and its width in columns is 14 pixels rounded up. |
| 457 | (unless sbw (setq sbw 14)) | 615 | (unless sbw (setq sbw 14)) |
| 458 | ;; Always round up to multiple of columns. | 616 | ;; Always round up to multiple of columns. |
| 459 | (ceiling sbw (frame-char-width))) | 617 | (ceiling sbw (frame-char-width))) |
| 460 | 0)) | 618 | 0)) |
| 461 | 619 | ||
| 462 | (defmacro ruler-mode-right-scroll-bar-cols () | 620 | (defmacro ruler-mode-right-scroll-bar-cols () |
| @@ -491,10 +649,12 @@ C-mouse-2: hide tabs" | |||
| 491 | 'face 'ruler-mode-default-face | 649 | 'face 'ruler-mode-default-face |
| 492 | ruler) | 650 | ruler) |
| 493 | (put-text-property 0 (length ruler) | 651 | (put-text-property 0 (length ruler) |
| 494 | 'help-echo | 652 | 'help-echo |
| 495 | (if ruler-mode-show-tab-stops | 653 | (if ruler-mode-show-tab-stops |
| 496 | ruler-mode-ruler-help-echo-tab | 654 | ruler-mode-ruler-help-echo-when-tab-stops |
| 497 | ruler-mode-ruler-help-echo) | 655 | (if goal-column |
| 656 | ruler-mode-ruler-help-echo-when-goal-column | ||
| 657 | ruler-mode-ruler-help-echo)) | ||
| 498 | ruler) | 658 | ruler) |
| 499 | ;; Setup the local map. | 659 | ;; Setup the local map. |
| 500 | (put-text-property 0 (length ruler) | 660 | (put-text-property 0 (length ruler) |
| @@ -546,14 +706,44 @@ C-mouse-2: hide tabs" | |||
| 546 | (while (< i (length ruler)) | 706 | (while (< i (length ruler)) |
| 547 | (aset ruler i ruler-mode-margins-char) | 707 | (aset ruler i ruler-mode-margins-char) |
| 548 | (setq i (1+ i))) | 708 | (setq i (1+ i))) |
| 549 | 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 | |||
| 550 | ;; Show the `fill-column' marker. | 737 | ;; Show the `fill-column' marker. |
| 551 | (setq i (- fill-column o)) | 738 | (setq i (- fill-column o)) |
| 552 | (and (>= i 0) (< i r) | 739 | (and (>= i 0) (< i r) |
| 553 | (aset ruler i ruler-mode-fill-column-char) | 740 | (aset ruler i ruler-mode-fill-column-char) |
| 554 | (put-text-property | 741 | (progn (put-text-property |
| 555 | i (1+ i) 'face 'ruler-mode-fill-column-face | 742 | i (1+ i) 'face 'ruler-mode-fill-column-face |
| 556 | ruler)) | 743 | ruler) |
| 744 | (put-text-property | ||
| 745 | i (1+ i) 'help-echo ruler-mode-fill-column-help-echo | ||
| 746 | ruler))) | ||
| 557 | 747 | ||
| 558 | ;; Show the `tab-stop-list' markers. | 748 | ;; Show the `tab-stop-list' markers. |
| 559 | (if ruler-mode-show-tab-stops | 749 | (if ruler-mode-show-tab-stops |
| @@ -567,9 +757,13 @@ C-mouse-2: hide tabs" | |||
| 567 | (put-text-property | 757 | (put-text-property |
| 568 | i (1+ i) | 758 | i (1+ i) |
| 569 | 'face (cond | 759 | 'face (cond |
| 570 | ;; Don't override the fill-column face | 760 | ;; Don't override the *-column face |
| 571 | ((eq ts fill-column) | 761 | ((eq ts fill-column) |
| 572 | 'ruler-mode-fill-column-face) | 762 | '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) | ||
| 573 | (t | 767 | (t |
| 574 | 'ruler-mode-tab-stop-face)) | 768 | 'ruler-mode-tab-stop-face)) |
| 575 | ruler))))) | 769 | ruler))))) |
| @@ -581,7 +775,7 @@ C-mouse-2: hide tabs" | |||
| 581 | (put-text-property | 775 | (put-text-property |
| 582 | i (1+ i) 'face 'ruler-mode-current-column-face | 776 | i (1+ i) 'face 'ruler-mode-current-column-face |
| 583 | ruler)) | 777 | ruler)) |
| 584 | 778 | ||
| 585 | ruler))) | 779 | ruler))) |
| 586 | 780 | ||
| 587 | (provide 'ruler-mode) | 781 | (provide 'ruler-mode) |