pmacs3/mode/mini.py

74 lines
2.2 KiB
Python

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