From 316ff5a92b1bc0fee1a1ddf946880f1697a35190 Mon Sep 17 00:00:00 2001 From: hut Date: Sat, 23 Jan 2010 06:09:05 +0100 Subject: console: better tab completion for OpenConsole --- TODO | 2 +- ranger/gui/widgets/console.py | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/TODO b/TODO index 8549caba..0c89142b 100644 --- a/TODO +++ b/TODO @@ -28,7 +28,7 @@ General (X) #34 10/01/09 display free disk space (X) #35 10/01/09 display disk usage of files in current directory ( ) #36 10/01/11 help coloring is terribly inefficient - ( ) #37 10/01/13 better tab completion for OpenConsole + (X) #37 10/01/13 better tab completion for OpenConsole ( ) #38 10/01/16 searching in pager (X) #39 10/01/17 flushinput not always good (X) #42 10/01/17 memorize directory for `` when using :cd diff --git a/ranger/gui/widgets/console.py b/ranger/gui/widgets/console.py index b3e49c47..b30b30b0 100644 --- a/ranger/gui/widgets/console.py +++ b/ranger/gui/widgets/console.py @@ -388,15 +388,18 @@ class OpenConsole(ConsoleWithTab): self.close() def _get_tab(self): - # for now, just add " %s" - if ' ' in self.line: - result = self.line - if result and result[-1] != ' ': - result += ' ' - return result + '%s ' - else: + try: + position_of_last_space = self.line.rindex(" ") + except ValueError: return (program + ' ' for program in self.fm.executables \ if program.startswith(self.line)) + if position_of_last_space == len(self.line) - 1: + return self.line + '%s ' + else: + before_word, start_of_word = self.line.rsplit(' ', 1) + return (before_word + ' ' + file.basename \ + for file in self.fm.env.pwd.files \ + if file.basename.startswith(start_of_word)) def _substitute_metachars(self, command): dct = {} -- cgit 1.4.1-2-gfad0