summaryrefslogtreecommitdiff
path: root/lisp/ruler-mode.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/ruler-mode.el')
-rw-r--r--lisp/ruler-mode.el70
1 files changed, 29 insertions, 41 deletions
diff --git a/lisp/ruler-mode.el b/lisp/ruler-mode.el
index afe1cd4bfda..0b18697cea7 100644
--- a/lisp/ruler-mode.el
+++ b/lisp/ruler-mode.el
@@ -279,21 +279,24 @@ or remove a tab stop. \\[ruler-mode-toggle-show-tab-stops] or
(let ((edges (window-edges)))
(- (nth 2 edges) (nth 0 edges))))
-(defsubst ruler-mode-window-col (n)
+(defsubst ruler-mode-window-col (event)
"Return a column number relative to the selected window.
-N is a column number relative to selected frame.
+EVENT is the mouse event that gives the current column.
If required, account for screen estate taken by `display-line-numbers'."
- (if display-line-numbers
+ (let ((n (car (posn-col-row event))))
+ (when display-line-numbers
;; FIXME: ruler-mode relies on N being an integer, so if the
;; 'line-number' face is customized to use a font that is larger
;; or smaller than that of the default face, the alignment might
;; be off by up to half a column, unless the font width is an
;; integral multiple or divisor of the default face's font.
(setq n (- n (round (line-number-display-width 'columns)))))
- (- n
- (or (car (window-margins)) 0)
- (fringe-columns 'left)
- (scroll-bar-columns 'left)))
+ (- n
+ (if (eq (posn-area event) 'header-line)
+ (+ (or (car (window-margins)) 0)
+ (fringe-columns 'left)
+ (scroll-bar-columns 'left))
+ 0))))
(defun ruler-mode-mouse-set-left-margin (start-event)
"Set left margin end to the graduation where the mouse pointer is on.
@@ -370,7 +373,7 @@ dragging. See also the variable `ruler-mode-dragged-symbol'."
col newc oldc)
(save-selected-window
(select-window (posn-window start))
- (setq col (ruler-mode-window-col (car (posn-col-row start)))
+ (setq col (ruler-mode-window-col start)
newc (+ col (ruler-mode-text-scaled-window-hscroll)))
(and
(>= col 0) (< col (ruler-mode-text-scaled-window-width))
@@ -455,7 +458,7 @@ Called on each mouse motion event START-EVENT."
col newc)
(save-selected-window
(select-window (posn-window start))
- (setq col (ruler-mode-window-col (car (posn-col-row end)))
+ (setq col (ruler-mode-window-col end)
newc (+ col (ruler-mode-text-scaled-window-hscroll)))
(when (and (>= col 0) (< col (ruler-mode-text-scaled-window-width)))
(set ruler-mode-dragged-symbol newc)))))
@@ -471,7 +474,7 @@ START-EVENT is the mouse click event."
(when (eq start end) ;; mouse click
(save-selected-window
(select-window (posn-window start))
- (setq col (ruler-mode-window-col (car (posn-col-row start)))
+ (setq col (ruler-mode-window-col start)
ts (+ col (ruler-mode-text-scaled-window-hscroll)))
(and (>= col 0) (< col (ruler-mode-text-scaled-window-width))
(not (member ts tab-stop-list))
@@ -492,7 +495,7 @@ START-EVENT is the mouse click event."
(when (eq start end) ;; mouse click
(save-selected-window
(select-window (posn-window start))
- (setq col (ruler-mode-window-col (car (posn-col-row start)))
+ (setq col (ruler-mode-window-col start)
ts (+ col (ruler-mode-text-scaled-window-hscroll)))
(and (>= col 0) (< col (ruler-mode-text-scaled-window-width))
(member ts tab-stop-list)
@@ -506,36 +509,21 @@ START-EVENT is the mouse click event."
(setq ruler-mode-show-tab-stops (not ruler-mode-show-tab-stops))
(force-mode-line-update))
-(defvar ruler-mode-map
- (let ((km (make-sparse-keymap)))
- (define-key km [header-line down-mouse-1]
- #'ignore)
- (define-key km [header-line down-mouse-3]
- #'ignore)
- (define-key km [header-line down-mouse-2]
- #'ruler-mode-mouse-grab-any-column)
- (define-key km [header-line (shift down-mouse-1)]
- #'ruler-mode-mouse-set-left-margin)
- (define-key km [header-line (shift down-mouse-3)]
- #'ruler-mode-mouse-set-right-margin)
- (define-key km [header-line (control down-mouse-1)]
- #'ruler-mode-mouse-add-tab-stop)
- (define-key km [header-line (control down-mouse-3)]
- #'ruler-mode-mouse-del-tab-stop)
- (define-key km [header-line (control down-mouse-2)]
- #'ruler-mode-toggle-show-tab-stops)
- (define-key km [header-line (shift mouse-1)]
- #'ignore)
- (define-key km [header-line (shift mouse-3)]
- #'ignore)
- (define-key km [header-line (control mouse-1)]
- #'ignore)
- (define-key km [header-line (control mouse-3)]
- #'ignore)
- (define-key km [header-line (control mouse-2)]
- #'ignore)
- km)
- "Keymap for ruler minor mode.")
+(defvar-keymap ruler-mode-map
+ :doc "Keymap for `ruler-mode'."
+ "<header-line> <down-mouse-1>" #'ignore
+ "<header-line> <down-mouse-3>" #'ignore
+ "<header-line> <down-mouse-2>" #'ruler-mode-mouse-grab-any-column
+ "<header-line> S-<down-mouse-1>" #'ruler-mode-mouse-set-left-margin
+ "<header-line> S-<down-mouse-3>" #'ruler-mode-mouse-set-right-margin
+ "<header-line> C-<down-mouse-1>" #'ruler-mode-mouse-add-tab-stop
+ "<header-line> C-<down-mouse-3>" #'ruler-mode-mouse-del-tab-stop
+ "<header-line> C-<down-mouse-2>" #'ruler-mode-toggle-show-tab-stops
+ "<header-line> S-<mouse-1>" #'ignore
+ "<header-line> S-<mouse-3>" #'ignore
+ "<header-line> C-<mouse-1>" #'ignore
+ "<header-line> C-<mouse-3>" #'ignore
+ "<header-line> C-<mouse-2>" #'ignore)
(defvar ruler-mode-header-line-format-old nil
"Hold previous value of `header-line-format'.")