Python源码示例:prompt.has_focus()
示例1
def _load_prefix_binding(self):
"""
Load the prefix key binding.
"""
pymux = self.pymux
# Remove previous binding.
if self._prefix_binding:
self.custom_key_bindings.remove_binding(self._prefix_binding)
# Create new Python binding.
@self.custom_key_bindings.add(*self._prefix, filter=
~(HasPrefix(pymux) | has_focus(COMMAND) | has_focus(PROMPT) |
WaitsForConfirmation(pymux)))
def enter_prefix_handler(event):
" Enter prefix mode. "
pymux.get_client_state().has_prefix = True
self._prefix_binding = enter_prefix_handler
示例2
def __init__(self, editor):
def get_formatted_text():
eb = editor.window_arrangement.active_editor_buffer
lineno = eb.buffer.document.cursor_position_row
errors = eb.report_errors
for e in errors:
if e.lineno == lineno:
return e.formatted_text
return []
super(ReportMessageToolbar, self).__init__(
FormattedTextToolbar(get_formatted_text),
filter=~has_focus(editor.command_buffer) & ~is_searching & ~has_focus('system'))
示例3
def add_custom_binding(self, key_name, command, arguments, needs_prefix=False):
"""
Add custom binding (for the "bind-key" command.)
Raises ValueError if the give `key_name` is an invalid name.
:param key_name: Pymux key name, for instance "C-a" or "M-x".
"""
assert isinstance(key_name, six.text_type)
assert isinstance(command, six.text_type)
assert isinstance(arguments, list)
# Unbind previous key.
self.remove_custom_binding(key_name, needs_prefix=needs_prefix)
# Translate the pymux key name into a prompt_toolkit key sequence.
# (Can raise ValueError.)
keys_sequence = pymux_key_to_prompt_toolkit_key_sequence(key_name)
# Create handler and add to Registry.
if needs_prefix:
filter = HasPrefix(self.pymux)
else:
filter = ~HasPrefix(self.pymux)
filter = filter & ~(WaitsForConfirmation(self.pymux) |
has_focus(COMMAND) | has_focus(PROMPT))
def key_handler(event):
" The actual key handler. "
call_command_handler(command, self.pymux, arguments)
self.pymux.get_client_state().has_prefix = False
self.custom_key_bindings.add(*keys_sequence, filter=filter)(key_handler)
# Store key in `custom_bindings` in order to be able to call
# "unbind-key" later on.
k = (needs_prefix, key_name)
self.custom_bindings[k] = CustomBinding(key_handler, command, arguments)
示例4
def __init__(self, editor):
super(CommandLine, self).__init__(
Window(
BufferControl(
buffer=editor.command_buffer,
input_processors=[BeforeInput(':')],
lexer=create_command_lexer()),
height=1),
filter=has_focus(editor.command_buffer))
示例5
def _bufferlist_overlay_visible(editor):
"""
True when the buffer list overlay should be displayed.
(This is when someone starts typing ':b' or ':buffer' in the command line.)
"""
@Condition
def overlay_is_visible():
app = get_app()
text = editor.command_buffer.text.lstrip()
return app.layout.has_focus(editor.command_buffer) and (
any(text.startswith(p) for p in ['b ', 'b! ', 'buffer', 'buffer!']))
return overlay_is_visible
示例6
def __init__(self, editor, editor_buffer):
def get_text():
app = get_app()
insert_mode = app.vi_state.input_mode in (InputMode.INSERT, InputMode.INSERT_MULTIPLE)
replace_mode = app.vi_state.input_mode == InputMode.REPLACE
sel = editor_buffer.buffer.selection_state
temp_navigation = app.vi_state.temporary_navigation_mode
visual_line = sel is not None and sel.type == SelectionType.LINES
visual_block = sel is not None and sel.type == SelectionType.BLOCK
visual_char = sel is not None and sel.type == SelectionType.CHARACTERS
def mode():
if get_app().layout.has_focus(editor_buffer.buffer):
if insert_mode:
if temp_navigation:
return ' -- (insert) --'
elif editor.paste_mode:
return ' -- INSERT (paste)--'
else:
return ' -- INSERT --'
elif replace_mode:
if temp_navigation:
return ' -- (replace) --'
else:
return ' -- REPLACE --'
elif visual_block:
return ' -- VISUAL BLOCK --'
elif visual_line:
return ' -- VISUAL LINE --'
elif visual_char:
return ' -- VISUAL --'
return ' '
def recording():
if app.vi_state.recording_register:
return 'recording '
else:
return ''
return ''.join([
' ',
recording(),
(editor_buffer.location or ''),
(' [New File]' if editor_buffer.is_new else ''),
('*' if editor_buffer.has_unsaved_changes else ''),
(' '),
mode(),
])
super(WindowStatusBar, self).__init__(
get_text,
style='class:toolbar.status')
示例7
def __init__(self, editor, window_arrangement):
self.editor = editor # Back reference to editor.
self.window_arrangement = window_arrangement
# Mapping from (`window_arrangement.Window`, `EditorBuffer`) to a frame
# (Layout instance).
# We keep this as a cache in order to easily reuse the same frames when
# the layout is updated. (We don't want to create new frames on every
# update call, because that way, we would loose some state, like the
# vertical scroll offset.)
self._frames = {}
self._fc = FloatContainer(
content=VSplit([
Window(BufferControl()) # Dummy window
]),
floats=[
Float(xcursor=True, ycursor=True,
content=CompletionsMenu(max_height=12,
scroll_offset=2,
extra_filter=~has_focus(editor.command_buffer))),
Float(content=BufferListOverlay(editor), bottom=1, left=0),
Float(bottom=1, left=0, right=0, height=1,
content=ConditionalContainer(
CompletionsToolbar(),
filter=has_focus(editor.command_buffer) &
~_bufferlist_overlay_visible(editor) &
Condition(lambda: editor.show_wildmenu))),
Float(bottom=1, left=0, right=0, height=1,
content=ValidationToolbar()),
Float(bottom=1, left=0, right=0, height=1,
content=MessageToolbarBar(editor)),
Float(content=WelcomeMessageWindow(editor),
height=WELCOME_MESSAGE_HEIGHT,
width=WELCOME_MESSAGE_WIDTH),
]
)
search_toolbar = SearchToolbar(vi_mode=True, search_buffer=editor.search_buffer)
self.search_control = search_toolbar.control
self.layout = Layout(FloatContainer(
content=HSplit([
TabsToolbar(editor),
self._fc,
CommandLine(editor),
ReportMessageToolbar(editor),
SystemToolbar(),
search_toolbar,
]),
floats=[
Float(right=0, height=1, bottom=0, width=5,
content=SimpleArgToolbar()),
]
))