lunedì 10 gennaio 2011

wmiirc

In the last days I played a lot with my wmiirc file, and now I think it's done.

Customizations:
  • xmodmap autostart (line 3).
  • Navigation keys (lines 8 to 12).
  • Theme (lines 15 to 18).
  • Status bar with volume, CPU, RAM, swap, battery, time (lines 39 to 46).
  • Keybindings (lines 130, 140 and from 158 to 167). Note the last one wich opens a custom menu called powerlist used to halt/reboot/sleep/hibernate the machine.
  • Actionlist menù does not show anymore some custom script inside .wmii directory (lines 239 to 243). Those are scripts to halt/reboot/etc and are called with powerlist.
  • Powerlist menù, shows only some file inside .wmii directory (lines 245 to 248).
 
#!/bin/sh -f

xmodmap ~/.xmodmaprc

# Configure wmii

# Configuration Variables
MODKEY=Mod4
UP=Up
DOWN=Down
LEFT=Left
RIGHT=Right

# Colors tuples: "<text> <background> <border>"
WMII_FOCUSCOLORS='#303030 #ecedee #ecedee'
WMII_NORMCOLORS='#959595 #303030 #303030'
WMII_BACKGROUND='#303030'
WMII_FONT='-xos4-terminus-*-*-*-*-*-*-*-*-*-*-*-*'

set -- $(echo $WMII_NORMCOLORS $WMII_FOCUSCOLORS)
WMII_MENU="dmenu -b -fn '$WMII_FONT' -nf '$1' -nb '$2' -sf '$4' -sb '$5'"
WMII_9MENU="wmii9menu -font '$WMII_FONT' -nf '$1' -nb '$2' -sf '$4' -sb '$5' -br '$6'"
WMII_TERM="x-terminal-emulator"

# Column Rules
wmiir write /colrules <<!
/.*/ -> 58+42
!

# Tagging Rules
wmiir write /tagrules <<!
/XMMS.*/ -> ~
/MPlayer.*/ -> ~
/.*/ -> sel
/.*/ -> 1
!

# Status Bar Info
status() {
 echo -n $(amixer get PCM | tail -1 | awk '{print $5}' | tr -d []%) '|' \
  $(uptime | awk '{print $9}' | tr -d , | cut -c 3-4) '|' \
  $(free | head -2 | tail -1 | awk '{print ($3 * 100) / $2}' | cut -c -2) '|' \
  $(free | tail -1 | awk '{print ($3 * 100) / $2}' | cut -c -4) '|' \
  $(ibam --percentcharge | head -1 | awk '{print $3}') '|' \
  $(date | awk '{print $5}' | cut -c -5)
}

# Event processing
#  Processed later by `wmiiloop' and evaled.
#  Duplicate the eval line and replace 'eval' with 'echo' for details.
eventstuff() {
 cat <<'!'
 # Events
 Event Start
  case "$1" in
  wmiirc)
   exit;
  esac
 Event Key
  fn=$(echo "$@" | sed 's/[^a-zA-Z_0-9]/_/g')
  Key_$fn "$@"
 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
  shift
  wmiir xwrite /ctl view "$@"
 # Actions
 Action quit
  wmiir xwrite /ctl quit
 Action exec
  wmiir xwrite /ctl exec "$@"
 Action rehash
  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
 Event ClientMouseDown
  client=$1; button=$2
  case "$button" in
  3)
   do=$(eval $WMII_9MENU -initial "${menulast:-SomeRandomName}" Nop Delete Fullscreen)
   case "$do" in
   Delete)
    wmiir xwrite /client/$client/ctl kill;;
   Fullscreen)
    wmiir xwrite /client/$client/ctl Fullscreen on;;
   esac
   menulast=${do:-"$menulast"}
  esac
 # Key Bindings
 Key $MODKEY-Control-t
  case $(wmiir read /keys | wc -l | tr -d ' \t\n') in
  0|1)
   echo -n $Keys | tr ' ' '\012' | wmiir write /keys
   wmiir xwrite /ctl grabmod $MODKEY;;
  *)
   wmiir xwrite /keys $MODKEY-Control-t
   wmiir xwrite /ctl grabmod Mod3;;
  esac
 Key $MODKEY-space
  wmiir xwrite /tag/sel/ctl select toggle
 Key $MODKEY-d
  wmiir xwrite /tag/sel/ctl colmode sel default
 Key $MODKEY-s
  wmiir xwrite /tag/sel/ctl colmode sel stack
 Key $MODKEY-m
  wmiir xwrite /tag/sel/ctl colmode sel max
 Key $MODKEY-a
  Action $(actionlist | eval $WMII_MENU) &
 Key $MODKEY-p
  sh -c "$(eval $WMII_MENU <$progsfile)" &
 Key $MODKEY-Tab #t
  wmiir xwrite /ctl "view $(tagsmenu)" &
 Key $MODKEY-Return
  eval $WMII_TERM &
 Key $MODKEY-Shift-space
  wmiir xwrite /tag/sel/ctl send sel toggle
 Key $MODKEY-f
  wmiir xwrite /client/sel/ctl Fullscreen toggle
 Key $MODKEY-Shift-c
  wmiir xwrite /client/sel/ctl kill
 Key $MODKEY-Shift-Tab #t
  wmiir xwrite "/client/$(wmiir read /client/sel/ctl)/tags" "$(tagsmenu)" &
 Key $MODKEY-$LEFT
  wmiir xwrite /tag/sel/ctl select left
 Key $MODKEY-$RIGHT
  wmiir xwrite /tag/sel/ctl select right
 Key $MODKEY-$DOWN
  wmiir xwrite /tag/sel/ctl select down
 Key $MODKEY-$UP
  wmiir xwrite /tag/sel/ctl select up
 Key $MODKEY-Shift-$LEFT
  wmiir xwrite /tag/sel/ctl send sel left
 Key $MODKEY-Shift-$RIGHT
  wmiir xwrite /tag/sel/ctl send sel right
 Key $MODKEY-Shift-$DOWN
  wmiir xwrite /tag/sel/ctl send sel down
 Key $MODKEY-Shift-$UP
  wmiir xwrite /tag/sel/ctl send sel up
 Key $MODKEY-F7
  thunar &
 Key $MODKEY-F8
  iceweasel &
 Key $MODKEY-F9
  claws-mail &
 Key XF86AudioMute
  amixer sset PCM 0 &
 Key XF86PowerDown
  Action $(powerlist | eval $WMII_MENU) &
