Example #1
0
    def stream_box_view(self, caption: str='', title: str='') -> None:
        self.set_editor_mode()
        self.to_write_box = None
        self.msg_write_box = ReadlineEdit(multiline=True)
        self.msg_write_box.enable_autocomplete(
            func=self.generic_autocomplete,
            key=keys_for_command('AUTOCOMPLETE').pop(),
            key_reverse=keys_for_command('AUTOCOMPLETE_REVERSE').pop()
        )
        self.stream_write_box = ReadlineEdit(
            caption=u"Stream:  ",
            edit_text=caption
        )
        self.title_write_box = ReadlineEdit(caption=u"Topic:  ",
                                            edit_text=title)

        header_write_box = urwid.Columns([
            urwid.LineBox(
                self.stream_write_box, tlcorner=u'─', tline=u'─', lline=u'',
                trcorner=u'┬', blcorner=u'─', rline=u'│',
                bline=u'─', brcorner=u'┴'
            ),
            urwid.LineBox(
                self.title_write_box, tlcorner=u'─', tline=u'─', lline=u'',
                trcorner=u'─', blcorner=u'─', rline=u'',
                bline=u'─', brcorner=u'─'
            ),
        ])
        write_box = [
            (header_write_box, self.options()),
            (self.msg_write_box, self.options()),
        ]
        self.contents = write_box
Example #2
0
    def stream_box_view(self, button: Any=None, caption: str='',
                        title: str='') -> None:
        self.set_editor_mode()
        self.to_write_box = None
        if caption == '' and button is not None:
            caption = button.caption
        self.msg_write_box = ReadlineEdit(multiline=True)
        self.stream_write_box = ReadlineEdit(
            caption=u"Stream:  ",
            edit_text=caption
        )
        self.title_write_box = ReadlineEdit(caption=u"Topic:  ",
                                            edit_text=title)

        header_write_box = urwid.Columns([
            urwid.LineBox(
                self.stream_write_box, tlcorner=u'─', tline=u'─', lline=u'',
                trcorner=u'┬', blcorner=u'─', rline=u'│',
                bline=u'─', brcorner=u'┴'
            ),
            urwid.LineBox(
                self.title_write_box, tlcorner=u'─', tline=u'─', lline=u'',
                trcorner=u'─', blcorner=u'─', rline=u'',
                bline=u'─', brcorner=u'─'
            ),
        ])
        write_box = [
            (header_write_box, self.options()),
            (self.msg_write_box, self.options()),
        ]
        self.contents = write_box
Example #3
0
 def private_box_view(self, button: Any = None, email: str = '') -> None:
     self.set_editor_mode()
     if email == '' and button is not None:
         email = button.email
     self.to_write_box = ReadlineEdit(u"To: ", edit_text=email)
     self.msg_write_box = ReadlineEdit(u"> ", multiline=True)
     self.contents = [
         (urwid.LineBox(self.to_write_box), self.options()),
         (self.msg_write_box, self.options()),
     ]
     self.focus_position = 1
def test_enable_autocomplete_reverse(start_text, start_pos, edits,
                                     autocomplete_key,
                                     autocomplete_key_reverse):
    source = ["start", "stop", "next"]
    keypress = autocomplete_key if autocomplete_key else "tab"
    keypress_reverse = (autocomplete_key_reverse
                        if autocomplete_key_reverse else "shift tab")

    def compl(text, state):
        tmp = ([c for c in source
                if c and c.startswith(text)] if text else source)
        try:
            return tmp[state]
        except (IndexError, TypeError):
            return None

    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    kwargs = {}
    if autocomplete_key:
        kwargs["key"] = autocomplete_key
    if autocomplete_key_reverse:
        kwargs["key_reverse"] = autocomplete_key_reverse
    edit.enable_autocomplete(compl, **kwargs)

    for direction, expected_text, expected_pos in edits:
        if direction == "forward":
            edit.keypress(None, keypress)
        else:
            edit.keypress(None, keypress_reverse)

        assert edit.edit_text == expected_text
        assert edit.edit_pos == expected_pos
