summaryrefslogtreecommitdiff
path: root/lisp/ses.el
diff options
context:
space:
mode:
authorJonathan Yavner <jyavner@member.fsf.org>2003-02-02 19:16:23 +0000
committerJonathan Yavner <jyavner@member.fsf.org>2003-02-02 19:16:23 +0000
commit125366f86033f165b247913e29a468278765b9a8 (patch)
treef04141ef290445f5a17ea8ed61a63e2d04f82914 /lisp/ses.el
parent49853a4d5c1361ec09e53fbf06f4faea70820696 (diff)
downloademacs-125366f86033f165b247913e29a468278765b9a8.tar.gz
Fix header-line when scrollbar is on left and/or fringe isn't one char wide.
Diffstat (limited to 'lisp/ses.el')
-rw-r--r--lisp/ses.el34
1 files changed, 25 insertions, 9 deletions
diff --git a/lisp/ses.el b/lisp/ses.el
index 097ec7e6c14..8e006ace97d 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -1605,27 +1605,43 @@ narrows the buffer now."
(message (error-message-string err))))
nil) ;Make coverage-tester happy
+(defun ses-header-string-left-offset ()
+ "Number of characters in left fringe and left scrollbar (if any)."
+ (let ((left-fringe (round (or (frame-parameter nil 'left-fringe) 0)
+ (frame-char-width)))
+ (left-scrollbar (if (not (eq (frame-parameter nil
+ 'vertical-scroll-bars)
+ 'left))
+ 0
+ (let ((x (frame-parameter nil 'scroll-bar-width)))
+ ;;Non-toolkil bar is always 14 pixels?
+ (unless x (setq x 14))
+ ;;Always round up
+ (ceiling x (frame-char-width))))))
+ (+ left-fringe left-scrollbar)))
+
(defun ses-create-header-string ()
"Sets up `header-string' as the buffer's header line, based on the
current set of columns and window-scroll position."
- (let ((totwidth (- 1 (window-hscroll)))
- result width result x)
- (if window-system
- ;;Leave room for the left-side fringe
- (push " " result))
+ (let* ((left-offset (ses-header-string-left-offset))
+ (totwidth (- left-offset (window-hscroll)))
+ result width result x)
+ ;;Leave room for the left-side fringe and scrollbar
+ (push (make-string left-offset ? ) result)
(dotimes (col numcols)
(setq width (ses-col-width col)
totwidth (+ totwidth width 1))
- (if (= totwidth 2) ;Scrolled so intercolumn space is leftmost
+ (if (= totwidth (+ left-offset 1))
+ ;;Scrolled so intercolumn space is leftmost
(push " " result))
- (when (> totwidth 2)
+ (when (> totwidth (+ left-offset 1))
(if (> header-row 0)
(save-excursion
(ses-goto-print (1- header-row) col)
(setq x (buffer-substring-no-properties (point)
(+ (point) width)))
- (if (>= width (1- totwidth))
- (setq x (substring x (- width totwidth -2))))
+ (if (>= width (- totwidth left-offset))
+ (setq x (substring x (- width totwidth left-offset -1))))
(push (propertize x 'face ses-box-prop) result))
(setq x (ses-column-letter col))
(push (propertize x 'face ses-box-prop) result)