!
 for i in 0 1 2 3 4 5 6 7 8 9; do
  cat <<!
 Key $MODKEY-$i
  wmiir xwrite /ctl view "$i"
 Key $MODKEY-Shift-$i
  wmiir xwrite /client/sel/tags "$i"
!
 done
}

# WM Configuration
wmiir write /ctl << EOF
font $WMII_FONT
focuscolors $WMII_FOCUSCOLORS
normcolors $WMII_NORMCOLORS
grabmod $MODKEY
border 1
EOF

export WMII_MENU WMII_9MENU WMII_FONT WMII_TERM
export WMII_FOCUSCOLORS WMII_SELCOLORS WMII_NORMCOLORS

# Feed events to `wmiiloop' for processing
eval "$(eventstuff | sed 's/^[ ]//' | { . wmiiloop; })"

echo "$Keys" | tr ' ' '\n' | wmiir write /keys

# Functions
Action() {
 action=$1; shift
 if [ -n "$action" ]; then
  Action_$action "$@" \
  || conf_which $action "$@"
 fi
}

proglist() {
 paths=$(echo "$@" | sed 'y/:/ /')
 ls -lL $paths 2>/dev/null \
  | awk '$1 ~ /^[^d].*x/ && NF > 2 { print $NF }' \
  | sort | uniq
}

# Misc
progsfile="$WMII_NS_DIR/.proglist"
Action status &
proglist $PATH >$progsfile &

xsetroot -solid "$WMII_BACKGROUND" &

# Setup Tag Bar
seltag="$(wmiir read /tag/sel/ctl 2>/dev/null)"
wmiir ls /lbar |
while read bar; do
 wmiir remove "/lbar/$bar"
done
wmiir ls /tag | sed -e 's|/||; /^sel$/d' |
while read tag; do
 if [ "X$tag" = "X$seltag" ]; then
  echo "$WMII_FOCUSCOLORS" "$tag" | wmiir create "/lbar/$tag" 
 else
  echo "$WMII_NORMCOLORS" "$tag" | wmiir create "/lbar/$tag"
 fi
done

# More functions
tagsmenu() {
        wmiir ls /tag | sed 's|/||; /^sel$/d' | eval $WMII_MENU
}

actionlist() {
 { proglist $WMII_CONFPATH | grep -v dormi | grep -v iberna | grep -v riavvia | grep -v spegni
  echo -n $Actions | tr ' ' '\012'
 } | sort | uniq
}

powerlist() {
        {       proglist $WMII_CONFPATH | grep -v wmii | grep -v welcome
        } | sort | uniq
}


conf_which() {
 which=$(which which)
 prog=$(PATH="$WMII_CONFPATH" $which $1); shift
 [ -n "$prog" ] && $prog "$@"
}

# Stop any running instances of wmiirc
echo Start wmiirc | wmiir write /event || exit 1

wmiir read /event |
while read event; do
 set -- $event
 event=$1; shift
 Event_$event $@
done 2>/dev/null

Nessun commento:

Posta un commento