def test_undo(keys, expected_edit_pos, expected_text):
    edit = ReadlineEdit()
    for key in keys:
        edit.keypress(edit.size, key)
    edit.undo()
    assert edit.edit_pos == expected_edit_pos
    assert edit.text == expected_text
Example #6
0
def test_autocomplete_delimiters(
    completion_func_for_source,
    autocomplete_delimiters,
    word_separator,
    final_phrase,
    word1="firstw",
    word2="secondw",
):
    phrase = word_separator.join([word1, word2])
    phrase_length = len(phrase)

    source = [phrase]

    compl = completion_func_for_source(source)

    edit = ReadlineEdit(edit_text=word1, edit_pos=len(word1))
    edit.enable_autocomplete(compl)
    if autocomplete_delimiters is not None:
        edit.set_completer_delims(autocomplete_delimiters)

    # Completion from word1 to phrase
    edit.keypress(edit.size, "tab")
    assert edit.edit_text == phrase
    assert edit.edit_pos == phrase_length

    # Backspace to after word1 + space
    for _ in range(len(word2)):
        edit.keypress(edit.size, "backspace")
    assert edit.edit_text == word1 + word_separator
    assert edit.edit_pos == len(word1) + 1

    # Completion from word1 + word_separator
    edit.keypress(edit.size, "tab")
    assert edit.edit_text == final_phrase
    assert edit.edit_pos == len(final_phrase)
Example #7
0
def test_enable_autocomplete_reverse(
    completion_func_for_source,
    start_text,
    start_pos,
    edits,
    autocomplete_key,
    autocomplete_key_reverse,
):
    source = ["start", "stop", "next"]
    keypress = autocomplete_key if autocomplete_key else "tab"
    keypress_reverse = (autocomplete_key_reverse
                        if autocomplete_key_reverse else "shift tab")

    compl = completion_func_for_source(source)

    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    kwargs = {}
    if autocomplete_key:
        kwargs["key"] = autocomplete_key
    if autocomplete_key_reverse:
        kwargs["key_reverse"] = autocomplete_key_reverse
    edit.enable_autocomplete(compl, **kwargs)

    for direction, expected_text, expected_pos in edits:
        if direction == "forward":
            edit.keypress(None, keypress)
        else:
            edit.keypress(None, keypress_reverse)

        assert edit.edit_text == expected_text
        assert edit.edit_pos == expected_pos
Example #8
0
 def private_box_view(self, button: Any=None, email: str='') -> None:
     self.set_editor_mode()
     if email == '' and button is not None:
         email = button.email
     self.to_write_box = ReadlineEdit(u"To: ", edit_text=email)
     self.msg_write_box = ReadlineEdit(multiline=True)
     to_write_box = urwid.LineBox(
         self.to_write_box, tlcorner=u'─', tline=u'─', lline=u'',
         trcorner=u'─', blcorner=u'─', rline=u'',
         bline=u'─', brcorner=u'─'
     )
     self.contents = [
         (to_write_box, self.options()),
         (self.msg_write_box, self.options()),
     ]
     self.focus_position = 1
Example #9
0
 def private_box_view(self, button: Any=None, email: str='') -> None:
     self.set_editor_mode()
     if email == '' and button is not None:
         email = button.email
     self.to_write_box = ReadlineEdit(u"To: ", edit_text=email)
     self.msg_write_box = ReadlineEdit(multiline=True)
     self.msg_write_box.enable_autocomplete(
         func=self.generic_autocomplete,
         key=keys_for_command('AUTOCOMPLETE').pop()
     )
     to_write_box = urwid.LineBox(
         self.to_write_box, tlcorner=u'─', tline=u'─', lline=u'',
         trcorner=u'─', blcorner=u'─', rline=u'',
         bline=u'─', brcorner=u'─'
     )
     self.contents = [
         (to_write_box, self.options()),
         (self.msg_write_box, self.options()),
     ]
     self.focus_position = 1
