From f98bf729886882aaa752fa3d0d76f64979eafba3 Mon Sep 17 00:00:00 2001 From: anki-code Date: Sat, 25 Apr 2020 20:02:52 +0300 Subject: [PATCH] Fix f__ support --- setup.py | 2 +- xontrib/output_search.py | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/setup.py b/setup.py index 8406a46..4fec217 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ setup( name='xontrib-output-search', - version='0.3.0', + version='0.3.1', license='BSD', author='anki', author_email='author@example.com', diff --git a/xontrib/output_search.py b/xontrib/output_search.py index 40ddda1..73ad49f 100644 --- a/xontrib/output_search.py +++ b/xontrib/output_search.py @@ -153,26 +153,29 @@ def _xontrib_output_search_completer(prefix, line, begidx, endidx, ctx): """ Get new arguments from previous command output use Alt+F hotkey or f__ prefix before tab key. """ - if __xonsh__.xontrib_output_search_completion or prefix.startswith(output_search_prefix): + is_output_search_prefix = prefix.startswith(output_search_prefix) + if __xonsh__.xontrib_output_search_completion or is_output_search_prefix: __xonsh__.xontrib_output_search_completion = False current_cmd = {'prefix': prefix, 'line': line, 'begidx': begidx, 'endidx': endidx} prev = __xonsh__.xontrib_output_search_previous_output if 'output' in prev: cmd = prev['cmd'] output = prev['output'] - tokens = _parse(text=output, text_cmd=cmd, substring=prefix, current_cmd=current_cmd) + substring = prefix[len(output_search_prefix):] if is_output_search_prefix else prefix + tokens = _parse(text=output, text_cmd=cmd, substring=substring, current_cmd=current_cmd) if add_previous_cmd_to_output: - tokens = set.union(tokens, _parse(text=cmd, text_cmd=cmd, substring=prefix, current_cmd=current_cmd)) + tokens = set.union(tokens, _parse(text=cmd, text_cmd=cmd, substring=substring, current_cmd=current_cmd)) - if support_special_chars_in_prefix and tokens == set(): + if support_special_chars_in_prefix and tokens == set() and not is_output_search_prefix: sc_pos = prev_special_char_pos(prefix) if sc_pos is not None: prefix_after_char = prefix[sc_pos + 1:] prefix_before_char = prefix[:sc_pos + 1] - tokens = _parse(text=output, text_cmd=cmd, substring=prefix_after_char, current_cmd=current_cmd) - if add_previous_cmd_to_output: - tokens = set.union(tokens, _parse(text=cmd, text_cmd=cmd, substring=prefix, current_cmd=current_cmd)) - tokens = set([prefix_before_char + t for t in tokens]) + if prefix_before_char != output_search_prefix: + tokens = _parse(text=output, text_cmd=cmd, substring=prefix_after_char, current_cmd=current_cmd) + if add_previous_cmd_to_output: + tokens = set.union(tokens, _parse(text=cmd, text_cmd=cmd, substring=prefix, current_cmd=current_cmd)) + tokens = set([prefix_before_char + t for t in tokens]) tokens = tokens if tokens else set([prefix]) return (tokens, len(prefix))