[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[STUMP] [PATCH] Right-justification of mode line elements
From: |
Nils Anspach |
Subject: |
[STUMP] [PATCH] Right-justification of mode line elements |
Date: |
Mon, 1 Nov 2010 16:12:04 +0100 |
Hello list,
attached is a patch which allows for text elements of the mode line
(and those of the message window, if that is required) to be
right-justified.
For this to work you have to put a '^>' into the respective format
command, for instance:
(setf *screen-mode-line-format*
(list "[%n:%h] %v^>"
'(:eval (run-shell-command "echo -n `date +'%a %e-%b %R'`"
t))))
It also works in case of multiple lines of text. Everything after '^>'
up to the end of the respective line is right-justified. The next line
then starts left-justified again.
Nils
---
diff --git a/color.lisp b/color.lisp
index 5885861..425feb7 100644
--- a/color.lisp
+++ b/color.lisp
@@ -193,13 +193,15 @@ then call (update-color-map).")
(loop for s in strings
;; We need this so we can track the row for each element
for i from 0 to (length strings)
- do (let ((x 0) (off 0))
+ do (let ((x 0) (off 0) (len (length s)))
(loop
for st = 0 then (+ en (1+ off))
as en = (position #\^ s :start st)
do (progn
- (let ((en (if (and en (eq #\^ (elt s (1+ en)))) (1+ en)
en)))
- (when draw
+ (let ((en (cond ((and en (= (1+ en) len)) nil)
+ ((and en (char= #\^ (char s (1+ en)))) (1+
en))
+ (t en))))
+ (when draw
(xlib:draw-image-glyphs px gc
(+ padx x)
(+ pady (* i height)
@@ -207,11 +209,22 @@ then call (update-color-map).")
(subseq s st en)
:translate #'translate-id
:size 16))
- (setf x (+ x (xlib:text-width (screen-font screen)
(subseq s st en) :translate #'translate-id))))
- (when en
- (setf off (set-color screen cc s (1+ en))))
- (setf width (max width x)))
- while en))
+ (setf x (+ x (xlib:text-width (screen-font screen)
(subseq s st en) :translate #'translate-id))
+ width (max width x)))
+ (when (and en (< (1+ en) len))
+ ;; right-align rest of string?
+ (if (char= #\> (char s (1+ en)))
+ (progn
+ (when draw
+ (setf x (- (xlib:drawable-width px) (* 2 padx)
+ ;; get width of rest of s
+ (render-strings screen cc padx pady
+ (list (subseq s (+ en
2)))
+ '() nil))
+ width (- (xlib:drawable-width px) (* 2
padx))))
+ (setf off 1))
+ (setf off (set-color screen cc s (1+ en))))))
+ while en))
when (find i highlights :test 'eql)
do (when draw (invert-rect screen px
0 (* i height)
--
1.6.5.7
- [STUMP] [PATCH] Right-justification of mode line elements,
Nils Anspach <=