Example #10
0
    def stream_box_view(self,
                        button: Any = None,
                        caption: str = '',
                        title: str = '') -> None:
        self.set_editor_mode()
        self.to_write_box = None
        if caption == '' and button is not None:
            caption = button.caption
        self.msg_write_box = ReadlineEdit(u"> ", multiline=True)
        self.stream_write_box = ReadlineEdit(caption=u"Stream:  ",
                                             edit_text=caption)
        self.title_write_box = ReadlineEdit(caption=u"Title:  ",
                                            edit_text=title)

        header_write_box = urwid.Columns([
            urwid.LineBox(self.stream_write_box),
            urwid.LineBox(self.title_write_box),
        ])
        write_box = [
            (header_write_box, self.options()),
            (self.msg_write_box, self.options()),
        ]
        self.contents = write_box
Example #11
0
 def main_view(self) -> Any:
     self.text_box = ReadlineEdit(u"Search: ")
     # Add some text so that when packing,
     # urwid doesn't hide the widget.
     self.msg_narrow = urwid.Text("DONT HIDE")
     w = urwid.Columns([
         ('pack', self.msg_narrow),
         ('pack', urwid.Text("  ")),
         self.text_box,
     ])
     self.w = urwid.LineBox(
         w, tlcorner=u'', tline=u'', lline=u'',
         trcorner=u'', blcorner=u'─', rline=u'',
         bline=u'─', brcorner=u'─')
     return [self.w]
Example #12
0
def test_enable_autocomplete_clear_state(completion_func_for_source):
    source = ["start", "stop", "next"]

    compl = completion_func_for_source(source)

    edit = ReadlineEdit(edit_text="s", edit_pos=1)
    edit.enable_autocomplete(compl)
    edit.keypress(edit.size, "tab")
    assert edit.edit_text == "start"
    assert edit.edit_pos == 5
    edit.keypress(edit.size, "home")
    edit.keypress(edit.size, "right")
    assert edit.edit_pos == 1
    edit.keypress(edit.size, "tab")
    assert edit.edit_text == "starttart"
    assert edit.edit_pos == 5
Example #13
0
def test_enable_autocomplete(start_text, start_pos, source, positions):
    def compl(text, state):
        tmp = ([c for c in source
                if c and c.startswith(text)] if text else source)
        try:
            return tmp[state]
        except IndexError:
            return None

    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    edit.enable_autocomplete(compl)
    for position in positions:
        expected_text, expected_pos = position
        edit.keypress(None, "tab")
        assert edit.edit_text == expected_text
        assert edit.edit_pos == expected_pos
Example #14
0
 def main_view(self) -> Any:
     search_text = ("Search [" +
                    ", ".join(keys_for_command("SEARCH_MESSAGES")) +
                    "]: ")
     self.text_box = ReadlineEdit(search_text + " ")
     # Add some text so that when packing,
     # urwid doesn't hide the widget.
     self.conversation_focus = urwid.Text(" ")
     self.search_bar = urwid.Columns([
         ('pack', self.conversation_focus),
         ('pack', urwid.Text("  ")),
         self.text_box,
     ])
     self.msg_narrow = urwid.Text("DONT HIDE")
     self.recipient_bar = urwid.LineBox(
         self.msg_narrow, title=u"Current message recipients",
         tline=u'─', lline=u'', trcorner=u'─', tlcorner=u'─',
         blcorner=u'─', rline=u'', bline=u'─', brcorner=u'─')
     return [self.search_bar, self.recipient_bar]
def test_enable_autocomplete_clear_state():
    source = ["start", "stop", "next"]

    def compl(text, state):
        tmp = ([c for c in source
                if c and c.startswith(text)] if text else source)
        try:
            return tmp[state]
        except IndexError:
            return None

    edit = ReadlineEdit(edit_text="s", edit_pos=1)
    edit.enable_autocomplete(compl)
    edit.keypress(edit.size, "tab")
    assert edit.edit_text == "start"
    assert edit.edit_pos == 5
    edit.keypress(edit.size, "home")
    edit.keypress(edit.size, "right")
    assert edit.edit_pos == 1
    edit.keypress(edit.size, "tab")
    assert edit.edit_text == "starttart"
    assert edit.edit_pos == 5
