summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Slenders <jonathan@slenders.be>2016-06-30 14:49:01 +0200
committerJonathan Slenders <jonathan@slenders.be>2016-07-11 22:22:19 +0200
commit8667a694b5d6262c498da99f1115bf53b80accc3 (patch)
tree23103ac6d661bfe3f55e5954e83d037884fb0236
parent6a852f09de1ef28524742c4f37e9c0e180657792 (diff)
Memoized all filters in filters/cli.py.
-rw-r--r--prompt_toolkit/filters/cli.py78
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()'