* Implemented command line options, Gjiten style.
authorUrban Wallasch <urban.wallasch@freenet.de>
Wed, 23 Jun 2021 11:23:42 +0000 (13:23 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Wed, 23 Jun 2021 11:23:42 +0000 (13:23 +0200)
jiten-pai.py
kanjidic.py

index 7660fabf843c80725ebf9cdee73f02eee9c64f49..a037d23c6695b96f2fbea66cc88cd193bf06def8 100755 (executable)
@@ -35,6 +35,7 @@ import json
 import unicodedata
 import enum
 import base64
+from argparse import ArgumentParser, RawTextHelpFormatter
 from PyQt5.QtCore import *
 from PyQt5.QtWidgets import *
 from PyQt5.QtGui import *
@@ -952,9 +953,27 @@ class prefDialog(QDialog):
 class jpMainWindow(QMainWindow):
     kanji_dlg = None
 
-    def __init__(self, *args, title='', **kwargs):
+    def __init__(self, *args, title='', cl_args=None, **kwargs):
         super().__init__(*args, **kwargs)
         self.init_ui(title)
+        # evaluate command line arguments
+        if cl_args is not None:
+            if cl_args.kanjidic:
+                self.kanjidic()
+            elif cl_args.kanji_lookup:
+                self.kanjidic(cl_args.kanji_lookup)
+            elif cl_args.clip_kanji:
+                self.kanjidic(self.clipboard.text())
+            elif cl_args.word_lookup:
+                self.show()
+                self.search_box.lineEdit().setText(cl_args.word_lookup)
+                self.search()
+            elif cl_args.clip_word:
+                self.show()
+                self.kbd_paste()
+                self.search()
+            else:
+                self.show()
 
     def init_ui(self, title=''):
         jpIcon()
@@ -1169,6 +1188,7 @@ class jpMainWindow(QMainWindow):
 
     def kanjidic_clicked(self, kanji=''):
         if kanji:
+            self.show()
             self.search_box.lineEdit().setText(kanji)
             self.activateWindow()
             self.search()
@@ -1441,16 +1461,29 @@ def dict_lookup(dict_fname, pattern, mode, limit=0):
 ############################################################
 # main function
 
+def _parse_cmdline():
+    parser = ArgumentParser(
+        formatter_class=RawTextHelpFormatter,
+        description='Jiten-pai Japanese dictionary',
+        epilog='\n'
+    )
+    parser.add_argument('-k', '--kanjidic', action='count', help='start with KanjiDic')
+    parser.add_argument('-c', '--clip-kanji', action='count', help='look up kanji from clipboard')
+    parser.add_argument('-l', '--kanji-lookup', metavar='KANJI', help='look up KANJI in kanji dictionary')
+    parser.add_argument('-w', '--word-lookup', metavar='WORD', help='look up WORD in word dictionary')
+    parser.add_argument('-v', '--clip-word', action='count', help='look up word from clipboard')
+    return parser.parse_args()
+
 def main():
     global app
     _load_cfg()
     _vc_load()
+    cl_args = _parse_cmdline()
     # set up window
     os.environ['QT_LOGGING_RULES'] = 'qt5ct.debug=false'
     app = QApplication(sys.argv)
     app.setApplicationName(_JITENPAI_NAME)
-    root = jpMainWindow(title=_JITENPAI_NAME + ' ' + _JITENPAI_VERSION)
-    root.show()
+    root = jpMainWindow(title=_JITENPAI_NAME + ' ' + _JITENPAI_VERSION, cl_args=cl_args)
     die(app.exec_())
 
 # run application
index 7c0a006640da364a445c72a3e2241e233fc8eb32..d461f98291614deb171e21bd9a806ef118ffb432 100755 (executable)
@@ -20,6 +20,7 @@ import sys
 import os
 import re
 import json
+from argparse import ArgumentParser, RawTextHelpFormatter
 from PyQt5.QtCore import *
 from PyQt5.QtWidgets import *
 from PyQt5.QtGui import *
@@ -544,7 +545,7 @@ class kdMainWindow(QDialog):
     dic_ok = True
     radlist = None
 
-    def __init__(self, *args, parent=None, title=_KANJIDIC_NAME + ' ' + _KANJIDIC_VERSION, **kwargs):
+    def __init__(self, *args, parent=None, title=_KANJIDIC_NAME + ' ' + _KANJIDIC_VERSION, cl_args=None, **kwargs):
         super().__init__(*args, **kwargs)
         self._parent = parent
         if parent:
@@ -568,6 +569,12 @@ class kdMainWindow(QDialog):
         if not _kanjidic_load(cfg['kanjidic']):
             self.show_error('Error loading kanjidic!')
             self.dic_ok = False
+        # evaluate command line arguments
+        if cl_args is not None:
+            if cl_args.kanji_lookup:
+                self.show_info(cl_args.kanji_lookup)
+            elif cl_args.clip_kanji:
+                self.show_info(self.clipboard.text())
 
     def init_cfg(self):
         _load_cfg()
@@ -821,16 +828,25 @@ class kdMainWindow(QDialog):
 ############################################################
 # main function
 
+def _parse_cmdline():
+    parser = ArgumentParser(
+        formatter_class=RawTextHelpFormatter,
+        description='Jiten-pai kanji dictionary',
+        epilog='\n'
+    )
+    parser.add_argument('-c', '--clip-kanji', action='count', help='look up kanji from clipboard')
+    parser.add_argument('-l', '--kanji-lookup', metavar='KANJI', help='look up KANJI in kanji dictionary')
+    return parser.parse_args()
+
 def _main():
     global _standalone
     _standalone = True
-    kanji = sys.argv[1] if len(sys.argv) > 1 else ''
+    cl_args = _parse_cmdline()
     os.environ['QT_LOGGING_RULES'] = 'qt5ct.debug=false'
     app = QApplication(sys.argv)
     app.setApplicationName(_KANJIDIC_NAME)
-    root = kdMainWindow()
+    root = kdMainWindow(cl_args=cl_args)
     root.show()
-    root.show_info(kanji)
     sys.exit(app.exec_())
 
 if __name__== "__main__":