mirror of
https://github.com/0intro/wmii
synced 2024-12-01 17:57:12 +03:00
37d553300f
Improved focus semantics. /client/*/ctl slay command. Find unresponsive clients on kill. Draw titlebars of floating clients differently. Hack to set window properties of programs: wihack command/libwmii_hack.so library. Added wmii.rc, on which rc.wmii now depends. The usual cleanup.
290 lines
6.0 KiB
Bash
Executable File
290 lines
6.0 KiB
Bash
Executable File
#!sh
|
|
# WMII Configuration
|
|
load std string regex expr echo
|
|
|
|
argv0 = $0
|
|
|
|
#mount -Aa {os dial unix!/tmp/ns.kris.:1/wmii >[1=0]} / || raise mount
|
|
#mount -Aa {styxmon {os rc -c 'dial $WMII_ADDRESS' >[1=0]}} / || raise mount
|
|
mount -Aa {os rc -c 'dial $WMII_ADDRESS' >[1=0]} / || raise mount
|
|
|
|
{`{read} && echo halt>/dev/sysctl}&
|
|
|
|
MODKEY=Mod1
|
|
UP=k
|
|
DOWN=j
|
|
LEFT=h
|
|
RIGHT=l
|
|
|
|
WMII_FONT=fixed
|
|
WMII_NORMCOLORS=('#222222' '#5FBF77' '#2A7F3F')
|
|
WMII_FOCUSCOLORS=('#ffffff' '#153F1F' '#2A7F3F')
|
|
WMII_BACKGROUND='#333333'
|
|
|
|
WMII_TERM=urxvt
|
|
|
|
fn wmiimenu {
|
|
(nf nb nil sf sb nil) := ($WMII_NORMCOLORS $WMII_FOCUSCOLORS)
|
|
os -d ${hostenv HOME} (
|
|
dmenu -b -fn $WMII_FONT
|
|
-nf $nf -nb $nb -sf $sf -sb $sb)
|
|
}
|
|
|
|
fn 9menu {
|
|
os -d ${hostenv HOME} (
|
|
wmii9menu -font ${hd ${split , $WMII_FONT}}
|
|
-^(nf nb br)^$WMII_NORMCOLORS
|
|
-^(sf sb br)^$WMII_FOCUSCOLORS $*)
|
|
}
|
|
|
|
# Column Rules
|
|
echo '/./ -> 60+40' >/colrules
|
|
|
|
# Tagging Rules
|
|
echo '
|
|
/Firefox/ -> www
|
|
/XMMS.*/ -> ~
|
|
/MPlayer.*/ -> ~
|
|
/.*/ -> sel
|
|
' >/tagrules
|
|
|
|
subfn seq {
|
|
result=${expr $* seq}
|
|
}
|
|
|
|
subfn hostenv {
|
|
arg := $"*
|
|
result="{os rc -c 'echo -n $'^$arg </dev/null}
|
|
}
|
|
|
|
subfn ftl {
|
|
result=${tl $*}
|
|
result=$"result
|
|
}
|
|
|
|
subfn lines {
|
|
ifs := "{echo}
|
|
arg := $*
|
|
result = `{$arg}
|
|
}
|
|
|
|
fn 'fn?' {
|
|
args := $*
|
|
~ ("{rescue '*' {} {whatis $args >[2]/dev/null}}
|
|
'load std; fn '*)
|
|
}
|
|
|
|
fn ifx {
|
|
(pred fn val args) := $*
|
|
if {$pred $val} {$fn $val $args}
|
|
}
|
|
|
|
fn dofn {
|
|
ifx 'fn?' {$*} $*
|
|
}
|
|
|
|
fn run_command {
|
|
os -b -d ${hostenv HOME} $* &
|
|
}
|
|
|
|
fn dprint {
|
|
arg := $*
|
|
or {~ $#debug 0} {~ $debug '' 0} { echo $arg }
|
|
}
|
|
|
|
subfn config_whatis {
|
|
result=${lines {os rc -c 'PATH=$WMII_CONFPATH which $*' $* </dev/null} $*}
|
|
}
|
|
|
|
# Status Bar Info
|
|
fn status {
|
|
echo ${re mg '[0-9]+\.[0-9]+' "{os uptime}} '|' `{date}
|
|
}
|
|
|
|
for(i in Key Event Action) {
|
|
'{fn $i { fn '$i'-$1 ${tl $*} }}'
|
|
}
|
|
|
|
# Events
|
|
Event Start {
|
|
if {~ $1 wmiirc} {
|
|
rm -f $progs_file
|
|
exit
|
|
}
|
|
}
|
|
|
|
Event Key {
|
|
dprint Key-$1
|
|
Key-$1 $1
|
|
}
|
|
|
|
Event CreateTag { echo $WMII_NORMCOLORS $* > /lbar/$"* }
|
|
Event DestroyTag { rm /lbar/$"* }
|
|
Event FocusTag { echo $WMII_FOCUSCOLORS $* > /lbar/$"* }
|
|
Event UnfocusTag { echo $WMII_NORMCOLORS $* > /lbar/$"* }
|
|
Event UrgentTag { echo '*'${ftl $*} > /lbar/${ftl $*} }
|
|
Event NotUrgentTag { echo ${tl $*} > /lbar/${ftl $*} }
|
|
|
|
Event LeftBarClick {
|
|
(button name) := $*
|
|
if {~ $button 1} { echo view $name >/ctl }
|
|
}
|
|
Event LeftBarMouseDown {
|
|
(button name) := $*
|
|
if {~ $button 3} { echo view "{9menu ${lines read_tags}} >/ctl & }
|
|
}
|
|
lastcmd=''
|
|
Event ClientMouseDown {
|
|
(client button) := $*
|
|
if {~ $button 3} {
|
|
lastcmd = `{9menu -initial $lastcmd Nop Delete Fullscreen}
|
|
if{~ $#lastcmd 0} {lastcmd=''}
|
|
cmp := {~ $lastcmd $*}
|
|
if {$cmp Nop} {
|
|
} {$cmp Delete} { echo kill >/client/$client/ctl
|
|
} {$cmp Fullscreen} { echo Fullscreen toggle >/client/$client/ctl
|
|
}
|
|
}
|
|
}
|
|
|
|
# Actions
|
|
Action quit { echo quit >>/ctl }
|
|
Action rehash {
|
|
flag x -
|
|
proglist ${hostenv PATH} >$progs_file
|
|
}
|
|
Action status {
|
|
flag x -
|
|
if {rm /rbar/status >[2]/dev/null} { sleep 1 }
|
|
echo $WMII_NORMCOLORS >/rbar/status
|
|
while {status >/rbar/status} { sleep 1 }
|
|
}
|
|
|
|
ifx {ftest -x $*} {run $*} $home/.wmii-3.5/sh.wmii.local
|
|
fn Key { ifx {! 'fn?' $*} {fn $*} Key-$1 ${tl $*} }
|
|
|
|
fn Action {
|
|
(action args) := $*
|
|
or {dofn Action-$action $args} {
|
|
ifx {! ~ $#* 0} {run_command $*} ${config_whatis $action} $args
|
|
}
|
|
}
|
|
|
|
# Key Bindings
|
|
Key $MODKEY-Control-t {
|
|
if { ~ `{wc -l /keys} 0 1} {
|
|
initkeys
|
|
echo grabmod $MODKEY >/ctl
|
|
} {
|
|
echo $MODKEY-Control-t >/keys
|
|
echo grabmod Mod3 >/ctl
|
|
}
|
|
}
|
|
|
|
Key $MODKEY-$LEFT { echo select left >/tag/sel/ctl }
|
|
Key $MODKEY-$RIGHT { echo select right >/tag/sel/ctl }
|
|
Key $MODKEY-$UP { echo select up >/tag/sel/ctl }
|
|
Key $MODKEY-$DOWN { echo select down >/tag/sel/ctl }
|
|
|
|
Key $MODKEY-Shift-$LEFT { echo send sel left >/tag/sel/ctl }
|
|
Key $MODKEY-Shift-$RIGHT { echo send sel right >/tag/sel/ctl }
|
|
Key $MODKEY-Shift-$DOWN { echo send sel down >/tag/sel/ctl }
|
|
Key $MODKEY-Shift-$UP { echo send sel up >/tag/sel/ctl }
|
|
|
|
Key $MODKEY-space { echo select toggle >/tag/sel/ctl }
|
|
Key $MODKEY-Shift-space { echo send sel toggle >/tag/sel/ctl }
|
|
|
|
Key $MODKEY-d { echo colmode sel default >/tag/sel/ctl }
|
|
Key $MODKEY-s { echo colmode sel stack >/tag/sel/ctl }
|
|
Key $MODKEY-m { echo colmode sel max >/tag/sel/ctl }
|
|
|
|
Key $MODKEY-f { echo Fullscreen toggle >/client/sel/ctl }
|
|
|
|
Key $MODKEY-Shift-c { echo kill >/client/sel/ctl }
|
|
|
|
Key $MODKEY-a { Action `{actionlist | wmiimenu} & }
|
|
Key $MODKEY-p { run_command rc -c "{wmiimenu <$progs_file} & }
|
|
Key $MODKEY-Return { run_command $WMII_TERM & }
|
|
Key $MODKEY-t { echo view `{read_tags | wmiimenu} >/ctl & }
|
|
Key $MODKEY-Shift-t {
|
|
sel := "{cat /client/sel/ctl}
|
|
read_tags | wmiimenu >/client/$sel/tags
|
|
}
|
|
|
|
Key $MODKEY-^${seq 0 9} { echo view ${tl ${splitr $1 -}} >/ctl }
|
|
Key Shift-$MODKEY-${seq 0 9} { echo ${tl ${splitr $1 -}} >/client/sel/tags}
|
|
|
|
# Functions
|
|
fn proglist {
|
|
os find ${split : $"*} -maxdepth 1 -type f </dev/null | sed 's,.*/,,' | sort | uniq
|
|
#for(d in /n/local^${split : $"*}) {
|
|
# fs filter {mode -d} $d
|
|
#} | sed 's,.*/,,' | sort | uniq
|
|
}
|
|
|
|
fn getfuns {
|
|
ls -p /env | sed -n 's/^fn-' ^ $1 ^ '-//p'
|
|
}
|
|
|
|
fn actionlist {
|
|
{ rescue '*' {} {
|
|
proglist ${hostenv WMII_CONFPATH}
|
|
}
|
|
getfuns Action
|
|
} | sort | uniq
|
|
}
|
|
|
|
fn initkeys {
|
|
getfuns Key >/keys
|
|
}
|
|
|
|
fn read_tags {
|
|
ls -p /tag | grep -v '^sel$'
|
|
}
|
|
|
|
# WM Configuration
|
|
{
|
|
echo grabmod $MODKEY
|
|
echo border 2
|
|
echo font $WMII_FONT
|
|
echo focuscolors $WMII_FOCUSCOLORS
|
|
echo normcolors $WMII_NORMCOLORS
|
|
} >/ctl
|
|
|
|
# Misc Setup
|
|
os xsetroot -solid $WMII_BACKGROUND </dev/null
|
|
|
|
dofn Local-Overrides
|
|
|
|
Action status &
|
|
progs_file=/tmp/proglist.${pid}
|
|
Action rehash &
|
|
|
|
# Tag Bar Setup
|
|
seltag=${lines sed 1q /tag/sel/ctl}
|
|
comm -13 ${pipe from {read_tags}} ${pipe from {ls -p /lbar/*}} |
|
|
getlines { rm /lbar/$line }
|
|
read_tags | getlines {
|
|
if {~ $line $seltag} {
|
|
echo $WMII_FOCUSCOLORS $line
|
|
} {
|
|
echo $WMII_NORMCOLORS $line
|
|
} >/lbar/$line
|
|
}
|
|
|
|
# Keygrab Setup
|
|
initkeys
|
|
|
|
echo Start wmiirc >/event
|
|
|
|
# Event Loop
|
|
getlines {
|
|
(event args) := ${split ' ' $line}
|
|
dprint Event-$event: $args
|
|
rescue '*' { dprint Exception: $exception } {
|
|
dofn Event-$event $args
|
|
} </dev/null
|
|
dprint loop
|
|
} </event
|
|
|