from method import Method from mode import Fundamental def use_completion_window(app, s, candidates): if app.completion_window_is_open(): w = app.get_completion_window() if w.buffer._completion != s: app.close_completion_buffer() if app.completion_window_is_open(): w = app.get_completion_window() if w.last_is_visible(): w.goto_beginning() else: w.page_down() elif len(candidates) > 1: app.open_completion_buffer(s, sorted(candidates)) class MiniCallback(Method): def execute(self, w, **vargs): app = w.application b = w.buffer if app.completion_window_is_open(): app.close_completion_buffer() s = b.make_string() app.arg_history[b.queue][-1] = s w.buffer.do_callback() class MiniTabComplete(Method): def execute(self, w, **vargs): app = w.application b = w.buffer if b.tabber is None: w.application.set_error("No tab completion") return s1 = b.make_string() s2, exists, complete = b.tabber.tab_string(s1, w) b.set_data(s2) candidates = b.tabber.get_candidates(s1, w) use_completion_window(app, s2, candidates) class MiniPrevHistory(Method): def execute(self, w, **vargs): b = w.buffer if b.hindex > 0: s = b.make_string() b.app.arg_history[b.queue][b.hindex] = s b.hindex -= 1 s = b.app.arg_history[b.queue][b.hindex] b.set_data(s) class MiniNextHistory(Method): def execute(self, w, **vargs): b = w.buffer if b.hindex < len(b.app.arg_history[b.queue]) - 1: s = b.make_string() b.app.arg_history[b.queue][b.hindex] = s b.hindex += 1 s = b.app.arg_history[b.queue][b.hindex] b.set_data(s) class Mini(Fundamental): name = 'Mini' actions = [MiniCallback, MiniTabComplete, MiniPrevHistory, MiniNextHistory] _bindings = { 'mini-callback': ('RETURN',), 'mini-tab-complete': ('TAB',), 'mini-next-history': ('D_ARROW', 'C-n'), 'mini-prev-history': ('U_ARROW', 'C-p'), } install = Mini.install