From 740374a09ecc6bd1cd475d50bd3a3815b6f907f6 Mon Sep 17 00:00:00 2001 From: janwilamowski Date: Sun, 20 Dec 2020 15:32:43 +0900 Subject: [PATCH 1/4] added -n flag to open files in new window --- bin/rmate | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bin/rmate b/bin/rmate index dd5150b..a97b576 100755 --- a/bin/rmate +++ b/bin/rmate @@ -161,7 +161,8 @@ class Settings: " TextMate selection strings can be used\n" " -m, --name NAME The display name shown in TextMate\n" " -t, --type TYPE Treat file as having TYPE\n" - " -f, --force Open even if the file is not wratable\n" + " -n, --new Open in a new window (Sublime Text)\n" + " -f, --force Open even if the file is not writable\n" " -v, --verbose Verbose logging messages\n" " -h, --help Show this help and exit\n" " --version Show version and exit\n\n" @@ -179,7 +180,8 @@ class Settings: def parse_cli_options(self): try: - optlist, args = getopt.gnu_getopt(sys.argv[1:], 'hp:wl:m:t:fv', ['host=', 'port=', 'wait', 'no-wait', 'line=', 'name=', 'type=', 'force', 'verbose', 'help', 'version']) + optlist, args = getopt.gnu_getopt(sys.argv[1:], 'hp:wl:m:t:nfv', ['host=', 'port=', 'wait', 'no-wait', 'line=', + 'name=', 'type=', 'new', 'force', 'verbose', 'help', 'version']) except getopt.GetoptError: self.usage() sys.exit(2) @@ -194,6 +196,7 @@ class Settings: elif name in ('-l', '--line'): self.lines.append(value) elif name in ('-m', '--name'): self.names.append(value) elif name in ('-t', '--type'): self.types.append(value) + elif name in ('-n', '--new'): self.new = True elif name in ('-f', '--force'): self.force = True elif name in ('-v', '--verbose'): self.verbose = True @@ -276,6 +279,9 @@ def main(): cmd["data-on-save"] = 'yes' cmd["re-activate"] = 'yes' + if settings.new: + cmd["new"] = 'yes' + settings.new = False cmd["token"] = path if path == '-': cmd.read_stdin() From e4ef26067cb93b29c8303a239880f65679730f7e Mon Sep 17 00:00:00 2001 From: janwilamowski Date: Sun, 20 Dec 2020 15:34:14 +0900 Subject: [PATCH 2/4] added -r flag to open (non-hidden) files in directories --- bin/rmate | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/bin/rmate b/bin/rmate index a97b576..a5399d1 100755 --- a/bin/rmate +++ b/bin/rmate @@ -139,6 +139,7 @@ class Settings: self.types = [] self.files = [] self.tmpFile = None + self.recursive = False self.read_disk_settings() @@ -163,6 +164,7 @@ class Settings: " -t, --type TYPE Treat file as having TYPE\n" " -n, --new Open in a new window (Sublime Text)\n" " -f, --force Open even if the file is not writable\n" + " -r, --recursive Open directories recursively\n" " -v, --verbose Verbose logging messages\n" " -h, --help Show this help and exit\n" " --version Show version and exit\n\n" @@ -180,25 +182,26 @@ class Settings: def parse_cli_options(self): try: - optlist, args = getopt.gnu_getopt(sys.argv[1:], 'hp:wl:m:t:nfv', ['host=', 'port=', 'wait', 'no-wait', 'line=', - 'name=', 'type=', 'new', 'force', 'verbose', 'help', 'version']) + optlist, args = getopt.gnu_getopt(sys.argv[1:], 'hp:wl:m:t:nfrv', ['host=', 'port=', 'wait', 'no-wait', 'line=', + 'name=', 'type=', 'new', 'force', 'recursive', 'verbose', 'help', 'version']) except getopt.GetoptError: self.usage() sys.exit(2) for name, value in optlist: - if name == '--version': print(VERSION_STRING); sys.exit() - elif name in ('-h', '--help'): self.usage(); sys.exit() - elif name == '--host': self.host = value - elif name in ('-p', '--port'): self.port = int(value) - elif name in ('-w', '--wait'): self.wait = True - elif name == '--no-wait': self.wait = False - elif name in ('-l', '--line'): self.lines.append(value) - elif name in ('-m', '--name'): self.names.append(value) - elif name in ('-t', '--type'): self.types.append(value) - elif name in ('-n', '--new'): self.new = True - elif name in ('-f', '--force'): self.force = True - elif name in ('-v', '--verbose'): self.verbose = True + if name == '--version': print(VERSION_STRING); sys.exit() + elif name in ('-h', '--help'): self.usage(); sys.exit() + elif name == '--host': self.host = value + elif name in ('-p', '--port'): self.port = int(value) + elif name in ('-w', '--wait'): self.wait = True + elif name == '--no-wait': self.wait = False + elif name in ('-l', '--line'): self.lines.append(value) + elif name in ('-m', '--name'): self.names.append(value) + elif name in ('-t', '--type'): self.types.append(value) + elif name in ('-n', '--new'): self.new = True + elif name in ('-f', '--force'): self.force = True + elif name in ('-r', '--recursive'): self.recursive = True + elif name in ('-v', '--verbose'): self.verbose = True if '-' in sys.argv[1:] and '-' not in args: args.append('-') self.files = args @@ -259,7 +262,13 @@ def main(): elif path == '-' and sys.stdin.isatty(): sys.stderr.write('Reading from stdin, press ^D to stop\n') elif os.path.isdir(path): - sys.stderr.write("'%s' is a directory!\n" % path) + if settings.recursive: + log("Opening %s recursively" % path) + for (dirpath, dirnames, filenames) in os.walk(path): + settings.files.extend(os.path.join(dirpath, dirname) for dirname in dirnames if dirname[0] != '.') + settings.files.extend(os.path.join(dirpath, filename) for filename in filenames if filename[0] != '.') + else: + sys.stderr.write("'%s' is a directory! Use -r/--recursive to open recursively.\n" % path) continue elif os.path.isfile(path) and not os.access(path, os.W_OK): if settings.force: From 9c8e6ed154548fd6a7017999e216f611a735b2a4 Mon Sep 17 00:00:00 2001 From: janwilamowski Date: Sun, 20 Dec 2020 15:45:41 +0900 Subject: [PATCH 3/4] updated README --- README.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.rst b/README.rst index d2224ca..851266d 100644 --- a/README.rst +++ b/README.rst @@ -71,7 +71,9 @@ You can use ``rmate --help`` to see the usage TextMate selection strings can be used -m, --name NAME The display name shown in TextMate -t, --type TYPE Treat file as having TYPE + -n, --new Open in a new window (Sublime Text) -f, --force Open even if the file is not writable + -r, --recursive Open directories recursively -v, --verbose Verbose logging messages -h, --help Show this help and exit --version Show version and exit From d8d4814b0aa417c0b9a466c4437037adf7708bb1 Mon Sep 17 00:00:00 2001 From: janwilamowski Date: Tue, 22 Dec 2020 17:23:28 +0900 Subject: [PATCH 4/4] basic support for file exclusion lists --- bin/rmate | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/bin/rmate b/bin/rmate index a5399d1..aa17358 100755 --- a/bin/rmate +++ b/bin/rmate @@ -133,11 +133,13 @@ class Settings: self.port = 52698 self.wait = False self.force = False + self.new = False self.verbose = False self.lines = [] self.names = [] self.types = [] self.files = [] + self.ignore = [] self.tmpFile = None self.recursive = False @@ -179,6 +181,7 @@ class Settings: sys.stderr.write('Could not read settings from disk.\n') if config.has_option('NOSECTION', 'host'): self.host = config.get('NOSECTION', 'host') if config.has_option('NOSECTION', 'port'): self.port = config.get('NOSECTION', 'port') + if config.has_option('NOSECTION', 'ignore'): self.ignore = config.get('NOSECTION', 'ignore').split() def parse_cli_options(self): try: @@ -263,9 +266,15 @@ def main(): sys.stderr.write('Reading from stdin, press ^D to stop\n') elif os.path.isdir(path): if settings.recursive: + if any(pattern in path for pattern in settings.ignore): + log("Ignoring folder %s" % path) + continue log("Opening %s recursively" % path) for (dirpath, dirnames, filenames) in os.walk(path): - settings.files.extend(os.path.join(dirpath, dirname) for dirname in dirnames if dirname[0] != '.') + for dirname in dirnames[:]: + # prune search + if any(pattern in dirname for pattern in settings.ignore) or dirname[0] == '.': + dirnames.remove(dirname) settings.files.extend(os.path.join(dirpath, filename) for filename in filenames if filename[0] != '.') else: sys.stderr.write("'%s' is a directory! Use -r/--recursive to open recursively.\n" % path) @@ -276,6 +285,9 @@ def main(): else: sys.stderr.write("File %s is not writable! Use -f/--force to open anyway.\n" % path) continue + elif any(pattern in path for pattern in settings.ignore): + log("Ignoring file %s" % path) + continue cmd = Command("open") if len(settings.names) > idx: cmd['display-name'] = settings.names[idx]