summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>2018-08-17 17:52:25 +0100
committerEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>2018-08-17 18:36:53 +0100
commitd992344812c85fccc013fd9876b12f80198e1ce3 (patch)
treead8bcdec9ca06ea157f1028d583c9be1c189fb42
parentc2dbaba41fc35092a361e8d839b37abfdec12947 (diff)
downloadpoezio-d992344812c85fccc013fd9876b12f80198e1ce3.tar.gz
poezio-d992344812c85fccc013fd9876b12f80198e1ce3.tar.bz2
poezio-d992344812c85fccc013fd9876b12f80198e1ce3.tar.xz
poezio-d992344812c85fccc013fd9876b12f80198e1ce3.zip
windows.inputs: Type almost everything in this module.
-rw-r--r--poezio/windows/funcs.py2
-rw-r--r--poezio/windows/inputs.py128
2 files changed, 66 insertions, 64 deletions
diff --git a/poezio/windows/funcs.py b/poezio/windows/funcs.py
index d118f353..69edace2 100644
--- a/poezio/windows/funcs.py
+++ b/poezio/windows/funcs.py
@@ -10,7 +10,7 @@ DIGITS = string.digits + '-'
def find_first_format_char(text: str,
- chars: Optional[List[str]] = None) -> int:
+ chars: str = None) -> int:
to_find = chars or format_chars
pos = -1
for char in to_find:
diff --git a/poezio/windows/inputs.py b/poezio/windows/inputs.py
index 8ff420fd..b48fe318 100644
--- a/poezio/windows/inputs.py
+++ b/poezio/windows/inputs.py
@@ -5,7 +5,7 @@ Text inputs.
import curses
import logging
import string
-from typing import List
+from typing import List, Dict, Callable, Optional
from poezio import keyboard
from poezio import common
@@ -36,7 +36,7 @@ class Input(Win):
clipboard = '' # A common clipboard for all the inputs, this makes
# it easy cut and paste text between various input
- def __init__(self):
+ def __init__(self) -> None:
self.key_func = {
"KEY_LEFT": self.key_left,
"KEY_RIGHT": self.key_right,
@@ -62,7 +62,7 @@ class Input(Win):
'^?': self.key_backspace,
"M-^?": self.delete_word,
# '^J': self.add_line_break,
- }
+ } # type: Dict[str, Callable]
Win.__init__(self)
self.text = ''
self.pos = 0 # The position of the “cursor” in the text
@@ -72,24 +72,26 @@ class Input(Win):
# screen
self.on_input = DEFAULT_ON_INPUT # callback called on any key pressed
self.color = None # use this color on addstr
+ self.last_completion = None # type: Optional[str]
+ self.hit_list = [] # type: List[str]
- def on_delete(self):
+ def on_delete(self) -> None:
"""
Remove all references kept to a tab, so that the tab
can be garbage collected
"""
del self.key_func
- def set_color(self, color):
+ def set_color(self, color) -> None:
self.color = color
self.rewrite_text()
- def is_empty(self):
+ def is_empty(self) -> bool:
if self.text:
return False
return True
- def is_cursor_at_end(self):
+ def is_cursor_at_end(self) -> bool:
"""
Whether or not the cursor is at the end of the text.
"""
@@ -98,7 +100,7 @@ class Input(Win):
return True
return False
- def jump_word_left(self):
+ def jump_word_left(self) -> bool:
"""
Move the cursor one word to the left
"""
@@ -111,7 +113,7 @@ class Input(Win):
self.key_left()
return True
- def jump_word_right(self):
+ def jump_word_right(self) -> bool:
"""
Move the cursor one word to the right
"""
@@ -125,7 +127,7 @@ class Input(Win):
self.key_right()
return True
- def delete_word(self):
+ def delete_word(self) -> bool:
"""
Delete the word just before the cursor
"""
@@ -136,7 +138,7 @@ class Input(Win):
self.key_backspace()
return True
- def delete_next_word(self):
+ def delete_next_word(self) -> bool:
"""
Delete the word just after the cursor
"""
@@ -148,7 +150,7 @@ class Input(Win):
self.key_dc()
return True
- def delete_end_of_line(self):
+ def delete_end_of_line(self) -> bool:
"""
Cut the text from cursor to the end of line
"""
@@ -159,7 +161,7 @@ class Input(Win):
self.key_end()
return True
- def delete_beginning_of_line(self):
+ def delete_beginning_of_line(self) -> bool:
"""
Cut the text from cursor to the beginning of line
"""
@@ -170,7 +172,7 @@ class Input(Win):
self.key_home()
return True
- def paste_clipboard(self):
+ def paste_clipboard(self) -> bool:
"""
Insert what is in the clipboard at the cursor position
"""
@@ -181,7 +183,7 @@ class Input(Win):
self.rewrite_text()
return True
- def key_dc(self):
+ def key_dc(self) -> bool:
"""
delete char just after the cursor
"""
@@ -192,7 +194,7 @@ class Input(Win):
self.rewrite_text()
return True
- def key_home(self):
+ def key_home(self) -> bool:
"""
Go to the beginning of line
"""
@@ -201,7 +203,7 @@ class Input(Win):
self.rewrite_text()
return True
- def key_end(self, reset=False):
+ def key_end(self, reset: bool = False) -> bool:
"""
Go to the end of line
"""
@@ -212,7 +214,7 @@ class Input(Win):
self.rewrite_text()
return True
- def key_left(self, jump=True, reset=True):
+ def key_left(self, jump: bool = True, reset: bool = True) -> bool:
"""
Move the cursor one char to the left
"""
@@ -225,7 +227,7 @@ class Input(Win):
self.rewrite_text()
return True
- def key_right(self, jump=True, reset=True):
+ def key_right(self, jump: bool = True, reset: bool = True) -> bool:
"""
Move the cursor one char to the right
"""
@@ -238,7 +240,7 @@ class Input(Win):
self.rewrite_text()
return True
- def key_backspace(self, reset=True):
+ def key_backspace(self, reset: bool = True) -> bool:
"""
Delete the char just before the cursor
"""
@@ -249,7 +251,7 @@ class Input(Win):
self.key_dc()
return True
- def auto_completion(self, word_list, add_after='', quotify=True):
+ def auto_completion(self, word_list: List[str], add_after: str = '', quotify: bool = True) -> bool:
"""
Complete the input, from a list of words
if add_after is None, we use the value defined in completion
@@ -263,11 +265,11 @@ class Input(Win):
return True
def new_completion(self,
- word_list,
- argument_position=-1,
- add_after='',
- quotify=True,
- override=False):
+ word_list: List[str],
+ argument_position: int = -1,
+ add_after: str = '',
+ quotify: bool = True,
+ override: bool = False) -> bool:
"""
Complete the argument at position ``argument_postion`` in the input.
If ``quotify`` is ``True``, then the completion will operate on block of words
@@ -293,11 +295,11 @@ class Input(Win):
return True
def _new_completion_args(self,
- word_list,
- argument_position=-1,
- add_after='',
- quoted=True,
- override=False):
+ word_list: List[str],
+ argument_position: int = -1,
+ add_after: str = '',
+ quoted: bool = True,
+ override: bool = False) -> None:
"""
Case for completing arguments with position ≠ 0
"""
@@ -353,7 +355,7 @@ class Input(Win):
self.text = words[0] + ' ' + ' '.join(words[1:])
self.pos = new_pos
- def _new_completion_first(self, word_list):
+ def _new_completion_first(self, word_list: List[str]) -> None:
"""
Special case of completing the command itself:
we don’t want to change anything to the input doing that
@@ -379,7 +381,7 @@ class Input(Win):
self.text = self.hit_list[0] + follow
self.pos = len(self.hit_list[0])
- def get_argument_position(self, quoted=True):
+ def get_argument_position(self, quoted: bool = True) -> int:
"""
Get the argument number at the current position
"""
@@ -391,14 +393,14 @@ class Input(Win):
val = common.find_argument(pos, text, quoted=quoted) + 1
return val
- def reset_completion(self):
+ def reset_completion(self) -> None:
"""
Reset the completion list (called on ALL keys except tab)
"""
self.hit_list = []
self.last_completion = None
- def normal_completion(self, word_list, after):
+ def normal_completion(self, word_list: List[str], after: str) -> None:
"""
Normal completion
"""
@@ -444,7 +446,7 @@ class Input(Win):
self.rewrite_text()
self.last_completion = hit
- def do_command(self, key, reset=True, raw=False):
+ def do_command(self, key, reset: bool = True, raw: bool = False) -> bool:
if key in self.key_func:
res = self.key_func[key]()
if not raw and self.on_input is not DEFAULT_ON_INPUT:
@@ -464,19 +466,19 @@ class Input(Win):
return True
- def add_line_break(self):
+ def add_line_break(self) -> None:
"""
Add a (real) \n to the line
"""
self.do_command('\n')
- def get_text(self):
+ def get_text(self) -> str:
"""
Return the text entered so far
"""
return self.text
- def _addstr_colored_lite(self, text, y=None, x=None):
+ def _addstr_colored_lite(self, text: str, y: Optional[int] = None, x: Optional[int] = None) -> None:
"""
Just like addstr_colored, with the single-char attributes
(\x0E to \x19 instead of \x19 + attr). We do not use any }
@@ -510,7 +512,7 @@ class Input(Win):
format_char = find_first_format_char(text, chars)
self.addstr(text)
- def rewrite_text(self):
+ def rewrite_text(self) -> None:
"""
Refresh the line onscreen, but first, always adjust the
view_pos. Also, each FORMAT_CHAR+attr_char count only take
@@ -539,7 +541,7 @@ class Input(Win):
curses.curs_set(1)
self._refresh()
- def adjust_view_pos(self):
+ def adjust_view_pos(self) -> None:
"""
Adjust the position of the View, if needed (for example if the
cursor moved and would now be out of the view, we adapt the
@@ -564,16 +566,16 @@ class Input(Win):
if poopt.wcswidth(self.text) < self.width:
self.view_pos = 0
- def refresh(self):
+ def refresh(self) -> None:
log.debug('Refresh: %s', self.__class__.__name__)
self.rewrite_text()
- def clear_text(self):
+ def clear_text(self) -> None:
self.text = ''
self.pos = 0
self.rewrite_text()
- def key_enter(self):
+ def key_enter(self) -> Optional[str]:
txt = self.get_text()
self.clear_text()
return txt
@@ -586,7 +588,7 @@ class HistoryInput(Input):
"""
history = [] # type: List[str]
- def __init__(self):
+ def __init__(self) -> None:
Input.__init__(self)
self.help_message = ''
self.histo_pos = -1
@@ -596,13 +598,13 @@ class HistoryInput(Input):
if config.get('separate_history'):
self.history = [] # type: List[str]
- def toggle_search(self):
+ def toggle_search(self) -> None:
if self.help_message:
return
self.search = not self.search
self.refresh()
- def update_completed(self):
+ def update_completed(self) -> None:
"""
Find a match for the current text
"""
@@ -614,7 +616,7 @@ class HistoryInput(Input):
return
self.current_completed = ''
- def history_enter(self):
+ def history_enter(self) -> bool:
"""
Enter was pressed, set the text to the
current completion and disable history
@@ -630,7 +632,7 @@ class HistoryInput(Input):
self.refresh()
return False
- def key_up(self):
+ def key_up(self) -> bool:
"""
Get the previous line in the history
"""
@@ -646,7 +648,7 @@ class HistoryInput(Input):
self.key_end()
return True
- def key_down(self):
+ def key_down(self) -> bool:
"""
Get the next line in the history
"""
@@ -673,16 +675,15 @@ class MessageInput(HistoryInput):
# The history is common to all MessageInput
history = [] # type: List[str]
- def __init__(self):
+ def __init__(self) -> None:
HistoryInput.__init__(self)
- self.last_completion = None
self.key_func["KEY_UP"] = self.key_up
self.key_func["M-A"] = self.key_up
self.key_func["KEY_DOWN"] = self.key_down
self.key_func["M-B"] = self.key_down
self.key_func['^C'] = self.enter_attrib
- def enter_attrib(self):
+ def enter_attrib(self) -> None:
"""
Read one more char (c), add the corresponding char from formats_char to the text string
"""
@@ -695,9 +696,9 @@ class MessageInput(HistoryInput):
keyboard.continuation_keys_callback = cb
- def key_enter(self):
+ def key_enter(self) -> Optional[str]:
if self.history_enter():
- return
+ return None
txt = self.get_text()
if len(txt) != 0:
@@ -720,11 +721,11 @@ class CommandInput(HistoryInput):
"""
history = [] # type: List[str]
- def __init__(self, help_message, on_abort, on_success, on_input=None):
+ def __init__(self, help_message: str, on_abort, on_success, on_input=None) -> None:
HistoryInput.__init__(self)
self.on_abort = on_abort
self.on_success = on_success
- if on_input:
+ if on_input is None:
self.on_input = on_input
else:
self.on_input = DEFAULT_ON_INPUT
@@ -737,13 +738,13 @@ class CommandInput(HistoryInput):
self.key_func["KEY_DOWN"] = self.key_down
self.key_func["M-B"] = self.key_down
- def do_command(self, key, reset=True, raw=False):
+ def do_command(self, key, reset: bool = True, raw: bool = False) -> bool:
res = Input.do_command(self, key, reset=reset, raw=raw)
if self.on_input is not DEFAULT_ON_INPUT:
self.on_input(self.get_text())
return res
- def disable_history(self):
+ def disable_history(self) -> None:
"""
Disable the history (up/down) keys
"""
@@ -753,10 +754,10 @@ class CommandInput(HistoryInput):
del self.key_func['KEY_DOWN']
@property
- def history_disabled(self):
+ def history_disabled(self) -> bool:
return 'KEY_UP' not in self.key_func and 'KEY_DOWN' not in self.key_func
- def success(self):
+ def success(self) -> bool:
"""
call the success callback, passing the text as argument
"""
@@ -773,7 +774,7 @@ class CommandInput(HistoryInput):
self.on_input = DEFAULT_ON_INPUT
return self.on_abort(self.get_text())
- def on_delete(self):
+ def on_delete(self) -> None:
"""
SERIOUSLY BIG WTF.
@@ -789,10 +790,11 @@ class CommandInput(HistoryInput):
self.on_input = DEFAULT_ON_INPUT
self.key_func.clear()
- def key_enter(self):
+ def key_enter(self) -> Optional[str]:
txt = self.get_text()
if len(txt) != 0:
if not self.history or self.history[0] != txt:
# add the message to history, but avoid duplicates
self.history.insert(0, txt)
self.histo_pos = -1
+ return None