Skip to content

Commit

Permalink
window scripts; make_script replaced by render_template
Browse files Browse the repository at this point in the history
  • Loading branch information
spyoungtech committed Dec 13, 2018
1 parent 8d7bcd5 commit 827a0ca
Show file tree
Hide file tree
Showing 9 changed files with 54 additions and 67 deletions.
1 change: 0 additions & 1 deletion ahk/mouse.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from ahk.utils import make_script
from ahk.script import ScriptEngine
import ast

Expand Down
3 changes: 2 additions & 1 deletion ahk/script.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import os
import subprocess
from shutil import which
from ahk.utils import logger
from ahk.utils import make_logger
from ahk.directives import Persistent
from jinja2 import Environment, FileSystemLoader

logger = make_logger(__name__)

class ScriptEngine(object):
def __init__(self, executable_path: str='', **kwargs):
Expand Down
4 changes: 4 additions & 0 deletions ahk/templates/window/close.ahk
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{% extends "base.ahk" %}
{% block body %}
WinClose, {{win.title}}, {{win.text}}, {{seconds_to_wait}}, {{win._exclude_title}}, {{win._exclude_text}}
{% endblock body %}
8 changes: 8 additions & 0 deletions ahk/templates/window/is_always_on_top.ahk
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{% extends "base.ahk" %}
{% block body %}
WinGet, ExStyle, ExStyle, {{win._title}}, {{win._text}}, {{win._exclude_title}}, {{win._exclude_text}}
if (ExStyle & 0x8) ; 0x8 is WS_EX_TOPMOST.
FileAppend, 1, *
else
FileAppend, 0, *
{% endblock body %}
6 changes: 6 additions & 0 deletions ahk/templates/window/position.ahk
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{% extends "base.ahk" %}
{% block body %}
WinGetPos, x, y, width, height, {{win.title}}, {{win.text}}, {{win._exclude_title}}, {{win._exclude_text}}
s .= Format("({}, {}, {}, {})", x, y, width, height)
FileAppend, %s%, *
{% endblock body %}
4 changes: 4 additions & 0 deletions ahk/templates/window/set.ahk
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{% extends "base.ahk" %}
{% block body %}
WinSet, {{subcommand}}, {{value}}, {{win.title}}, {{win.text}}, {{win._exclude_title}}, win._exclude_text}}
{% endblock body %}
11 changes: 11 additions & 0 deletions ahk/templates/window/title_list.ahk
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{% extends "base.ahk" %}
{% block body %}
WinGet windows, List
Loop %windows%
{
id := windows%A_Index%
WinGetTitle wt, ahk_id %id%
r .= wt . "`n"
}
FileAppend, %r%, *
{% endblock body %}
52 changes: 11 additions & 41 deletions ahk/utils.py
Original file line number Diff line number Diff line change
@@ -1,45 +1,15 @@
import os
from textwrap import dedent
import logging

logger = logging.getLogger('ahk')
handler = logging.StreamHandler()
formatter = logging.Formatter(
'%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
if os.environ.get('AHK_DEBUG'):
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.ERROR)


def make_script(body, directives=None, persistent=True, blocking=True):
"""
Convenience function to dedent script body as well as add #Persistent directive and Exit/ExitApp
:param body: body of the script
:param directives: an iterable of directives to add to the script.
:type directives: str or ahk.directives.Directive
:param persistent: if the #Persistent directive should be added (causes script to be blocking)
:return:
"""
exit_ = 'ExitApp'
if directives is None:
directives = set()
def make_logger(name):
logger = logging.getLogger(name)
handler = logging.StreamHandler()
formatter = logging.Formatter(
'%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
if os.environ.get('AHK_DEBUG'):
logger.setLevel(logging.DEBUG)
else:
directives = set(directives)

if persistent or blocking:
directives.add('#Persistent')

if not blocking:
directives.remove('#Persistent')

dirs = '\n'.join(str(directive) for directive in directives)

script = dedent(f'''\
{dirs}
{body}
{exit_}
''')
return script
logger.setLevel(logging.ERROR)
return logger
32 changes: 8 additions & 24 deletions ahk/window.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
from ahk.script import ScriptEngine
from ahk.utils import make_script
import ast
from .utils import logger
from .utils import make_logger

logger = make_logger(__name__)


class WindowNotFoundError(ValueError):
pass


class Window(object):
def __init__(self, engine, title='', text='', exclude_title='', exclude_text='', match_mode=None):
def __init__(self, engine: ScriptEngine, title='', text='', exclude_title='', exclude_text='', match_mode=None):
self.engine = engine
if title is None and text is None:
raise ValueError
Expand All @@ -19,28 +20,20 @@ def __init__(self, engine, title='', text='', exclude_title='', exclude_text='',
self._exclude_text = exclude_text
self.match_mode = match_mode



@classmethod
def from_ahk_id(cls, engine, ahk_id):
raise NotImplemented

def _win_set(self, subcommand, value):
script = make_script(f'''\
WinSet, {subcommand}, {value}, {self.title}, {self.text, self._exclude_title, self._exclude_text}
''')
script = self.engine.render_template(win=self, subcommand=subcommand, value=value)
return script

def win_set(self, *args, **kwargs):
script = self._win_set(*args, **kwargs)
self.engine.run_script(script)

def _position(self):
return make_script(f'''
WinGetPos, x, y, width, height, {self.title}, {self.text}, {self._exclude_title}, {self._exclude_text}
s .= Format("({{}}, {{}}, {{}}, {{}})", x, y, width, height)
FileAppend, %s%, *
''')
return self.engine.render_template('window/position.ahk', win=self)

def _get_pos(self):
resp = self.engine.run_script(self._position())
Expand Down Expand Up @@ -89,13 +82,7 @@ def ex_style(self):
raise NotImplemented

def _always_on_top(self):
return make_script(f'''
WinGet, ExStyle, ExStyle, {self._title}, {self._text}, {self._exclude_title}, {self._exclude_text}
if (ExStyle & 0x8) ; 0x8 is WS_EX_TOPMOST.
FileAppend, 1, *
else
FileAppend, 0, *
''')
return self.engine.render_template('window/is_always_on_top.ahk', win=self)

@property
def always_on_top(self):
Expand All @@ -114,10 +101,7 @@ def always_on_top(self, value):
raise ValueError(f'"{value}" not a valid option. Please use On/Off/Toggle/True/False/0/1/-1')

def _close(self, seconds_to_wait=''):
return make_script(f'''\
WinClose, {self.title}, {self.text}, {seconds_to_wait}, {self._exclude_title}, {self._exclude_text}
''')
return self.engine.render_template('window/close.ahk', win=self, seconds_to_wait=seconds_to_wait)

def close(self, seconds_to_wait=''):
self.engine.run_script(self._close(seconds_to_wait=seconds_to_wait))
Expand Down

0 comments on commit 827a0ca

Please sign in to comment.