From b5d28527086e2c505cc29d2117c5756319690402 Mon Sep 17 00:00:00 2001 From: ysakamoto Date: Fri, 6 Mar 2015 03:45:26 -0600 Subject: [PATCH 1/4] help message command added --- rtv/main.py | 1 + rtv/submission.py | 5 ++++- rtv/subreddit.py | 7 +++++-- rtv/utils.py | 47 ++++++++++++++++++++++++++++++++++++++++------- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/rtv/main.py b/rtv/main.py index 8f7ccd5..701b1d4 100644 --- a/rtv/main.py +++ b/rtv/main.py @@ -31,6 +31,7 @@ Global Commands `q` : Quit the program. `o` : Open the url of the selected item in the default web browser. + `?` : Show the help message. Subreddit Mode Right or `Enter` : Open the currently selected submission in a new page. diff --git a/rtv/submission.py b/rtv/submission.py index 240e438..67863a1 100644 --- a/rtv/submission.py +++ b/rtv/submission.py @@ -6,7 +6,7 @@ import six from .content import SubmissionContent from .page import BasePage -from .utils import LoadScreen, Color, ESCAPE +from .utils import LoadScreen, Color, ESCAPE, display_message, help_msg class SubmissionPage(BasePage): @@ -54,6 +54,9 @@ class SubmissionPage(BasePage): elif cmd in (ESCAPE, curses.KEY_LEFT, ord('h')): break + elif cmd == ord('?'): + display_message(self.stdscr, help_msg) + elif cmd == ord('q'): sys.exit() diff --git a/rtv/subreddit.py b/rtv/subreddit.py index 59cc3f2..a701a97 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -7,7 +7,7 @@ from .errors import SubredditNameError from .page import BasePage from .submission import SubmissionPage from .content import SubredditContent -from .utils import LoadScreen, text_input, display_message, Color, ESCAPE +from .utils import LoadScreen, text_input, display_message, Color, ESCAPE, help_msg class SubredditPage(BasePage): @@ -52,6 +52,9 @@ class SubredditPage(BasePage): elif cmd == curses.KEY_RESIZE: self.draw() + elif cmd == ord('?'): + display_message(self.stdscr, help_msg) + elif cmd == ord('q'): sys.exit() @@ -132,4 +135,4 @@ class SubredditPage(BasePage): text = '{author}'.format(**data) win.addnstr(row, 1, text, n_cols-1, curses.A_BOLD) text = ' {subreddit}'.format(**data) - win.addnstr(text, n_cols - win.getyx()[1], Color.YELLOW) \ No newline at end of file + win.addnstr(text, n_cols - win.getyx()[1], Color.YELLOW) diff --git a/rtv/utils.py b/rtv/utils.py index 94b6045..f9c15cf 100644 --- a/rtv/utils.py +++ b/rtv/utils.py @@ -16,6 +16,27 @@ from .errors import EscapePressed ESCAPE = 27 +help_msg = """Global Commands + Arrow Keys or `hjkl`: Navigations. + `r` or `F5` : Refresh the current page. + `q` : Quit the program. + `o` : Open the url of the selected item in the default web + browser. + `?` : Show this help message. + +Subreddit Mode + Right or `Enter` : Open the currently selected submission in a new page. + `/` : Open a prompt to switch to a different subreddit. + +Submission Mode + Right or `Enter` : Toggle the currently selected comment between hidden + and visible. + Left : Exit the submission page and return to the subreddit. +""" + +help_msg = help_msg.split("\n") + + class Color(object): COLORS = { @@ -118,17 +139,29 @@ def text_input(window): def display_message(stdscr, message): "Display a message box at the center of the screen and wait for a keypress" - message_len = len(message) n_rows, n_cols = stdscr.getmaxyx() - s_row = (n_rows - 2) // 2 - s_col = (n_cols - message_len - 1) // 2 - window = stdscr.derwin(3, message_len+2, s_row, s_col) + + if type(message) == list: + message_len = max(map(len, message)) + s_row = (n_rows - len(message)) // 2 + s_col = (n_cols - message_len - 1) // 2 + window = stdscr.derwin(len(message) + 2, message_len + 3, s_row, s_col) + else: + message_len = len(message) + s_row = (n_rows - 2) // 2 + s_col = (n_cols - message_len - 1) // 2 + window = stdscr.derwin(10, 3, s_row, s_col) window.erase() window.border() - window.addstr(1, 1, message) - window.refresh() + if type(message) == list: + for i in range(len(message)): + window.addstr(i + 1, 1, message[i]) + else: + window.addstr(1, 1, message) + + window.refresh() stdscr.getch() window.clear() @@ -250,4 +283,4 @@ def curses_session(): stdscr.keypad(0) curses.echo() curses.nocbreak() - curses.endwin() \ No newline at end of file + curses.endwin() From 455f742a275c4c3d90e3f73a6030e900bfd8303c Mon Sep 17 00:00:00 2001 From: ysakamoto Date: Fri, 6 Mar 2015 03:54:49 -0600 Subject: [PATCH 2/4] Redraw after the help message box is gone. --- rtv/submission.py | 3 ++- rtv/subreddit.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/rtv/submission.py b/rtv/submission.py index 67863a1..2956973 100644 --- a/rtv/submission.py +++ b/rtv/submission.py @@ -56,7 +56,8 @@ class SubmissionPage(BasePage): elif cmd == ord('?'): display_message(self.stdscr, help_msg) - + self.draw() + elif cmd == ord('q'): sys.exit() diff --git a/rtv/subreddit.py b/rtv/subreddit.py index a701a97..7512af4 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -54,6 +54,7 @@ class SubredditPage(BasePage): elif cmd == ord('?'): display_message(self.stdscr, help_msg) + self.draw() elif cmd == ord('q'): sys.exit() From 3808c65060611bb96bfa3dc3bc306731192c8b2d Mon Sep 17 00:00:00 2001 From: ysakamoto Date: Fri, 6 Mar 2015 14:35:53 -0600 Subject: [PATCH 3/4] display_message simplified --- rtv/subreddit.py | 2 +- rtv/utils.py | 22 +++++++--------------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/rtv/subreddit.py b/rtv/subreddit.py index 7512af4..0613a58 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -71,7 +71,7 @@ class SubredditPage(BasePage): self.reddit, name, self.loader) except (SubredditNameError, HTTPError): - display_message(self.stdscr, 'Invalid Subreddit') + display_message(self.stdscr, ['Invalid Subreddit']) else: self.nav.page_index, self.nav.cursor_index = 0, 0 diff --git a/rtv/utils.py b/rtv/utils.py index f9c15cf..1e1c11d 100644 --- a/rtv/utils.py +++ b/rtv/utils.py @@ -141,25 +141,17 @@ def display_message(stdscr, message): n_rows, n_cols = stdscr.getmaxyx() - if type(message) == list: - message_len = max(map(len, message)) - s_row = (n_rows - len(message)) // 2 - s_col = (n_cols - message_len - 1) // 2 - window = stdscr.derwin(len(message) + 2, message_len + 3, s_row, s_col) - else: - message_len = len(message) - s_row = (n_rows - 2) // 2 - s_col = (n_cols - message_len - 1) // 2 - window = stdscr.derwin(10, 3, s_row, s_col) + box_width = max(map(len, message)) + box_height = len(message) + s_row = (n_rows - box_height) // 2 + s_col = (n_cols - box_width - 1) // 2 + window = stdscr.derwin(box_height + 2, box_width + 3, s_row, s_col) window.erase() window.border() - if type(message) == list: - for i in range(len(message)): - window.addstr(i + 1, 1, message[i]) - else: - window.addstr(1, 1, message) + for i in range(box_height): + window.addstr(i + 1, 1, message[i]) window.refresh() stdscr.getch() From 09ed21b75c7bf0291b163b8a72c5da62272b2f12 Mon Sep 17 00:00:00 2001 From: ysakamoto Date: Fri, 6 Mar 2015 14:51:05 -0600 Subject: [PATCH 4/4] display_help function added --- rtv/submission.py | 4 ++-- rtv/subreddit.py | 4 ++-- rtv/utils.py | 10 ++++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/rtv/submission.py b/rtv/submission.py index 2956973..c23e637 100644 --- a/rtv/submission.py +++ b/rtv/submission.py @@ -6,7 +6,7 @@ import six from .content import SubmissionContent from .page import BasePage -from .utils import LoadScreen, Color, ESCAPE, display_message, help_msg +from .utils import LoadScreen, Color, ESCAPE, display_help class SubmissionPage(BasePage): @@ -55,7 +55,7 @@ class SubmissionPage(BasePage): break elif cmd == ord('?'): - display_message(self.stdscr, help_msg) + display_help(self.stdscr) self.draw() elif cmd == ord('q'): diff --git a/rtv/subreddit.py b/rtv/subreddit.py index 0613a58..31bd0d2 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -7,7 +7,7 @@ from .errors import SubredditNameError from .page import BasePage from .submission import SubmissionPage from .content import SubredditContent -from .utils import LoadScreen, text_input, display_message, Color, ESCAPE, help_msg +from .utils import LoadScreen, text_input, display_message, Color, ESCAPE, display_help class SubredditPage(BasePage): @@ -53,7 +53,7 @@ class SubredditPage(BasePage): self.draw() elif cmd == ord('?'): - display_message(self.stdscr, help_msg) + display_help(self.stdscr) self.draw() elif cmd == ord('q'): diff --git a/rtv/utils.py b/rtv/utils.py index 1e1c11d..0eac40e 100644 --- a/rtv/utils.py +++ b/rtv/utils.py @@ -34,8 +34,6 @@ Submission Mode Left : Exit the submission page and return to the subreddit. """ -help_msg = help_msg.split("\n") - class Color(object): @@ -161,6 +159,14 @@ def display_message(stdscr, message): stdscr.refresh() +def display_help(stdscr): + """Display a help message box at the center of the screen and wait for a + keypress""" + + help_msgs = help_msg.split("\n") + display_message(stdscr, help_msgs) + + class LoadScreen(object): def __init__(self, stdscr):