[LyX/master] lyxpaperview.py: no need to limit to year and author

Juergen Spitzmueller spitz at lyx.org
Mon Aug 24 13:13:52 UTC 2020


commit 3e31fad5f6f1629524c105bff66341f4bd96d0ab
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Mon Aug 24 15:38:55 2020 +0200

    lyxpaperview.py: no need to limit to year and author
    
    The script can now take an unlimited number of arguments, which are all
    searched for in the filename. This allows for more flexibility.
---
 lib/scripts/lyxpaperview.py |   35 ++++++++++++++++++++++-------------
 1 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/lib/scripts/lyxpaperview.py b/lib/scripts/lyxpaperview.py
index 2b33434..665d114 100755
--- a/lib/scripts/lyxpaperview.py
+++ b/lib/scripts/lyxpaperview.py
@@ -31,7 +31,9 @@ def error(message):
     exit(1)
 
 def usage(prog_name):
-    msg = "Usage: %s [-v pdfviewer] [-w psviewer] year author"
+    msg = "Usage: %s [-v pdfviewer] [-w psviewer] titletoken-1 [titletoken-2] ... [titletoken-n]\n" \
+          "    Each title token must occur in any position of the filename.\n" \
+          "    You might use quotes to enter multi-word tokens"
     return  msg % prog_name
 
 # Copied from lyxpreview_tools.py
@@ -70,14 +72,18 @@ def find_exe_or_terminate(candidates):
 
     return exe
 
-def find(year, author, path):
+def find(args, path):
     if os.name != 'nt':
         # use locate if possible (faster)
         if find_exe(['locate']):
-            p1 = subprocess.Popen(['locate', '-i', author], stdout=subprocess.PIPE)
-            p2 = subprocess.Popen(['grep', '-Ei', '\.pdf$|\.ps$'], stdin=p1.stdout, stdout=subprocess.PIPE)
-            p3 = subprocess.Popen(['grep', year], stdin=p2.stdout, stdout=subprocess.PIPE)
-            p4 = subprocess.Popen(['head', '-n 2'], stdin=p3.stdout, stdout=subprocess.PIPE)
+            p1 = subprocess.Popen(['locate', '-i', args[0].lower()], stdout=subprocess.PIPE)
+            px = subprocess.Popen(['grep', '-Ei', '\.pdf$|\.ps$'], stdin=p1.stdout, stdout=subprocess.PIPE)
+            for arg in args:
+               if arg == args[0]:
+                   # have this already
+                   continue
+               px = subprocess.Popen(['grep', '-i', arg], stdin=px.stdout, stdout=subprocess.PIPE)
+            p4 = subprocess.Popen(['head', '-n 2'], stdin=px.stdout, stdout=subprocess.PIPE)
             p1.stdout.close()
             output = p4.communicate()
             return output[0].decode("utf8")[:-1]# strip trailing '\n'
@@ -87,8 +93,14 @@ def find(year, author, path):
     for root, dirs, files in os.walk(path):
         for fname in files:
             lfname = fname.lower()
-            if lfname.endswith(('.pdf', '.ps')) and lfname.find(author) != -1 and lfname.find(year) != -1:
-                return os.path.join(root, fname)
+            if lfname.endswith(('.pdf', '.ps')):
+                caught = True
+                for arg in args:
+                    if lfname.find(arg.lower()) == -1:
+                        caught = False
+                        break
+                if caught:
+                    return os.path.join(root, fname)
     return ""
 
 def main(argv):
@@ -103,13 +115,10 @@ def main(argv):
       if o == "-w":
         psviewer = v
     
-    if len(args) != 2:
+    if len(args) < 1:
       error(usage(progname))
 
-    year = args[0]
-    author = args[1]
-
-    result = find(year, author.lower(), path = os.environ["HOME"])
+    result = find(args, path = os.environ["HOME"])
     if result == "":
         message("no document found!")
         return 0


More information about the lyx-cvs mailing list