Example #16
0
def test_enable_autocomplete(
    completion_func_for_source,
    start_text,
    start_pos,
    source,
    positions,
    autocomplete_key,
):
    keypress = autocomplete_key if autocomplete_key else "tab"

    compl = completion_func_for_source(source)

    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    kwargs = {}
    if autocomplete_key:
        kwargs["key"] = autocomplete_key
    edit.enable_autocomplete(compl, **kwargs)
    for position in positions:
        expected_text, expected_pos = position
        edit.keypress(None, keypress)
        assert edit.edit_text == expected_text
        assert edit.edit_pos == expected_pos
def test_enable_autocomplete(start_text, start_pos, source, positions,
                             autocomplete_key):
    keypress = autocomplete_key if autocomplete_key else "tab"

    def compl(text, state):
        tmp = ([c for c in source
                if c and c.startswith(text)] if text else source)
        try:
            return tmp[state]
        except (IndexError, TypeError):
            return None

    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    kwargs = {}
    if autocomplete_key:
        kwargs["key"] = autocomplete_key
    edit.enable_autocomplete(compl, **kwargs)
    for position in positions:
        expected_text, expected_pos = position
        edit.keypress(None, keypress)
        assert edit.edit_text == expected_text
        assert edit.edit_pos == expected_pos
Example #18
0
def test_insert_char_at_cursor(text, key, max_char, pos, expected_pos,
                               expected_text):
    edit = ReadlineEdit(edit_text=text, max_char=max_char, edit_pos=pos)
    edit._insert_char_at_cursor(key)
    assert edit.edit_pos == expected_pos
    assert edit.edit_text == expected_text
def test_end_of_line(start_text, start_pos, end_pos):
    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    edit.end_of_line()
    assert edit.edit_pos == end_pos
def test_edit_pos_clamp(set_pos, end_pos):
    edit = ReadlineEdit(edit_text="asd", edit_pos=0)
    assert edit.edit_pos == 0
    edit.edit_pos = set_pos
    assert edit.edit_pos == end_pos
def test_paste(paste_buffer, text, pos, expected_pos, expected_text):
    edit = ReadlineEdit(edit_text=text, edit_pos=pos)
    edit._paste_buffer[:] = paste_buffer
    edit.paste()
    assert edit.edit_pos == expected_pos
    assert edit.edit_text == expected_text
Example #22
0
 def main_view(self) -> Any:
     self.text_box = ReadlineEdit(u"Search: ")
     self.w = urwid.LineBox(self.text_box)
     return [self.w]
def test_transpose(start_text, start_pos, end_text, end_pos):
    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    edit.transpose_chars()
    assert edit.text == end_text
    assert edit.edit_pos == end_pos
def test_kill_word(start_text, start_pos, end_text, end_pos):
    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    edit.kill_word()
    assert edit.text == end_text
    assert edit.edit_pos == end_pos
def test_forward_char(start_text, start_pos, end_pos):
    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    edit.forward_char()
    assert edit.edit_pos == end_pos
def test_forward_kill_line(start_text, start_pos, end_text, end_pos):
    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    edit.forward_kill_line()
    assert edit.text == end_text
    assert edit.edit_pos == end_pos
def test_clear_screen():
    edit = ReadlineEdit(edit_text="line 1\nline 2", edit_pos=4)
    edit.clear_screen()
    assert edit.edit_pos == 0
    assert edit.edit_text == ""
def test_backward_delete_char(start_text, start_pos, end_text, end_pos):
    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    edit.backward_delete_char()
    assert edit.text == end_text
    assert edit.edit_pos == end_pos
def test_backward_word(start_text, start_pos, end_pos):
    edit = ReadlineEdit(edit_text=start_text, edit_pos=start_pos)
    edit.backward_word()
    assert edit.edit_pos == end_pos