From 17171ba7013a3ad755a3cd055df716ff04810a0f Mon Sep 17 00:00:00 2001 From: vit Date: Thu, 19 May 2016 16:01:10 +0800 Subject: [PATCH 1/3] python3 + init display only once --- Azot/X.py | 19 +++++++++++-------- Azot/action.py | 25 ++++++++++--------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/Azot/X.py b/Azot/X.py index 8fad567..075c310 100644 --- a/Azot/X.py +++ b/Azot/X.py @@ -1,17 +1,20 @@ from Xlib import display from time import sleep - from Azot.logger import warning +working_display = display.Display() +working_screen = working_display.screen() +root_window = working_screen.root + # Get screen resolution def get_geometry(): while 1: try: - width = display.Display().screen().width_in_pixels - height = display.Display().screen().height_in_pixels - + width = working_screen.width_in_pixels + height = working_screen.height_in_pixels + return {"x": width, "y": height} - except Exception, e: + except Exception as e: warning(str(e) + '\n' + 'Spleep for 10 second') sleep(10) @@ -20,9 +23,9 @@ def get_geometry(): def get_cursor_position(): while 1: try: - data = display.Display().screen().root.query_pointer()._data + data = root_window.query_pointer()._data return {'x': data['root_x'], 'y': data['root_y']} - except Exception, e: + except Exception as e: warning(str(e) + '\n' + 'Spleep for 10 second') - sleep(10) + sleep(10) \ No newline at end of file diff --git a/Azot/action.py b/Azot/action.py index e8a72a3..eff0f98 100644 --- a/Azot/action.py +++ b/Azot/action.py @@ -15,6 +15,11 @@ corners = { # Execute command def do(): + def task_exec(): + msg = type_exec(action) + notify(msg) + sleep(1) + position = get_cursor_position() for action in config['actions']: @@ -22,27 +27,19 @@ def do(): if action['position'] != 'middle': if action['corner'] == 'top' or action['corner'] == 'bottom': if position['y'] == corners[ action['corner'] ] and position['x'] == corners[action['position']]: - msg = type_exec(action) - notify(msg) - sleep(1) + task_exec() elif action['corner'] == 'left' or action['corner'] == 'right': if position['x'] == corners[ action['position'] ] and position['y'] == corners[ action['corner'] ]: - msg = type_exec(action) - notify(msg) - sleep(1) + task_exec() # middles elif action['position'] == 'middle': if action['corner'] == 'top' or action['corner'] == 'bottom': if position['y'] == corners[ action['corner'] ] and position['x'] > config['corners']['middle_x_start'] and position['x'] < config['corners']['middle_x_end']: - msg = type_exec(action) - notify(msg) - sleep(1) + task_exec() elif action['corner'] == 'left' or action['corner'] == 'right': if position['x'] == corners[ action['corner'] ] and position['y'] > config['corners']['middle_y_start'] and position['y'] < config['corners']['middle_y_end']: - msg = type_exec(action) - notify(msg) - sleep(1) + task_exec() sleep(0.3) @@ -64,12 +61,10 @@ def type_exec(action): # Get shell command output def get_cmd(cmd): out = os.popen(cmd).read() - return out # Show notify message def notify(msg): if msg is not None: - get_cmd( "notify-send 'azot event' \"{0}\"".format(msg) ) - + get_cmd( "notify-send 'azot event' \"{0}\"".format(msg) ) \ No newline at end of file From d5fe060b923345a83fcd9497c2df4630948e07e7 Mon Sep 17 00:00:00 2001 From: vit Date: Thu, 19 May 2016 19:42:18 +0800 Subject: [PATCH 2/3] other python3 changes + config copying --- Azot/config.py | 24 ++++++++++++++++++------ Azot/logger.py | 3 +-- README.md | 2 +- azot.py | 2 +- azot.spec | 34 +++++++++++++++++----------------- debian/control | 2 +- debian/install | 12 ++++++------ 7 files changed, 45 insertions(+), 34 deletions(-) diff --git a/Azot/config.py b/Azot/config.py index edd0fca..63d1d25 100644 --- a/Azot/config.py +++ b/Azot/config.py @@ -2,16 +2,29 @@ import ast import argparse import os from Azot.X import get_geometry +from Azot.logger import info # Globals -config_path = os.environ['HOME'] + '/.config/azot/config.json' +config_dir = os.environ['HOME'] + '/.config/azot/' +config_path = config_dir + "config.json" + +default_config_paths = ['/usr/share/doc/azot/config.sample.json', './config.sample.json'] parser = argparse.ArgumentParser() parser.add_argument('-c', '--config') args = parser.parse_args() if args.config: - config_path = args.config + config_path = args.config +# Check config existence and copy if needed +if not os.path.exists(config_path): + for default_path in default_config_paths: + if os.path.exists(default_path): + os.makedirs(config_dir) + import shutil + info("Config doesn't exist in " + config_path + "; copying...") + shutil.copyfile(default_path, config_path) + break # Load configuration from file def load(): @@ -19,7 +32,7 @@ def load(): with open(config_path) as config_file: for line in config_file: config += line - + config_file.close() config = ast.literal_eval(config) config['corners'] = get_middle_areas() @@ -40,7 +53,7 @@ def get_middle_areas(): middle_y_start = int( middle_y - middle_y_area_pixels ) middle_x_end = int( middle_x + middle_x_area_pixels ) middle_y_end = int( middle_y + middle_y_area_pixels ) - + corners = { 'left_corner': 0, 'right_corner': geometry['x'] - 1, 'top_corner': 0, @@ -51,5 +64,4 @@ def get_middle_areas(): 'middle_y_end': middle_y_end } - return corners - + return corners \ No newline at end of file diff --git a/Azot/logger.py b/Azot/logger.py index 76b14c9..9db389e 100644 --- a/Azot/logger.py +++ b/Azot/logger.py @@ -1,4 +1,3 @@ -from __future__ import print_function import sys @@ -9,4 +8,4 @@ def warning(msg): # Print to STDOUT def info(msg): - print("INFO: ", msg, file=sys.stdout) + print("INFO: ", msg, file=sys.stdout) \ No newline at end of file diff --git a/README.md b/README.md index 2369a95..ca44451 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ It's look like KWin or Compiz, e.t.c ## Configuration -Edit config.sample.json and put it into ~/.config/azot/config.json +By default it's stored in ~/.config/azot/config.json * type must be ''exec'', ''notify'' or ''simple'' * exec: just show command diff --git a/azot.py b/azot.py index 94b7eb8..ebe8472 100755 --- a/azot.py +++ b/azot.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 import Azot.action diff --git a/azot.spec b/azot.spec index 989ec3d..603a5bf 100644 --- a/azot.spec +++ b/azot.spec @@ -23,7 +23,7 @@ rm -rf $RPM_BUILD_ROOT rm -f *.pyc rm -f Azot/*.pyc -mkdir -p $RPM_BUILD_ROOT/usr/lib/python2.7/site-packages/Azot/ +mkdir -p $RPM_BUILD_ROOT/usr/lib/python3.4/site-packages/Azot/ mkdir -p $RPM_BUILD_ROOT/usr/share/doc/azot/ mkdir -p $RPM_BUILD_ROOT/usr/bin/ @@ -31,7 +31,7 @@ cp README.md $RPM_BUILD_ROOT/usr/share/doc/azot cp LICENSE $RPM_BUILD_ROOT/usr/share/doc/azot cp config.sample.json $RPM_BUILD_ROOT/usr/share/doc/azot cp azot.py $RPM_BUILD_ROOT/usr/bin/ -cp azot/* $RPM_BUILD_ROOT/usr/lib/python2.7/site-packages/Azot/ +cp azot/* $RPM_BUILD_ROOT/usr/lib/python3.4/site-packages/Azot/ %{_fixperms} $RPM_BUILD_ROOT/* @@ -40,21 +40,21 @@ rm -rf $RPM_BUILD_ROOT %files /usr/bin/azot.py -/usr/lib/python2.7/site-packages/Azot/X.py -/usr/lib/python2.7/site-packages/Azot/X.pyc -/usr/lib/python2.7/site-packages/Azot/X.pyo -/usr/lib/python2.7/site-packages/Azot/__init__.py -/usr/lib/python2.7/site-packages/Azot/__init__.pyc -/usr/lib/python2.7/site-packages/Azot/__init__.pyo -/usr/lib/python2.7/site-packages/Azot/action.py -/usr/lib/python2.7/site-packages/Azot/action.pyc -/usr/lib/python2.7/site-packages/Azot/action.pyo -/usr/lib/python2.7/site-packages/Azot/config.py -/usr/lib/python2.7/site-packages/Azot/config.pyc -/usr/lib/python2.7/site-packages/Azot/config.pyo -/usr/lib/python2.7/site-packages/Azot/logger.py -/usr/lib/python2.7/site-packages/Azot/logger.pyc -/usr/lib/python2.7/site-packages/Azot/logger.pyo +/usr/lib/python3.4/site-packages/Azot/X.py +/usr/lib/python3.4/site-packages/Azot/X.pyc +/usr/lib/python3.4/site-packages/Azot/X.pyo +/usr/lib/python3.4/site-packages/Azot/__init__.py +/usr/lib/python3.4/site-packages/Azot/__init__.pyc +/usr/lib/python3.4/site-packages/Azot/__init__.pyo +/usr/lib/python3.4/site-packages/Azot/action.py +/usr/lib/python3.4/site-packages/Azot/action.pyc +/usr/lib/python3.4/site-packages/Azot/action.pyo +/usr/lib/python3.4/site-packages/Azot/config.py +/usr/lib/python3.4/site-packages/Azot/config.pyc +/usr/lib/python3.4/site-packages/Azot/config.pyo +/usr/lib/python3.4/site-packages/Azot/logger.py +/usr/lib/python3.4/site-packages/Azot/logger.pyc +/usr/lib/python3.4/site-packages/Azot/logger.pyo %defattr(-,root,root,-) %doc LICENSE README.md config.sample.json diff --git a/debian/control b/debian/control index 5d6d13b..995c92e 100644 --- a/debian/control +++ b/debian/control @@ -8,7 +8,7 @@ Vcs-Git: https://github.com/Difrex/azot Package: azot Architecture: all -Depends: python, python-xlib, libnotify-bin +Depends: python3, python3-xlib, libnotify-bin Description: Screen corners action in all WMs Package: azot-docs diff --git a/debian/install b/debian/install index aa4c747..7105d97 100644 --- a/debian/install +++ b/debian/install @@ -1,6 +1,6 @@ -Azot/action.py usr/lib/python2.7/dist-packages/Azot -Azot/logger.py usr/lib/python2.7/dist-packages/Azot -Azot/config.py usr/lib/python2.7/dist-packages/Azot -Azot/X.py usr/lib/python2.7/dist-packages/Azot -Azot/__init__.py usr/lib/python2.7/dist-packages/Azot -azot.py usr/bin +Azot/action.py usr/lib/python3.4/dist-packages/Azot +Azot/logger.py usr/lib/python3.4/dist-packages/Azot +Azot/config.py usr/lib/python3.4/dist-packages/Azot +Azot/X.py usr/lib/python3.4/dist-packages/Azot +Azot/__init__.py usr/lib/python3.4/dist-packages/Azot +azot.py usr/bin \ No newline at end of file From 33483bfe5b1a4b30a827162a481e8eff5b33e0e0 Mon Sep 17 00:00:00 2001 From: vit Date: Thu, 19 May 2016 20:05:16 +0800 Subject: [PATCH 3/3] check_delay and after_exec_delay in config --- Azot/action.py | 4 ++-- Azot/config.py | 6 ++++++ README.md | 1 + config.sample.json | 4 +++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Azot/action.py b/Azot/action.py index eff0f98..ca07d25 100644 --- a/Azot/action.py +++ b/Azot/action.py @@ -18,7 +18,7 @@ def do(): def task_exec(): msg = type_exec(action) notify(msg) - sleep(1) + sleep(config['after_exec_delay']) position = get_cursor_position() for action in config['actions']: @@ -40,7 +40,7 @@ def do(): elif action['corner'] == 'left' or action['corner'] == 'right': if position['x'] == corners[ action['corner'] ] and position['y'] > config['corners']['middle_y_start'] and position['y'] < config['corners']['middle_y_end']: task_exec() - sleep(0.3) + sleep(config['check_delay']) # Detect type and execute diff --git a/Azot/config.py b/Azot/config.py index 63d1d25..c3ec683 100644 --- a/Azot/config.py +++ b/Azot/config.py @@ -37,6 +37,12 @@ def load(): config = ast.literal_eval(config) config['corners'] = get_middle_areas() + if not 'check_delay' in config.keys(): + config['check_delay'] = 0.3 + + if not 'after_exec_delay' in config.keys(): + config['after_exec_delay'] = 1 + return config diff --git a/README.md b/README.md index ca44451..ced374f 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ By default it's stored in ~/.config/azot/config.json * command: command to execute * corner: Screen corner 'left', 'right', 'top', 'bottom' * position: 'left', 'right', 'middle' +* check_delay and after_exec_delay are set in seconds ### Depends diff --git a/config.sample.json b/config.sample.json index 1430b75..e650d5b 100644 --- a/config.sample.json +++ b/config.sample.json @@ -18,5 +18,7 @@ 'type': 'exec', 'command': 'scrot' } - ] + ], + 'check_delay': 0.3, + 'after_exec_delay': 1 }