Function: ruler-mode-ruler
ruler-mode-ruler is a byte-compiled function defined in
ruler-mode.el.gz.
Signature
(ruler-mode-ruler)
Documentation
Compute and return a header line ruler.
Source Code
;; Defined in /usr/src/emacs/lisp/ruler-mode.el.gz
(defun ruler-mode-ruler ()
"Compute and return a header line ruler."
(let* ((w (ruler-mode-text-scaled-window-width))
(m (window-margins))
(f (window-fringes))
(i 0)
(j (ruler-mode-text-scaled-window-hscroll))
;; Setup the scrollbar, fringes, and margins areas.
(lf (ruler-mode-space
'left-fringe
'face 'ruler-mode-fringes
'help-echo (format ruler-mode-fringe-help-echo
"Left" (or (car f) 0))))
(rf (ruler-mode-space
'right-fringe
'face 'ruler-mode-fringes
'help-echo (format ruler-mode-fringe-help-echo
"Right" (or (cadr f) 0))))
(lm (ruler-mode-space
'left-margin
'face 'ruler-mode-margins
'help-echo (format ruler-mode-margin-help-echo
"Left" (or (car m) 0))))
(rm (ruler-mode-space
'right-margin
'face 'ruler-mode-margins
'help-echo (format ruler-mode-margin-help-echo
"Right" (or (cdr m) 0))))
(sb (ruler-mode-space
'scroll-bar
'face 'ruler-mode-pad))
;; Remember the scrollbar vertical type.
(sbvt (car (window-current-scroll-bars)))
;; Create a "clean" ruler.
(ruler
;; Make the part of header-line corresponding to the
;; line-number display be blank, not filled with
;; ruler-mode-basic-graduation-char.
(if (> i 0)
(vconcat (make-vector i ?\s)
(make-vector (- w i)
ruler-mode-basic-graduation-char))
(make-vector w ruler-mode-basic-graduation-char)))
(ruler-wide-props
`( face ruler-mode-default
;; This is redundant with the minor mode map.
;;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))))
(props nil)
k c)
;; Setup the active area.
(while (< i w)
;; Graduations.
(cond
;; Show a number graduation.
((= (mod j 10) 0)
(setq c (number-to-string (/ j 10))
m (length c)
k i)
(push `(,i ,(1+ i) face ruler-mode-column-number) props)
(while (and (> m 0) (>= k 0))
(aset ruler k (aref c (setq m (1- m))))
(setq k (1- k))))
;; Show an intermediate graduation.
((= (mod j 5) 0)
(aset ruler i ruler-mode-inter-graduation-char)))
;; Special columns.
(cond
;; Show the `current-column' marker.
((= j (current-column))
(aset ruler i ruler-mode-current-column-char)
(push `(,i ,(1+ i) face ruler-mode-current-column) props))
;; Show the `goal-column' marker.
((and goal-column (= j goal-column))
(aset ruler i ruler-mode-goal-column-char)
(push `(,i ,(1+ i)
help-echo ,ruler-mode-goal-column-help-echo
face ruler-mode-goal-column
mouse-face mode-line-highlight)
props))
;; Show the `comment-column' marker.
((= j comment-column)
(aset ruler i ruler-mode-comment-column-char)
(push `(,i ,(1+ i)
help-echo ,ruler-mode-comment-column-help-echo
face ruler-mode-comment-column
mouse-face mode-line-highlight)
props))
;; Show the `fill-column' marker.
((= j fill-column)
(aset ruler i ruler-mode-fill-column-char)
(push `(,i ,(1+ i)
help-echo ,ruler-mode-fill-column-help-echo
face ruler-mode-fill-column
mouse-face mode-line-highlight)
props))
;; Show the `tab-stop-list' markers.
((and ruler-mode-show-tab-stops (= j (indent-next-tab-stop (1- j))))
(aset ruler i ruler-mode-tab-stop-char)
(push `(,i ,(1+ i) face ruler-mode-tab-stop) props)))
(setq i (1+ i)
j (1+ j)))
(let ((ruler-str (concat ruler))
(len (length ruler)))
(add-text-properties 0 len ruler-wide-props ruler-str)
(dolist (p (nreverse props))
(add-text-properties (nth 0 p) (nth 1 p) (nthcdr 2 p) ruler-str))
;; Attach an alignment indent.
(if display-line-numbers
(setq ruler-str
(concat (ruler-mode-space `(,(line-number-display-width t)))
ruler-str)))
;; 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-str rm rf (and (eq 'right sbvt) sb))
;; fringes inside margins.
(list "" (and (eq 'left sbvt) sb) lm lf
ruler-str rf rm (and (eq 'right sbvt) sb))))))