387 lines
10 KiB
Plaintext
387 lines
10 KiB
Plaintext
|
; ======================================================================
|
||
|
; BAR PACKAGE
|
||
|
; ======================================================================
|
||
|
|
||
|
|
||
|
; =========
|
||
|
; Utilities
|
||
|
; =========
|
||
|
|
||
|
; Pixmap list creation
|
||
|
|
||
|
(de pixmap-list-make (file-name suffixes make)
|
||
|
(with (res ())
|
||
|
(for i suffixes
|
||
|
(setq res (+ res
|
||
|
(list ((eval make) (+ file-name i))))))
|
||
|
res))
|
||
|
|
||
|
(setq suffixes.9. '( ".tl" ".t" ".tr" ".l" "." ".r" ".bl" ".b" ".br"))
|
||
|
(setq suffixes.8. '( ".tl" ".t" ".tr" ".l" ".r" ".bl" ".b" ".br"))
|
||
|
(setq suffixes.3-vertical. '( ".t" "." ".b"))
|
||
|
(setq suffixes.3-horizontal. '( ".l" "." ".r"))
|
||
|
|
||
|
(setq suffixes.9_ '( "_tl" "_t" "_tr" "_l" "_" "_r" "_bl" "_b" "_br"))
|
||
|
(setq suffixes.8_ '( "_tl" "_t" "_tr" "_l" "_r" "_bl" "_b" "_br"))
|
||
|
(setq suffixes.3-vertical_ '( "_t" "_" "_b"))
|
||
|
(setq suffixes.3-horizontal_ '( "_l" "_" "_r"))
|
||
|
|
||
|
|
||
|
|
||
|
; Does a list contains an item ?
|
||
|
|
||
|
(de contains-item (gwm.list gwm.item)
|
||
|
(if (not gwm.list) ; empty list
|
||
|
()
|
||
|
(if (= gwm.item (# 0 gwm.list)) ; it's first item
|
||
|
t
|
||
|
(contains-item ; otherwise recursion
|
||
|
(sublist 1 (- (length gwm.list) 1) gwm.list)
|
||
|
gwm.item)
|
||
|
)))
|
||
|
|
||
|
|
||
|
; =============
|
||
|
; Some defaults
|
||
|
; =============
|
||
|
|
||
|
(setq bar.default-pixmap (label-make "X"))
|
||
|
|
||
|
|
||
|
|
||
|
; =============
|
||
|
; Main function bar.make
|
||
|
; =============
|
||
|
|
||
|
; Context:
|
||
|
; bar.plugs
|
||
|
; bar.focus-sensitive t or () change aspect if focus in ?
|
||
|
; bar.borderwidth borderwidth default 0
|
||
|
; borderpixel
|
||
|
; bordertile
|
||
|
; plug-separator
|
||
|
; menu
|
||
|
; cursor
|
||
|
; property (appended for intern usage)
|
||
|
; bar-min-width (may be increased)
|
||
|
; bar-max-width (may be decreased)
|
||
|
; bar.size-adjust-on 'plugs (default) or 'pixmap
|
||
|
;
|
||
|
(de bar.make()
|
||
|
(with(
|
||
|
bar.appearance-make (default bar.appearance-make
|
||
|
bar.color-appearance-make)
|
||
|
bar.focus-sensitive (default bar.focus-sensitive t)
|
||
|
fsm (if bar.focus-sensitive
|
||
|
bar.focus-sensitive-fsm
|
||
|
bar.focus-insensitive-fsm)
|
||
|
bar.size-adjust-on (default bar.size-adjust-on 'plugs)
|
||
|
|
||
|
|
||
|
; ---------------------------------------------------
|
||
|
; And we duplicate some variable wich may be modified
|
||
|
; by bar.appearance-make to avoid border effects
|
||
|
; ---------------------------------------------------
|
||
|
borderwidth (default bar.borderwidth 0)
|
||
|
property (default property ())
|
||
|
bar-min-width (max 1(default bar-min-width 1))
|
||
|
bar-max-width (default bar-max-width 100)
|
||
|
bar.plugs (default bar.plugs ())
|
||
|
)
|
||
|
(if (boundp 'bar.thickness)
|
||
|
(progn
|
||
|
(setq bar-min-width bar.thickness)
|
||
|
(setq bar-max-width bar.thickness)))
|
||
|
(bar.appearance-make)
|
||
|
|
||
|
; border effect on property, bar-min-width, and bar-max-width
|
||
|
(setq property (+ property (list 'initializer bar.initializer)))
|
||
|
|
||
|
(eval (+ '(bar-make) bar.plugs))))
|
||
|
|
||
|
|
||
|
|
||
|
(setq bar.focus-sensitive-behaviour
|
||
|
(state-make
|
||
|
(on (user-event 'initialize)
|
||
|
(eval (# 'initializer wob-property)))
|
||
|
(on (user-event 'focus-in)
|
||
|
(eval (# 'active-drawer wob-property)))
|
||
|
(on (user-event 'focus-out)
|
||
|
(eval (# 'normal-drawer wob-property)))))
|
||
|
(setq bar.focus-sensitive-fsm (fsm-make bar.focus-sensitive-behaviour))
|
||
|
|
||
|
(setq bar.focus-insensitive-behaviour
|
||
|
(state-make
|
||
|
(on (user-event 'initialize)
|
||
|
(eval (# 'initializer wob-property)))))
|
||
|
(setq bar.focus-insensitive-fsm (fsm-make bar.focus-insensitive-behaviour))
|
||
|
|
||
|
(setq bar.initializer
|
||
|
'(eval (# 'normal-drawer wob-property)))
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
; ====================
|
||
|
; Appearance functions
|
||
|
; ====================
|
||
|
;
|
||
|
; All these functions override some context variables
|
||
|
; but doesn't retrun any value
|
||
|
|
||
|
|
||
|
; Appareance described by color
|
||
|
; -----------------------------
|
||
|
;
|
||
|
; Context:
|
||
|
; bar.normal-color
|
||
|
; bar.active-color if bar.focus-sensitive is true
|
||
|
; Border effects on context variable:
|
||
|
; property
|
||
|
;
|
||
|
(de bar.color-appearance-make()
|
||
|
(with (
|
||
|
bar.normal-color (default bar.normal-color background)
|
||
|
bar.active-color (default bar.active-color foreground)
|
||
|
)
|
||
|
; BORDER EFFECTS
|
||
|
(setq property
|
||
|
(+ (list 'normal-drawer
|
||
|
(list 'wob-background bar.normal-color))
|
||
|
(if bar.focus-sensitive
|
||
|
(list 'active-drawer
|
||
|
(list 'wob-background bar.active-color))
|
||
|
())
|
||
|
property
|
||
|
))))
|
||
|
|
||
|
|
||
|
; Appareance described by pixmap
|
||
|
; ------------------------------
|
||
|
;
|
||
|
; Context
|
||
|
; bar.normal-pixmap
|
||
|
; bar.active-pixmap if bar.focus-sensitive is true
|
||
|
; bar.orientation 'vertical or 'horizontal (default)
|
||
|
; Border effects on context variables:
|
||
|
; property
|
||
|
; bar-min-width (only increase)
|
||
|
; bar-max-width (only decrease)
|
||
|
; borderwidth (set to 0)
|
||
|
;
|
||
|
(de bar.pixmap-appearance-make()
|
||
|
(with (
|
||
|
bar.normal-pixmap (default bar.normal-pixmap bar.default-pixmap)
|
||
|
bar.active-pixmap (default bar.active-pixmap bar.default-pixmap)
|
||
|
bar.orientation (default bar.orientation 'horizontal)
|
||
|
thickness (if (= 'horizontal bar.orientation)
|
||
|
(height bar.normal-pixmap)
|
||
|
(width bar.normal-pixmap))
|
||
|
)
|
||
|
; BORDER EFFECTS
|
||
|
(setq borderwidth 0)
|
||
|
(setq property
|
||
|
(+ (list 'normal-drawer
|
||
|
(list 'wob-tile bar.normal-pixmap))
|
||
|
(if bar.focus-sensitive
|
||
|
(list 'active-drawer
|
||
|
(list 'wob-tile bar.active-pixmap))
|
||
|
())
|
||
|
property
|
||
|
))
|
||
|
(if (= 'pixmap bar.size-adjust-on)
|
||
|
(progn
|
||
|
(setq bar-min-width (max bar-min-width thickness))
|
||
|
(setq bar-max-width (min bar-max-width thickness))))
|
||
|
))
|
||
|
|
||
|
|
||
|
; Appareance described by 3 pixmap (a stretchable center and 2 borders)
|
||
|
; --------------------------------
|
||
|
;
|
||
|
; Context:
|
||
|
; bar.normal-pixmap-list
|
||
|
; bar.active-pixmap-list
|
||
|
; bar.focus-sensitive
|
||
|
; Border effect on:
|
||
|
; property
|
||
|
; bar-min-width
|
||
|
; bar-max-width
|
||
|
; bar.plugs
|
||
|
;
|
||
|
(de bar.3-pixmaps-appearance-make ()
|
||
|
(with (
|
||
|
; context treatment
|
||
|
bar.normal-pixmap-list
|
||
|
(if (and (boundp 'bar.normal-pixmap-list)
|
||
|
(= 3 (length bar.normal-pixmap-list)))
|
||
|
bar.normal-pixmap-list
|
||
|
(progn
|
||
|
(? "Warning: bar.normal-pixmap-list incorrect, "
|
||
|
bar.normal-pixmap-list "\n")
|
||
|
bar.default-normal-pixmap-list))
|
||
|
|
||
|
bar.active-pixmap-list
|
||
|
(if bar.focus-sensitive
|
||
|
(if (and (boundp 'bar.active-pixmap-list)
|
||
|
(= 3 (length bar.active-pixmap-list)))
|
||
|
bar.active-pixmap-list
|
||
|
(progn
|
||
|
(? "Warning: bar.active-pixmap-list incorrect, "
|
||
|
bar.active-pixmap-list "\n")
|
||
|
bar.normal-pixmap-list)))
|
||
|
|
||
|
; intern variables
|
||
|
bar.normal-pixmap (# 1 bar.normal-pixmap-list)
|
||
|
bar.active-pixmap (# 1 bar.active-pixmap-list)
|
||
|
)
|
||
|
; BORDER EFFECTS
|
||
|
(setq bar.plugs
|
||
|
(+
|
||
|
; A plug for the first edge
|
||
|
(with (
|
||
|
normal-pixmap (# 0 bar.normal-pixmap-list)
|
||
|
active-pixmap (if bar.focus-sensitive
|
||
|
(# 0 bar.active-pixmap-list)
|
||
|
())
|
||
|
)
|
||
|
(list (bar.plug-make)))
|
||
|
|
||
|
; The plugs of user
|
||
|
bar.plugs
|
||
|
|
||
|
; If necessary a space to make sure that
|
||
|
; the last plug will be on the right (or bottom)
|
||
|
|
||
|
(if (member () bar.plugs) ; (contains-item bar.plugs ())
|
||
|
()
|
||
|
'(()))
|
||
|
|
||
|
; A plug for the last edge
|
||
|
(with (
|
||
|
normal-pixmap (# 2 bar.normal-pixmap-list)
|
||
|
active-pixmap (if bar.focus-sensitive
|
||
|
(# 2 bar.active-pixmap-list)
|
||
|
())
|
||
|
)
|
||
|
(list (bar.plug-make)))
|
||
|
))
|
||
|
(bar.pixmap-appearance-make)
|
||
|
)))
|
||
|
|
||
|
|
||
|
|
||
|
(setq bar.default-normal-pixmap-list
|
||
|
(list bar.default-pixmap bar.default-pixmap bar.default-pixmap))
|
||
|
|
||
|
; Context:
|
||
|
; bar.focus-sensitive
|
||
|
; normal-pixmap
|
||
|
; active-pixmap
|
||
|
(de bar.plug-make ()
|
||
|
(with (
|
||
|
fsm bar.plug-fsm
|
||
|
borderwidth 0
|
||
|
property (if bar.focus-sensitive
|
||
|
(list
|
||
|
'normal-drawer
|
||
|
(list 'wob-tile normal-pixmap)
|
||
|
'active-drawer
|
||
|
(list 'wob-tile active-pixmap)
|
||
|
)
|
||
|
())
|
||
|
)
|
||
|
(plug-make normal-pixmap)
|
||
|
))
|
||
|
|
||
|
(setq bar.plug-behaviour
|
||
|
(state-make
|
||
|
(on (user-event 'focus-out) (eval (# 'normal-drawer wob-property)))
|
||
|
(on (user-event 'focus-in) (eval (# 'active-drawer wob-property)))))
|
||
|
|
||
|
(setq bar.plug-fsm (fsm-make bar.plug-behaviour))
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
; Appareance described by the prefix name of 3 pixmap
|
||
|
; ---------------------------------------------------
|
||
|
; (a stretchable center and 2 borders)
|
||
|
;
|
||
|
; Context:
|
||
|
; bar.normal-pixmap-file-name
|
||
|
; bar.active-pixmap-file-name
|
||
|
; bar.orientation 'vertical or 'horizontal
|
||
|
; bar.suffixes for instance: '( "_l" "_" "_r")
|
||
|
; bar.pixmap-make default: pixmap-make
|
||
|
; bar.focus-sensitive
|
||
|
; Border effect on:
|
||
|
; property
|
||
|
; bar-min-width
|
||
|
; bar-max-width
|
||
|
; bar.plugs
|
||
|
;
|
||
|
(de bar.3-pixmap-files-appearance-make ()
|
||
|
(with (
|
||
|
bar.normal-pixmap-file-name (default bar.normal-pixmap-file-name
|
||
|
"default")
|
||
|
bar.active-pixmap-file-name (default bar.active-pixmap-file-name
|
||
|
"default")
|
||
|
bar.orientation (default bar.orientation 'horizontal)
|
||
|
bar.suffixes (default bar.suffixes
|
||
|
(if (= 'vertical bar.orientation)
|
||
|
suffixes.3-vertical_
|
||
|
suffixes.3-horizontal_ ))
|
||
|
bar.pixmap-make (default bar.pixmap-make pixmap-make)
|
||
|
|
||
|
; local variables
|
||
|
bar.normal-pixmap-list (pixmap-list-make
|
||
|
bar.normal-pixmap-file-name
|
||
|
bar.suffixes
|
||
|
bar.pixmap-make)
|
||
|
bar.active-pixmap-list (if bar.focus-sensitive
|
||
|
(pixmap-list-make
|
||
|
bar.active-pixmap-file-name
|
||
|
bar.suffixes
|
||
|
bar.pixmap-make)
|
||
|
())
|
||
|
)
|
||
|
(bar.3-pixmaps-appearance-make)
|
||
|
))
|
||
|
|
||
|
|
||
|
; Appareance described by the prefix name of 3 pixmap
|
||
|
; ---------------------------------------------------
|
||
|
; (a stretchable center and 2 borders)
|
||
|
; As bar.3-pixmap-files-appearance-make but use paxmap-make and other suffixes
|
||
|
; ^ ^
|
||
|
; | |
|
||
|
;
|
||
|
; Context:
|
||
|
; bar.normal-pixmap-file-name
|
||
|
; bar.active-pixmap-file-name
|
||
|
; bar.orientation 'vertical or 'horizontal
|
||
|
; bar.suffixes default: '( ".l" "." ".r")
|
||
|
; bar.focus-sensitive
|
||
|
; Border effect on:
|
||
|
; property
|
||
|
; bar-min-width
|
||
|
; bar-max-width
|
||
|
; bar.plugs
|
||
|
;
|
||
|
(de bar.3-paxmap-files-appearance-make ()
|
||
|
(with (
|
||
|
bar.orientation (default bar.orientation 'horizontal)
|
||
|
bar.suffixes (default bar.suffixes
|
||
|
(if (= 'vertical bar.orientation)
|
||
|
suffixes.3-vertical.
|
||
|
suffixes.3-horizontal. ))
|
||
|
bar.pixmap-make paxmap-make
|
||
|
)
|
||
|
(bar.3-pixmap-files-appearance-make)))
|
||
|
|
||
|
; ======================================================================
|
||
|
|
||
|
(provide 'vb-bar)
|