#!/bin/bash # Let any running instances of wmiirc know that we're starting wmiir xwrite /event Start . "$HOME/.wmii/include.sh" echo ' ==> Starting wmiirc' mount9p=/opt/plan9/bin/9pfuse mkdir -p $WMII_NAMESPACE/mnt $mount9p $WMII_NAMESPACE/{wmii,mnt} MODKEY=Mod4 # super UP=p DOWN=n LEFT=b RIGHT=f # Colors tuples: " " . `conffile theme-solarized-dark` # Menu history hist="`conffile history`" # Tagging Rules 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 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 # 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" & 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 Event FocusTag "$tag" fi done 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