diff options
author | Jonathan Slenders <jonathan@slenders.be> | 2016-06-30 14:49:01 +0200 |
---|---|---|
committer | Jonathan Slenders <jonathan@slenders.be> | 2016-07-11 22:22:19 +0200 |
commit | 8667a694b5d6262c498da99f1115bf53b80accc3 (patch) | |
tree | 23103ac6d661bfe3f55e5954e83d037884fb0236 | |
parent | 6a852f09de1ef28524742c4f37e9c0e180657792 (diff) |
Memoized all filters in filters/cli.py.
-rw-r--r-- | prompt_toolkit/filters/cli.py | 78 |
1 files changed, 75 insertions, 3 deletions
diff --git a/prompt_toolkit/filters/cli.py b/prompt_toolkit/filters/cli.py index dc12b44a..f4486be5 100644 --- a/prompt_toolkit/filters/cli.py +++ b/prompt_toolkit/filters/cli.py @@ -5,6 +5,7 @@ from __future__ import unicode_literals from .base import Filter from prompt_toolkit.enums import EditingMode from prompt_toolkit.key_binding.vi_state import InputMode as ViInputMode +from prompt_toolkit.cache import memoized __all__ = ( 'HasArg', @@ -38,12 +39,18 @@ __all__ = ( ) +@memoized() class HasFocus(Filter): """ Enable when this buffer has the focus. """ def __init__(self, buffer_name): - self.buffer_name = buffer_name + self._buffer_name = buffer_name + + @property + def buffer_name(self): + " The given buffer name. (Read-only) " + return self._buffer_name def __call__(self, cli): return cli.current_buffer_name == self.buffer_name @@ -52,12 +59,18 @@ class HasFocus(Filter): return 'HasFocus(%r)' % self.buffer_name +@memoized() class InFocusStack(Filter): """ Enable when this buffer appears on the focus stack. """ def __init__(self, buffer_name): - self.buffer_name = buffer_name + self._buffer_name = buffer_name + + @property + def buffer_name(self): + " The given buffer name. (Read-only) " + return self._buffer_name def __call__(self, cli): return self.buffer_name in cli.buffers.focus_stack @@ -66,6 +79,7 @@ class InFocusStack(Filter): return 'InFocusStack(%r)' % self.buffer_name +@memoized() class HasSelection(Filter): """ Enable when the current buffer has a selection. @@ -77,6 +91,7 @@ class HasSelection(Filter): return 'HasSelection()' +@memoized() class HasCompletions(Filter): """ Enable when the current buffer has completions. @@ -88,6 +103,7 @@ class HasCompletions(Filter): return 'HasCompletions()' +@memoized() class IsMultiline(Filter): """ Enable in multiline mode. @@ -99,6 +115,7 @@ class IsMultiline(Filter): return 'IsMultiline()' +@memoized() class IsReadOnly(Filter): """ True when the current buffer is read only. @@ -110,6 +127,7 @@ class IsReadOnly(Filter): return 'IsReadOnly()' +@memoized() class HasValidationError(Filter): """ Current buffer has validation error. @@ -121,6 +139,7 @@ class HasValidationError(Filter): return 'HasValidationError()' +@memoized() class HasArg(Filter): """ Enable when the input processor has an 'arg'. @@ -132,6 +151,7 @@ class HasArg(Filter): return 'HasArg()' +@memoized() class HasSearch(Filter): """ Incremental search is active. @@ -143,6 +163,7 @@ class HasSearch(Filter): return 'HasSearch()' +@memoized() class IsReturning(Filter): """ When a return value has been set. @@ -154,6 +175,7 @@ class IsReturning(Filter): return 'IsReturning()' +@memoized() class IsAborting(Filter): """ True when aborting. (E.g. Control-C pressed.) @@ -165,6 +187,7 @@ class IsAborting(Filter): return 'IsAborting()' +@memoized() class IsExiting(Filter): """ True when exiting. (E.g. Control-D pressed.) @@ -176,6 +199,7 @@ class IsExiting(Filter): return 'IsExiting()' +@memoized() class IsDone(Filter): """ True when the CLI is returning, aborting or exiting. @@ -187,6 +211,7 @@ class IsDone(Filter): return 'IsDone()' +@memoized() class RendererHeightIsKnown(Filter): """ Only True when the renderer knows it's real height. @@ -204,12 +229,18 @@ class RendererHeightIsKnown(Filter): return 'RendererHeightIsKnown()' +@memoized() class InEditingMode(Filter): """ Check whether a given editing mode is active. (Vi or Emacs.) """ def __init__(self, editing_mode): - self.editing_mode = editing_mode + self._editing_mode = editing_mode + + @property + def editing_mode(self): + " The given editing mode. (Read-only) " + return self._editing_mode def __call__(self, cli): return cli.editing_mode == self.editing_mode @@ -218,11 +249,16 @@ class InEditingMode(Filter): return 'InEditingMode(%r)' % (self.editing_mode, ) +@memoized() class ViMode(Filter): def __call__(self, cli): return cli.editing_mode == EditingMode.VI + def __repr__(self): + return 'ViMode()' + +@memoized() class ViNavigationMode(Filter): """ Active when the set for Vi navigation key bindings are active. @@ -237,6 +273,11 @@ class ViNavigationMode(Filter): return (cli.vi_state.input_mode == ViInputMode.NAVIGATION or cli.current_buffer.read_only()) + def __repr__(self): + return 'ViNavigationMode()' + + +@memoized() class ViInsertMode(Filter): def __call__(self, cli): if (cli.editing_mode != EditingMode.VI @@ -248,7 +289,11 @@ class ViInsertMode(Filter): return cli.vi_state.input_mode == ViInputMode.INSERT + def __repr__(self): + return 'ViInputMode()' + +@memoized() class ViReplaceMode(Filter): def __call__(self, cli): if (cli.editing_mode != EditingMode.VI @@ -260,7 +305,11 @@ class ViReplaceMode(Filter): return cli.vi_state.input_mode == ViInputMode.REPLACE + def __repr__(self): + return 'ViReplaceMode()' + +@memoized() class ViSelectionMode(Filter): def __call__(self, cli): if cli.editing_mode != EditingMode.VI: @@ -268,7 +317,11 @@ class ViSelectionMode(Filter): return bool(cli.current_buffer.selection_state) + def __repr__(self): + return 'ViSelectionMode()' + +@memoized() class ViWaitingForTextObjectMode(Filter): def __call__(self, cli): if cli.editing_mode != EditingMode.VI: @@ -276,7 +329,11 @@ class ViWaitingForTextObjectMode(Filter): return cli.vi_state.operator_func is not None + def __repr__(self): + return 'ViWaitingForTextObjectMode()' + +@memoized() class ViDigraphMode(Filter): def __call__(self, cli): if cli.editing_mode != EditingMode.VI: @@ -284,13 +341,21 @@ class ViDigraphMode(Filter): return cli.vi_state.waiting_for_digraph + def __repr__(self): + return 'ViDigraphMode()' + +@memoized() class EmacsMode(Filter): " When the Emacs bindings are active. " def __call__(self, cli): return cli.editing_mode == EditingMode.EMACS + def __repr__(self): + return 'EmacsMode()' + +@memoized() class EmacsInsertMode(Filter): def __call__(self, cli): if (cli.editing_mode != EditingMode.EMACS @@ -299,8 +364,15 @@ class EmacsInsertMode(Filter): return False return True + def __repr__(self): + return 'EmacsInsertMode()' + +@memoized() class EmacsSelectionMode(Filter): def __call__(self, cli): return (cli.editing_mode == EditingMode.EMACS and cli.current_buffer.selection_state) + + def __repr__(self): + return 'EmacsSelectionMode()' |