diff options
Diffstat (limited to '.wmii/wmiirc')
-rwxr-xr-x | .wmii/wmiirc | 495 |
1 files changed, 248 insertions, 247 deletions
diff --git a/.wmii/wmiirc b/.wmii/wmiirc index d41f392..82c424b 100755 --- a/.wmii/wmiirc +++ b/.wmii/wmiirc @@ -1,269 +1,270 @@ -#!/bin/dash -f -# -*- mode: sh; -*- +#!/bin/bash +# Let any running instances of wmiirc know that we're starting +wmiir xwrite /event Start -# Configure wmii -wmiiscript=wmiirc # For wmii.sh -. wmii.sh +. "$HOME/.wmii/include.sh" -export WMII_FONT='xft:Monospace-8' -export WMII_TERM=x-terminal-emulator +echo ' ==> Starting wmiirc' +mount9p=/opt/plan9/bin/9pfuse +mkdir -p $WMII_NAMESPACE/mnt +$mount9p $WMII_NAMESPACE/{wmii,mnt} -. $HOME/.wmii/wmiirc_local - -# Configuration Variables +MODKEY=Mod4 # super UP=p DOWN=n LEFT=b RIGHT=f -# Bars -noticetimeout=5 -noticebar=/rbar/!notice - # Colors tuples: "<text> <background> <border>" -. $HOME/.wmii/wmiirc_solarized_dark +. `conffile theme-solarized-dark` # Menu history -hist="${WMII_CONFPATH%%:*}/history" -histnum=5000 - -# Column Rules -wmiir write /colrules <<! -/gimp/ -> 17+83+41 -/.*/ -> 62+38 # Golden Ratio -! +hist="`conffile history`" # Tagging Rules -wmiir write /tagrules <<! -/MPlayer|VLC/ -> ~ -/Gimp/ -> ~+gimp -/Emacs|Navigator/ -> +sel -! - -local_events() { true; } -wi_runconf -s wmiirc_local - -echo $WMII_NORMCOLORS | wmiir create $noticebar - -# Event processing -events() { - events_events - events_menus - events_actions - events_keybindings -} -events_events() { - cat <<'!' -# Events -Event CreateTag - echo "$WMII_NORMCOLORS" "$@" | wmiir create "/lbar/$@" -Event DestroyTag - wmiir remove "/lbar/$@" -Event FocusTag - wmiir xwrite "/lbar/$@" "$WMII_FOCUSCOLORS" "$@" -Event UnfocusTag - wmiir xwrite "/lbar/$@" "$WMII_NORMCOLORS" "$@" -Event UrgentTag - shift - wmiir xwrite "/lbar/$@" "*$@" -Event NotUrgentTag - shift - wmiir xwrite "/lbar/$@" "$@" -Event LeftBarClick LeftBarDND - shift - wmiir xwrite /ctl view "$@" -Event Unresponsive - { - client=$1; shift - msg="The following client is not responding. What would you like to do?$wi_newline" - resp=$(wihack -transient $client \ - xmessage -nearmouse -buttons Kill,Wait -print - -fn "${WMII_FONT%%,*}" "$msg $(wmiir read /client/sel/label)") - if [ "$resp" = Kill ]; then - wmiir xwrite /client/$client/ctl slay & - fi - }& -Event Notice - wmiir xwrite $noticebar $wi_arg - - kill $xpid 2>/dev/null # Let's hope this isn't reused... - { sleep $noticetimeout; wmiir xwrite $noticebar ' '; }& - xpid = $! -! -} - -events_menus() { - cat <<'!' -# Window menus -Menu Client-3-Delete - wmiir xwrite /client/$1/ctl kill -#Menu Client-3-Kill -# wmiir xwrite /client/$1/ctl slay -Menu Client-3-Fullscreen - wmiir xwrite /client/$1/ctl Fullscreen on -Event ClientMouseDown - wi_fnmenu Client $2 $1 & - -# LBar menus -Menu LBar-3-Delete - tag=$1; clients=$(wmiir read "/tag/$tag/index" | awk '/[^#]/{print $2}') - for c in $clients; do - if [ "$tag" = "$(wmiir read /client/$c/tags)" ]; then - wmiir xwrite /client/$c/ctl kill - else - wmiir xwrite /client/$c/tags -$tag - fi - if [ "$tag" = "$(wi_seltag)" ]; then - newtag=$(wi_tags | awk -v't='$tag ' - $1 == t { if(!l) getline l - print l - exit } - { l = $0 }') - wmiir xwrite /ctl view $newtag - fi - done -Event LeftBarMouseDown - wi_fnmenu LBar "$@" & -! -} - -events_actions() { - cat <<'!' -# Actions -Action showkeys - echo "$KeysHelp" | xmessage -file - -fn ${WMII_FONT%%,*} -Action quit - wmiir xwrite /ctl quit -Action exec - wmiir xwrite /ctl exec "$@" -Action rehash - wi_proglist $PATH >$progsfile -Action status - set +xv - if wmiir remove /rbar/status 2>/dev/null; then - sleep 2 - fi - echo "$WMII_NORMCOLORS" | wmiir create /rbar/status - while status | wmiir write /rbar/status; do - sleep 1 - done -! -} - -events_keybindings() { - cat <<'!' +echo '/Emacs|Navigator/ -> +sel' >> $WMII_DIR/tagrules +echo '/Eclipse/ -> +sel' >> $WMII_DIR/tagrules +echo '/panel/ -> /.*/' >> $WMII_DIR/tagrules + +Event() { + event=$1; shift; + case "$event" in + ## Mouse event meanings: + ## MouseDown = mouse down + ## Click = mouse up + ## DND = hover, while dragging something (Drag 'n' Drop) + ## The associated mouse button is always "1" + ## + ## Mouse-button IDs: + ## 1 = left + ## 2 = middle + ## 3 = right + + ## WMII-meta events + Quit) ## No args + echo ' ==> Stopping wmiirc' + echo " -> unmounting WMII_DIR=$WMII_DIR..." + # might complain about /etc/mtab if the x server has already stopped + fusermount -u "$WMII_DIR" 2>>/dev/null + echo " -> rmdir'ing WMII_DIR=$WMII_DIR..." + rmdir "$WMII_DIR";; + Warning) ## $@=string + notify-send "wmii warning: $*";; + Key) ## $1=keystroke + Key "$@";; + + ## WMII Window management events + FocusFloating) ## No args + ;; + AreaFocus) ## $1=area + ;; + DestroyArea) ## $1=area + ;; + ColumnFocus) ## $1=column + ;; + CreateColumn) ## $1=column + ;; + + ## Client events + CreateClient) ## $1=client + ;; + DestroyClient) ## $1=client + ;; + Urgent) ## $1=client $2=[Manager|Client] + ;; + NotUrgent) ## $1=client $2=[Manager|Client] + ;; + ClientMouseDown) ## $1=client $2=button + client=$1 + button=$2 + case $button in + 1) ;; + 2) ;; + 3) + { + case `wmii9menu Delete Fullscreen` in + Delete) + echo kill |a $WMII_DIR/client/$client/ctl;; + Fullscreen) + echo Fullscreen on |a $WMII_DIR/client/$1/ctl;; + esac + }& ;; + esac;; + ClientClick) ## $1=client $2=button + ;; + Unresponsive) ## $1=client + client=$1 + client_name=`cat $WMII_DIR/client/$client/label` + msg="The client \`${client_name}' is not responding." + msg+=" What would you like to do?" + { + resp=$(wihack -transient $client \ + xmessage -nearmouse -buttons Kill,Wait -print "$msg") + if [ "$resp" = Kill ]; then + echo slay |a $WMII_DIR/client/$client/ctl + fi + }& ;; + Fullscreen) ## $1=client $2=[on|off] + # TODO: hide any clients with the 'panel' class + ;; + + ## Tag events + CreateTag) ## $1=tag + echo "$WMII_NORMCOLORS" $@ |a $WMII_DIR/lbar/$1;; + DestroyTag) ## $1=tag + rm $WMII_DIR/lbar/$1;; + FocusTag) ## $1=tag + echo "$WMII_FOCUSCOLORS" $1 |a $WMII_DIR/lbar/$1;; + UnfocusTag) ## $1=tag + echo "$WMII_NORMCOLORS" $1 |a $WMII_DIR/lbar/$1;; + UrgentTag) ## $1=tag $2=[Manager|Client] + echo "$WMII_URGENTCOLORS" $1 |a $WMII_DIR/lbar/$1;; + NotUrgentTag) ## $1=tag $2=[Manager|Client] + echo "$WMII_NORMCOLORS" $1 |a $WMII_DIR/lbar/$1;; + + ## LeftBar events (usually tag buttons) + LeftBarMouseDown) ## $1=button $2=bar_item + ;; + LeftBarClick) ## $1=button $2=bar_item + shift # ignore the button + echo view "$@" |a $WMII_DIR/ctl;; + LeftMouseDND) ## $1=button $2=bar_item + Event LeftBarClick "$@";; + + ## RightBar events + RightBarMouseDown) ## $1=button $2=bar_item + ;; + RightBarClick) ## $1=button $2=bar_item + ;; + RightMouseDND) ## $1=button $2=bar_item + Event RightBarClick "$@";; + + ## Custom (non-WMII-generated) events + Start) ## No args + Event Quit;; # get out of the way for a new event loop + esac +} ## End Event + # Key Bindings -KeyGroup Moving around -Key $MODKEY-$LEFT # Select the client to the left - wmiir xwrite /tag/sel/ctl select left -Key $MODKEY-$RIGHT # Select the client to the right - wmiir xwrite /tag/sel/ctl select right -Key $MODKEY-$UP # Select the client above - wmiir xwrite /tag/sel/ctl select up -Key $MODKEY-$DOWN # Select the client below - wmiir xwrite /tag/sel/ctl select down - -Key $MODKEY-space # Toggle between floating and managed layers - wmiir xwrite /tag/sel/ctl select toggle - -KeyGroup Moving clients around -Key $MODKEY-Shift-$LEFT # Move selected client to the left - wmiir xwrite /tag/sel/ctl send sel left -Key $MODKEY-Shift-$RIGHT # Move selected client to the right - wmiir xwrite /tag/sel/ctl send sel right -Key $MODKEY-Shift-$UP # Move selected client up - wmiir xwrite /tag/sel/ctl send sel up -Key $MODKEY-Shift-$DOWN # Move selected client down - wmiir xwrite /tag/sel/ctl send sel down - -Key $MODKEY-Shift-space # Toggle selected client between floating and managed layers - wmiir xwrite /tag/sel/ctl send sel toggle - -KeyGroup Moving through stacks -Key $MODKEY-Control-$UP # Select the stack above - wmiir xwrite /tag/sel/ctl select up stack -Key $MODKEY-Control-$DOWN # Select the stack below - wmiir xwrite /tag/sel/ctl select down stack - -KeyGroup Client actions -Key $MODKEY-shift-1 # Toggle selected client's fullsceen state - wmiir xwrite /client/sel/ctl Fullscreen toggle -Key $MODKEY-shift-0 # Close client - wmiir xwrite /client/sel/ctl kill - -KeyGroup Changing column modes -Key $MODKEY-d # Set column to default mode - wmiir xwrite /tag/sel/ctl colmode sel default-max -Key $MODKEY-s # Set column to stack mode - wmiir xwrite /tag/sel/ctl colmode sel stack-max -Key $MODKEY-m # Set column to max mode - wmiir xwrite /tag/sel/ctl colmode sel stack+max - -KeyGroup Running programs -Key $MODKEY-a # Open wmii actions menu - action $(wi_actions | wimenu -h "${hist}.actions" -n $histnum) & -Key $MODKEY-x # Open program menu - eval wmiir setsid "$(wimenu -h "${hist}.progs" -n $histnum <$progsfile)" & -Key $MODKEY-Return # Launch a terminal - eval wmiir setsid $WMII_TERM & - -KeyGroup Other -Key $MODKEY-Control-t # Toggle all other key bindings - case $(wmiir read /keys | wc -l | tr -d ' \t\n') in - 0|1) - echo -n "$Keys" | wmiir write /keys - wmiir xwrite /ctl grabmod $MODKEY;; - *) - wmiir xwrite /keys $MODKEY-Control-t - wmiir xwrite /ctl grabmod Mod3;; +Key() { + key=$1 + case "$key" in + ## Moving around + + $MODKEY-$LEFT) ## Select the client to the left + echo select left |a $WMII_DIR/tag/sel/ctl;; + $MODKEY-$RIGHT) ## Select the client to the right + echo select right |a $WMII_DIR/tag/sel/ctl;; + $MODKEY-$UP) ## Select the client above + echo select up |a $WMII_DIR/tag/sel/ctl;; + $MODKEY-$DOWN) ## Select the client below + echo select down |a $WMII_DIR/tag/sel/ctl;; + + $MODKEY-space) ## Toggle between floating and managed layers + echo select toggle |a $WMII_DIR/tag/sel/ctl;; + + ## Moving clients around + + $MODKEY-Shift-$LEFT) ## Move selected client to the left + wmiir xwrite /tag/sel/ctl send sel left;; + $MODKEY-Shift-$RIGHT) ## Move selected client to the right + wmiir xwrite /tag/sel/ctl send sel right;; + $MODKEY-Shift-$UP) ## Move selected client up + wmiir xwrite /tag/sel/ctl send sel up;; + $MODKEY-Shift-$DOWN) ## Move selected client down + wmiir xwrite /tag/sel/ctl send sel down;; + + $MODKEY-Shift-space) ## Toggle selected client between floating and managed layers + wmiir xwrite /tag/sel/ctl send sel toggle;; + + ## Moving through stacks + $MODKEY-Control-$UP) ## Select the stack above + wmiir xwrite /tag/sel/ctl select up stack;; + $MODKEY-Control-$DOWN) # Select the stack below + wmiir xwrite /tag/sel/ctl select down stack;; + + ## Client actions + $MODKEY-shift-1) ## Toggle selected client's fullsceen state + wmiir xwrite /client/sel/ctl Fullscreen toggle;; + $MODKEY-shift-0) ## Close client + wmiir xwrite /client/sel/ctl kill;; + + ## Changing column modes + $MODKEY-d) ## Set column to default mode + wmiir xwrite /tag/sel/ctl colmode sel default-max;; + $MODKEY-s) ## Set column to stack mode + wmiir xwrite /tag/sel/ctl colmode sel stack-max;; + $MODKEY-m) ## Set column to max mode + wmiir xwrite /tag/sel/ctl colmode sel stack+max;; + + ## Running programs + $MODKEY-a) ## Open wmii actions menu + Action $(path_ls $WMII_CONFPATH | wimenu -h "${hist}.actions" -n 5000) & ;; + $MODKEY-x) ## Open program menu + setsid $(wimenu -h "${hist}.progs" -n 5000 <$progsfile) & ;; + $MODKEY-Return) ## Launch a terminal + setsid x-terminal-emulator & ;; + + ## Other + $MODKEY-Control-t) ## Toggle all other key bindings + case $(wmiir read /keys | wc -l | tr -d ' \t\n') in + 0|1) + echo -n "$Keys" | wmiir write /keys + wmiir xwrite /ctl grabmod $MODKEY;; + *) + wmiir xwrite /keys $MODKEY-Control-t + wmiir xwrite /ctl grabmod Mod3;; + esac;; + + ## Tag actions + $MODKEY-t) ## Change to another tag + { + tag=$(lstags | wimenu -h "${hist}.tags" -n 50) || return + wmiir xwrite /ctl view $tag + }& ;; + $MODKEY-Shift-t) ## Retag the selected client + sel=$(sed 1q $WMII_DIR/client/sel/ctl) + { + tag=$(lstags | wimenu -h "${hist}.tags" -n 50) || return + wmiir xwrite /client/$sel/tags $tag + }& ;; esac +} ## End Key -KeyGroup Tag actions -Key $MODKEY-t # Change to another tag - (tag=$(wi_tags | wimenu -h "${hist}.tags" -n 50) && wmiir xwrite /ctl view $tag) & -Key $MODKEY-Shift-t # Retag the selected client - c=$(wi_selclient) - (tag=$(wi_tags | wimenu -h "${hist}.tags" -n 50) && wmiir xwrite /client/$c/tags $tag) & -! - for i in 0 1 2 3 4 5 6 7 8 9; do - cat <<'!' -Key $MODKEY-$i # Move to the numbered view - wmiir xwrite /ctl view "$i" -#Key $MODKEY-Shift-$i # Retag selected client with the numbered tag -# wmiir xwrite /client/sel/tags "$i" -! - done -} -wi_events events local_events - -# WM Configureation -wmiir write /ctl <<! - font $WMII_FONT - focuscolors $WMII_FOCUSCOLORS - normcolors $WMII_NORMCOLORS - grabmod $MODKEY - border 1 -! +# WM Configuration +echo font xft:Monospace-8 |a $WMII_DIR/ctl +echo focuscolors $WMII_FOCUSCOLORS |a $WMII_DIR/ctl +echo normcolors $WMII_NORMCOLORS |a $WMII_DIR/ctl +echo grabmod $MODKEY |a $WMII_DIR/ctl +echo border 1 |a $WMII_DIR/ctl xsetroot -solid "$WMII_BACKGROUND" & -# Misc -progsfile="$(wmiir namespace)/.proglist" -action status & -wi_proglist $PATH >$progsfile & - -# Setup Tag Bar -IFS="$wi_newline" -wmiir rm $(wmiir ls /lbar | sed 's,^,/lbar/,') >/dev/null -seltag=$(wmiir read /tag/sel/ctl | sed 1q) -unset IFS -wi_tags | while read tag -do +progsfile=$WMII_NAMESPACE/.proglist +path_ls $PATH > $progsfile & + +eval arg `scansection Key|cut -sf2` |a $WMII_DIR/keys + +# Clear the LBar +find $WMII_DIR/lbar -type f -delete + +# Emulate [Create|Focus]Tag events +seltag=`sed 1q $WMII_DIR/tag/sel/ctl` +lstags | while read tag; do + Event CreateTag "$tag" if [ "$tag" = "$seltag" ]; then - echo "$WMII_FOCUSCOLORS" "$tag" - else - echo "$WMII_NORMCOLORS" "$tag" - fi | wmiir create "/lbar/$tag" + Event FocusTag "$tag" + fi done -wi_eventloop +Action autostart 2>/dev/null & + +if [ -f "`conffile wmiirc_local`" ]; then + . "`conffile wmiirc_local`" +fi +trap "Event Quit" EXIT + +# use wmiir so it doesn't look like an open file +wmiir read /event 2>/dev/null | while read event; do + Event $event +done |