From 8738261ec767c9708b99512e4938c189d861f5a1 Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Fri, 4 Sep 2009 11:55:09 +0200 Subject: use python based event manager instead of sh one. posix sh was a dead end --- examples/data/uzbl/scripts/dispatcher.sh | 97 ------------------------ examples/data/uzbl/scripts/event_manager.py | 113 ++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 97 deletions(-) delete mode 100755 examples/data/uzbl/scripts/dispatcher.sh create mode 100755 examples/data/uzbl/scripts/event_manager.py (limited to 'examples') diff --git a/examples/data/uzbl/scripts/dispatcher.sh b/examples/data/uzbl/scripts/dispatcher.sh deleted file mode 100755 index e8c3aed..0000000 --- a/examples/data/uzbl/scripts/dispatcher.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/sh -# -# Sample uzbl eventhandler -# -# demonstrating one possible way to access and process -# uzbl's event messages -# -# Usage: uzbl | eventhandler -# - -VERBOSE=1 - - -ALTPRESSED=0 -KEYCMD= # buffer for building up commands - -log () { - [ -n "$VERBOSE" ] && echo "$1" -} - -fifo () { - log "$1 > ${FIFO_PATH:-unset}" - [ -n "$FIFO_PATH" ] && echo "$1" > "$FIFO_PATH" -} - -log "Init eventhandler" - -clear_modifiers() { - ALT_PRESSED=0 - CONTROL_PRESSED=0 - #etc. - fifo 'set status_message = ' -} - -while read EVENT; do - if [ "$(echo $EVENT | cut -d ' ' -f 1)" != 'EVENT' ]; then - continue; - fi - EVENT="`echo $EVENT | sed 's/^EVENT //'`" - # get eventname - ENAME=`echo "$EVENT" | sed -ne 's/\([A-Z]*\) .*/\1/p'` - - if [ x"$ENAME" = 'xFIFO_SET' ]; then - FIFO_PATH=`echo $EVENT | cut -d ' ' -f 3` - - elif [ x"$ENAME" = x'KEY_PRESS' ]; then - KEY=$(echo "$EVENT" | sed -ne 's/KEY_PRESS \[.*\] \(.*$\)/\1/p') - - # Clear mofifiers on Escape - # - [ "$KEY" = Escape ] && clear_modifiers - - # Modifier: Alt_L - # - if [ x"$KEY" = x'Alt_L' ];then - clear_modifiers - ALT_PRESSED=1 - - # place an indicator showing the active modifier - # on uzbl's statusbar - # - fifo 'set status_message = @status_message Alt' - fi - - if [ "$ALT_PRESSED" = 1 ]; then - - # Keys - # - if [ x"$KEY" = x'a' ]; then - ALT_PRESSED=0 - fifo 'set inject_html =

You pressed Alt+a

' - fifo 'set status_message = ' - - # delete keycmd - # here not needed. loading a new page - # resets it by default - # - #echo 'set keycmd = ' > "$F_PATH" - fi - if [ x"$KEY" = x'b' ]; then - ALT_PRESSED=0 - fifo 'set inject_html =

You pressed Alt+b

' - fifo 'set status_message = ' - fi - - fi - - # Modifier: Control_L and Control_R. - # - if [ x"$KEY" = x'Control_L' -o x"$KEY" = x'Control_R' ];then - clear_modifiers - CONTROL_PRESSED=1 - fifo 'set status_message = @status_message Control' - #etc. - fi - fi -done diff --git a/examples/data/uzbl/scripts/event_manager.py b/examples/data/uzbl/scripts/event_manager.py new file mode 100755 index 0000000..d6f4a36 --- /dev/null +++ b/examples/data/uzbl/scripts/event_manager.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python + +# Uzbl sample event manager +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +''' +The Python Event Manager +======================== + +Sample event manager written in python + +Usage +==== +uzbl | + +''' + +import sys +import os + +# config dir. needed for bindings config +if 'XDG_CONFIG_HOME' in os.environ.keys() and os.environ['XDG_CONFIG_HOME']: + CONFIG_DIR = os.path.join(os.environ['XDG_CONFIG_HOME'], 'uzbl/') +else: + CONFIG_DIR = os.path.join(os.environ['HOME'], '.config/uzbl/') + + +# Default config +config = { + + 'uzbl_fifo': '', + 'verbose': True, + +} # End of config dictionary. + +# buffer for building up commands +keycmd = '' + + +_SCRIPTNAME = os.path.basename(sys.argv[0]) +def echo(msg): + '''Prints only if the verbose flag has been set.''' + + if config['verbose']: + sys.stderr.write("%s: %s\n" % (_SCRIPTNAME, msg)) + + +def error(msg): + '''Prints error message and exits.''' + + sys.stderr.write("%s: error: %s\n" % (_SCRIPTNAME, msg)) + sys.exit(1) + +def fifo(msg): + '''Writes commands to uzbl's fifo, if the fifo path is known''' + + echo ('Fifo msg: ' + msg + '(fifo path: ' + config['uzbl_fifo'] + ')') + if config['uzbl_fifo']: + fd = os.open(config['uzbl_fifo'], os.O_WRONLY) + os.write(fd, msg) + os.close(fd) + +def submit_keycmd(): + '''Sends the updated keycmd to uzbl, which can render it and stuff''' + + fifo ('set keycmd = ' + keycmd) + + +def main(): + '''Main function.''' + + echo ("Init eventhandler") + + for line in sys.stdin: + line = line.strip() + data = line.partition('EVENT ') + if (data[0] == ""): + line = data[2] + echo ("Got event: " + line) + data = line.partition(' ') + event_name = data[0] + event_data = data[2] + else: + echo ("Non-event: " + line) + continue + + if (event_name == 'FIFO_SET'): + config['uzbl_fifo'] = event_data.split()[-1] + elif (event_name == 'KEY_PRESS'): + # todo: keep a table of pressed modkeys. do we work with Mod[1-4] here or Alt_L and such? + key = event_data.split()[-1] + if (key == 'Escape'): + keycmd = '' + submit_keycmd + elif (event_name == 'KEY_RELEASE'): + #todo : update table of pressed modkeys + submit_keycmd + +if __name__ == "__main__": + main() + \ No newline at end of file -- cgit v1.2.3