Open webbrowser in subprocess to redirect stdout.
This commit is contained in:
@@ -6,7 +6,7 @@ import six
|
|||||||
|
|
||||||
from .content import SubmissionContent
|
from .content import SubmissionContent
|
||||||
from .page import BasePage
|
from .page import BasePage
|
||||||
from .utils import LoadScreen, Color, ESCAPE, display_help
|
from .utils import LoadScreen, Color, ESCAPE, display_help, open_new_tab
|
||||||
|
|
||||||
class SubmissionPage(BasePage):
|
class SubmissionPage(BasePage):
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ class SubmissionPage(BasePage):
|
|||||||
# Always open the page for the submission
|
# Always open the page for the submission
|
||||||
# May want to expand at some point to open comment permalinks
|
# May want to expand at some point to open comment permalinks
|
||||||
url = self.content.get(-1)['permalink']
|
url = self.content.get(-1)['permalink']
|
||||||
webbrowser.open_new_tab(url)
|
open_new_tab(url)
|
||||||
|
|
||||||
def draw_item(self, win, data, inverted=False):
|
def draw_item(self, win, data, inverted=False):
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import curses
|
import curses
|
||||||
import sys
|
import sys
|
||||||
import webbrowser
|
|
||||||
|
|
||||||
from requests.exceptions import HTTPError
|
from requests.exceptions import HTTPError
|
||||||
|
|
||||||
@@ -8,7 +7,8 @@ from .errors import SubredditNameError
|
|||||||
from .page import BasePage
|
from .page import BasePage
|
||||||
from .submission import SubmissionPage
|
from .submission import SubmissionPage
|
||||||
from .content import SubredditContent
|
from .content import SubredditContent
|
||||||
from .utils import LoadScreen, Color, text_input, display_message, display_help
|
from .utils import (LoadScreen, Color, text_input, display_message,
|
||||||
|
display_help, open_new_tab)
|
||||||
|
|
||||||
|
|
||||||
# Used to keep track of browsing history across the current session
|
# Used to keep track of browsing history across the current session
|
||||||
@@ -109,11 +109,11 @@ class SubredditPage(BasePage):
|
|||||||
|
|
||||||
def open_link(self):
|
def open_link(self):
|
||||||
|
|
||||||
url_full = self.content.get(self.nav.absolute_index)['url_full']
|
url = self.content.get(self.nav.absolute_index)['url_full']
|
||||||
webbrowser.open_new_tab(url_full)
|
open_new_tab(url)
|
||||||
|
|
||||||
global _opened_links
|
global _opened_links
|
||||||
_opened_links.add(url_full)
|
_opened_links.add(url)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def draw_item(win, data, inverted=False):
|
def draw_item(win, data, inverted=False):
|
||||||
|
|||||||
16
rtv/utils.py
16
rtv/utils.py
@@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import subprocess
|
||||||
import curses
|
import curses
|
||||||
import time
|
import time
|
||||||
import threading
|
import threading
|
||||||
@@ -116,7 +117,6 @@ def text_input(window):
|
|||||||
curses.curs_set(0)
|
curses.curs_set(0)
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
def display_message(stdscr, message):
|
def display_message(stdscr, message):
|
||||||
"Display a message box at the center of the screen and wait for a keypress"
|
"Display a message box at the center of the screen and wait for a keypress"
|
||||||
|
|
||||||
@@ -148,7 +148,6 @@ def display_message(stdscr, message):
|
|||||||
window = None
|
window = None
|
||||||
stdscr.refresh()
|
stdscr.refresh()
|
||||||
|
|
||||||
|
|
||||||
def display_help(stdscr):
|
def display_help(stdscr):
|
||||||
"""Display a help message box at the center of the screen and wait for a
|
"""Display a help message box at the center of the screen and wait for a
|
||||||
keypress"""
|
keypress"""
|
||||||
@@ -156,7 +155,6 @@ def display_help(stdscr):
|
|||||||
help_msgs = HELP.split("\n")
|
help_msgs = HELP.split("\n")
|
||||||
display_message(stdscr, help_msgs)
|
display_message(stdscr, help_msgs)
|
||||||
|
|
||||||
|
|
||||||
class LoadScreen(object):
|
class LoadScreen(object):
|
||||||
|
|
||||||
def __init__(self, stdscr):
|
def __init__(self, stdscr):
|
||||||
@@ -220,6 +218,18 @@ class LoadScreen(object):
|
|||||||
window.refresh()
|
window.refresh()
|
||||||
time.sleep(interval)
|
time.sleep(interval)
|
||||||
|
|
||||||
|
def open_new_tab(url):
|
||||||
|
"""
|
||||||
|
Call webbrowser.open_new_tab(url) and redirect stdout/stderr to devnull.
|
||||||
|
|
||||||
|
This is a workaround to stop firefox from spewing warning messages to the
|
||||||
|
console. See http://bugs.python.org/issue22277 for a better description
|
||||||
|
of the problem.
|
||||||
|
"""
|
||||||
|
command = "import webbrowser; webbrowser.open_new_tab('%s')" % url
|
||||||
|
args = [sys.executable, '-c', command]
|
||||||
|
with open(os.devnull, 'ab+', 0) as null:
|
||||||
|
subprocess.check_call(args, stdout=null, stderr=null)
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def curses_session():
|
def curses_session():
|
||||||
|
|||||||
Reference in New Issue
Block a user