From 4e9c703ce01d467f94e251e7a126ba29bac4b901 Mon Sep 17 00:00:00 2001 From: Ville Rantanen Date: Wed, 30 Jan 2019 10:45:10 +0200 Subject: [PATCH] edit menu file --- files/foldermenu.py | 63 ++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/files/foldermenu.py b/files/foldermenu.py index f17e5aa..e061f11 100755 --- a/files/foldermenu.py +++ b/files/foldermenu.py @@ -1,31 +1,35 @@ #!/usr/bin/env python -import os -import sys -import subprocess -import termios -import tty -import readline import math +import os +import readline +import subprocess +import sys +import termios +import time +import tty + readline.parse_and_bind('tab: complete') readline.parse_and_bind('set editing-mode vi') -MENUFILE='.foldermenu' +MENUFILE = '.foldermenu' DEFAULTFILE = os.path.expanduser(os.path.join('~','.config','foldermenu','default')) -VERSION="0.4" +VERSION = "0.5" +DEBUG = False def setup_options(): ''' Setup the command line options ''' from argparse import ArgumentParser - parser=ArgumentParser(description="Prints folder specific shell commands stored in '"+MENUFILE+ - "' file, and in addition the executables in the current folder. "+ - "Menufile format for each line: 'description:command'. "+ - "If the command ends in '&' it is run in the background. "+ - "If the command ends in '/' it is a folder, and selecting will enter.") - parser.add_argument("-1","--one-shot",action='store_true', dest='once',default=False, - help="Launch only once, then exit") + parser=ArgumentParser(description="Prints folder specific shell commands stored in '" + MENUFILE + + "' file, and in addition the executables in the current folder. " + + "Menufile format for each line: 'description:command'. " + + "If the command ends in '&' it is run in the background. " + + "If the command ends in '/' it is a folder, and selecting will enter. " + + "Extra keyboard shortcuts: / Edit ") + parser.add_argument("-1","--one-shot",action = 'store_true', dest = 'once', default = False, + help = "Launch only once, then exit") parser.add_argument("-b","--no-banner", action='store_false', dest='banner', default=True, help="Do not show banners. Banners are ## starting lines in the file") parser.add_argument("-d","--no-defaults",action='store_false', dest='defaults',default=True, @@ -143,6 +147,7 @@ class entry_collection: self.entries = [] self.dirs = [] self.banner = [] + self.selected = -1 if self.options.defaults: self.read_menu(DEFAULTFILE) self.read_menu() @@ -397,7 +402,7 @@ class entry_collection: for row in formatted: print '|'.join(row) - def launch(self,key): + def launch(self, key): ''' launch the given entry ''' bg = False @@ -476,6 +481,21 @@ class entry_collection: return self.selected = new_value + def edit_menu(self): + subprocess.call( + "vim %s"%( MENUFILE, ), + stderr = subprocess.STDOUT, + shell = True, + executable = "/bin/bash" + ) + self.initialize() + +def debug_code_print(c): + print("- code: %d, str: %s -"%( + c, + str(c) + )) + time.sleep(1) def start_engines(): @@ -498,11 +518,16 @@ def start_engines(): while True: entries.menu() inkey = ord(ch.get()) - #print('-'+str((inkey))+'-') + if DEBUG: + debug_code_print(inkey) if inkey == 27: inkey2 = ord(ch.get()) + if DEBUG: + debug_code_print(inkey2) if inkey2 == 91: inkey3 = ord(ch.get()) + if DEBUG: + debug_code_print(inkey3) if inkey3 == 66: entries.select_move(1) if inkey3 == 65: @@ -532,7 +557,9 @@ def start_engines(): readline.set_startup_hook(None) if inkey == 46: # . entries.flip_mode() - if inkey == 13: + if inkey == 47: # / + entries.edit_menu() + if inkey == 13: # enter inkey = ord(entries.menu_keys[entries.selected]) found, message = entries.is_key(chr(inkey)) if found: