summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2019-09-21 11:02:06 +0200
committerLars-Dominik Braun <lars@6xq.net>2019-09-21 11:02:06 +0200
commitcf0c56e14529a47f54daa62e2e6a9ab0e76c6d12 (patch)
tree1d006ad7758aef96dab2402465a9961125a33cf1
parentbdaeaa553c949e4f544f96560ed64b63d18a47b2 (diff)
downloadlulua-cf0c56e14529a47f54daa62e2e6a9ab0e76c6d12.tar.gz
lulua-cf0c56e14529a47f54daa62e2e6a9ab0e76c6d12.tar.bz2
lulua-cf0c56e14529a47f54daa62e2e6a9ab0e76c6d12.zip
Consolidate command line utils
-rw-r--r--doc/Makefile2
-rw-r--r--lulua/layout.py20
-rw-r--r--lulua/plot.py16
-rw-r--r--lulua/stats.py33
-rw-r--r--setup.py8
5 files changed, 47 insertions, 32 deletions
diff --git a/doc/Makefile b/doc/Makefile
index dab823a..037a78f 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -1,7 +1,7 @@
all: ar-lulua.xmodmap ar-lulua.svg
#letterfreq.json: ../stats.pickle
-# lulua-plot -l ar-lulua letterfreq < $< > $@
+# lulua-analyze -l ar-lulua letterfreq < $< > $@
ar-lulua.xmodmap:
lulua-render xmodmap -l ar-lulua $@
diff --git a/lulua/layout.py b/lulua/layout.py
index 05a6083..5e021fe 100644
--- a/lulua/layout.py
+++ b/lulua/layout.py
@@ -18,7 +18,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-import sys, re, unicodedata, copy
+import sys, re, unicodedata, copy, argparse, logging
from enum import IntEnum, unique
from collections import defaultdict, namedtuple
from itertools import chain
@@ -343,9 +343,21 @@ class GenericLayout:
defaultLayouts = YamlLoader ('data/layouts', GenericLayout.deserialize)
-def importKlc ():
- with open (sys.argv[1], 'r', encoding='utf16') as fd:
- layers, layerSwitches = Layout.fromKlc (fd)
+def importKlc (args):
+ with open (args.input, 'r', encoding='utf16') as fd:
+ layers, layerSwitches = GenericLayout.fromKlc (fd)
data = {'name': None, 'layout': [{'layer': l, 'modifier': [list (x) for x in layerSwitches[i]]} for i, l in enumerate (layers)]}
yaml.dump (data, sys.stdout)
+def importFrom ():
+ parser = argparse.ArgumentParser(description='Import keyboard layouts.')
+ parser.add_argument('input', metavar='FILE', help='Input file')
+ subparsers = parser.add_subparsers()
+ sp = subparsers.add_parser('klc', help='Import from Microsoft Keyboard Layout creator')
+ sp.set_defaults (func=importKlc)
+
+ logging.basicConfig (level=logging.INFO)
+ args = parser.parse_args()
+
+ return args.func (args)
+
diff --git a/lulua/plot.py b/lulua/plot.py
index 2cd7759..2a7d678 100644
--- a/lulua/plot.py
+++ b/lulua/plot.py
@@ -128,19 +128,3 @@ def triadfreq (args):
return 0
-def plot ():
- plotKinds = {
- 'letterfreq': letterfreq,
- 'triadfreq': triadfreq,
- }
-
- parser = argparse.ArgumentParser (description='Plot stuff')
- parser.add_argument('-l', '--layout', metavar='LAYOUT', help='Keyboard layout name')
- parser.add_argument('kind', type=lambda x: plotKinds[x])
-
- args = parser.parse_args()
-
- logging.basicConfig (level=logging.INFO)
-
- return args.kind (args)
-
diff --git a/lulua/stats.py b/lulua/stats.py
index 3efa1c0..fc2b202 100644
--- a/lulua/stats.py
+++ b/lulua/stats.py
@@ -18,7 +18,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-import sys, operator, pickle
+import sys, operator, pickle, argparse, logging
from operator import itemgetter
from itertools import chain, groupby, product
from collections import defaultdict
@@ -27,6 +27,7 @@ from .layout import *
from .keyboard import defaultKeyboards
from .writer import SkipEvent, Writer
from .carpalx import Carpalx, model01 as cmodel01
+from .plot import letterfreq, triadfreq
def updateDictOp (a, b, op):
""" Update dict a by adding items from b using op """
@@ -164,8 +165,8 @@ def unpickleAll (fd):
except EOFError:
break
-def combine ():
- keyboard = defaultKeyboards['ibmpc105']
+def combine (args):
+ keyboard = defaultKeyboards[args.keyboard]
layout = defaultLayouts['null'].specialize (keyboard)
w = Writer (layout)
combined = dict ((cls.name, cls(w)) for cls in allStats)
@@ -174,11 +175,11 @@ def combine ():
combined[s.name].update (r[s.name])
pickle.dump (combined, sys.stdout.buffer, pickle.HIGHEST_PROTOCOL)
-def pretty ():
+def pretty (args):
stats = pickle.load (sys.stdin.buffer)
- keyboard = defaultKeyboards['ibmpc105']
- layout = defaultLayouts[sys.argv[1]].specialize (keyboard)
+ keyboard = defaultKeyboards[args.keyboard]
+ layout = defaultLayouts[args.layout].specialize (keyboard)
writer = Writer (layout)
buttonPresses = sum (stats['simple'].buttons.values ())
@@ -220,3 +221,23 @@ def pretty ():
effort.addTriads (stats['triads'].triads)
print ('total effort (carpalx)', effort.effort)
+def main ():
+ parser = argparse.ArgumentParser(description='Process statistics files.')
+ parser.add_argument('-l', '--layout', metavar='LAYOUT', help='Keyboard layout name')
+ parser.add_argument('-k', '--keyboard', metavar='KEYBOARD',
+ default='ibmpc105', help='Physical keyboard name')
+ subparsers = parser.add_subparsers()
+ sp = subparsers.add_parser('pretty')
+ sp.set_defaults (func=pretty)
+ sp = subparsers.add_parser('combine')
+ sp.set_defaults (func=combine)
+ sp = subparsers.add_parser('letterfreq')
+ sp.set_defaults (func=letterfreq)
+ sp = subparsers.add_parser('triadfreq')
+ sp.set_defaults (func=triadfreq)
+
+ logging.basicConfig (level=logging.INFO)
+ args = parser.parse_args()
+
+ return args.func (args)
+
diff --git a/setup.py b/setup.py
index f0c3d2d..56c64a6 100644
--- a/setup.py
+++ b/setup.py
@@ -28,7 +28,7 @@ setup(
#url='https://6xq.net/crocoite/',
packages=['lulua'],
license='LICENSE.txt',
- description='The monkey.',
+ description='Keyboard layout optimization',
long_description=open('README.rst').read(),
long_description_content_type='text/x-rst',
install_requires=[
@@ -41,11 +41,9 @@ setup(
],
entry_points={
'console_scripts': [
- 'lulua-combine-stats = lulua.stats:combine',
- 'lulua-pretty-stats = lulua.stats:pretty',
+ 'lulua-analyze = lulua.stats:main',
'lulua-render = lulua.render:render',
- 'lulua-import-klc = lulua.model:importKlc',
- 'lulua-plot = lulua.plot:plot',
+ 'lulua-import = lulua.layout:importFrom',
'lulua-optimize = lulua.optimize:optimize',
'lulua-write = lulua.text:write',
],