Loading app/mindmap/buffer.py +13 −13 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ from PyQt5.QtCore import QUrl, QTimer from PyQt5.QtWidgets import QApplication from PyQt5.QtGui import QColor from core.browser import BrowserBuffer from core.utils import touch, string_to_base64 from core.utils import touch, string_to_base64, interactive import os import base64 Loading @@ -50,13 +50,13 @@ class AppBuffer(BrowserBuffer): self.build_js_method(method_name) for method_name in ["zoom_in", "zoom_out", "zoom_reset", "remove_node", "remove_middle_node", "add_middle_node", "update_node_topic", "copy_node_topic", "paste_node_topic", "refresh_page", "remove_middle_node", "add_middle_node", "refresh_page", "select_up_node", "select_down_node", "select_left_node", "select_right_node", "toggle_node", "save_screenshot", "save_file", "save_org_file", "change_node_background", "cut_node_tree", "paste_node_tree"]: "toggle_node", "save_screenshot"]: self.build_insert_or_do(method_name) self.build_all_methods(self) QTimer.singleShot(500, self.init_file) def resize_view(self): Loading Loading @@ -87,19 +87,13 @@ class AppBuffer(BrowserBuffer): self.save_file(False) setattr(self, method_name, _do) def build_insert_or_do(self, method_name): def _do (): if self.is_focus(): self.fake_key_event(self.current_event_string) else: getattr(self, method_name)() setattr(self, "insert_or_{}".format(method_name), _do) @interactive(insert_or_do=True) def copy_node_topic(self): node_topic = self.buffer_widget.execute_js("get_node_topic();") self.eval_in_emacs.emit('''(kill-new "{}")'''.format(node_topic)) self.message_to_emacs.emit("Copy: {}".format(node_topic)) @interactive(insert_or_do=True) def paste_node_topic(self): text = QApplication.clipboard().text() if text.strip() != "": Loading @@ -110,6 +104,7 @@ class AppBuffer(BrowserBuffer): else: self.message_to_emacs.emit("Nothing in clipboard, can't paste.") @interactive(insert_or_do=True) def cut_node_tree(self): self.cut_node_id = self.buffer_widget.execute_js("get_selected_nodeid();") if self.cut_node_id: Loading @@ -118,15 +113,18 @@ class AppBuffer(BrowserBuffer): else: self.message_to_emacs.emit("Cut node tree: {}".format(self.cut_node_id)) @interactive(insert_or_do=True) def paste_node_tree(self): if self.cut_node_id: self.buffer_widget.eval_js("paste_node_tree('{}');".format(self.cut_node_id)) self.save_file(False) self.message_to_emacs.emit("Paste node tree: {}".format(self.cut_node_id)) @interactive(insert_or_do=True) def change_node_background(self): self.send_input_message("Change node background: ", "change_node_background", "file") @interactive(insert_or_do=True) def update_node_topic(self): self.send_input_message( "Update topic: ", Loading Loading @@ -176,6 +174,7 @@ class AppBuffer(BrowserBuffer): self.message_to_emacs.emit("Save image: " + image_path) @interactive(insert_or_do=True) def save_file(self, notify=True): file_path = self.get_save_path("emm") touch(file_path) Loading @@ -185,6 +184,7 @@ class AppBuffer(BrowserBuffer): if notify: self.message_to_emacs.emit("Save file: " + file_path) @interactive(insert_or_do=True) def save_org_file(self): file_path = self.get_save_path("org") touch(file_path) Loading app/pdf-viewer/buffer.py +19 −9 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ from PyQt5.QtGui import QColor, QPixmap, QImage, QFont, QCursor from PyQt5.QtGui import QPainter from PyQt5.QtWidgets import QWidget from core.buffer import Buffer from core.utils import touch from core.utils import touch, interactive import fitz import time import random Loading @@ -41,13 +41,7 @@ class AppBuffer(Buffer): self.add_widget(PdfViewerWidget(url, config_dir, QColor(0, 0, 0, 255), buffer_id, emacs_var_dict)) self.buffer_widget.translate_double_click_word.connect(self.translate_text) for method_name in ["scroll_up", "scroll_down", "scroll_up_page", "scroll_down_page", "scroll_to_home", "scroll_to_end", "zoom_reset", "zoom_in", "zoom_out", "save_current_pos", "jump_to_saved_pos", "scroll_right", "scroll_left", "toggle_read_mode", "toggle_inverted_mode", "toggle_mark_link"]: self.build_interactive_method(method_name, self.buffer_widget) self.build_all_methods(self.buffer_widget) def destroy_buffer(self): if self.delete_temp_file: Loading Loading @@ -276,10 +270,12 @@ class PdfViewerWidget(QWidget): def repeat_to_length(self, string_to_expand, length): return (string_to_expand * (int(length/len(string_to_expand))+1))[:length] @interactive() def save_current_pos(self): self.remember_offset = self.scroll_offset self.buffer.message_to_emacs.emit("Saved current position.") @interactive() def jump_to_saved_pos(self): if self.remember_offset is None: self.buffer.message_to_emacs.emit("Cannot jump from this position.") Loading Loading @@ -489,6 +485,7 @@ class PdfViewerWidget(QWidget): def max_scroll_offset(self): return self.scale * self.page_height * self.page_total_number - self.rect().height() @interactive() def toggle_read_mode(self): if self.read_mode == "fit_to_customize": self.read_mode = "fit_to_width" Loading @@ -500,32 +497,41 @@ class PdfViewerWidget(QWidget): self.update_scale() self.update() @interactive() def scroll_up(self): self.update_vertical_offset(min(self.scroll_offset + self.scale * self.scroll_step, self.max_scroll_offset())) @interactive() def scroll_down(self): self.update_vertical_offset(max(self.scroll_offset - self.scale * self.scroll_step, 0)) @interactive() def scroll_right(self): self.update_horizontal_offset(max(self.horizontal_offset - self.scale * 30, (self.rect().width() - self.page_width * self.scale) / 2)) @interactive() def scroll_left(self): self.update_horizontal_offset(min(self.horizontal_offset + (self.scale * 30), (self.page_width * self.scale - self.rect().width()) / 2)) @interactive() def scroll_up_page(self): # Adjust scroll step to make users continue reading fluently. self.update_vertical_offset(min(self.scroll_offset + self.rect().height() - self.scroll_step, self.max_scroll_offset())) @interactive() def scroll_down_page(self): # Adjust scroll step to make users continue reading fluently. self.update_vertical_offset(max(self.scroll_offset - self.rect().height() + self.scroll_step, 0)) def scroll_to_home(self): @interactive() def scroll_to_begin(self): self.update_vertical_offset(0) @interactive() def scroll_to_end(self): self.update_vertical_offset(self.max_scroll_offset()) @interactive() def zoom_in(self): if self.is_mark_search: self.cleanup_search() Loading @@ -533,6 +539,7 @@ class PdfViewerWidget(QWidget): self.scale_to(min(10, self.scale + 0.2)) self.update() @interactive() def zoom_out(self): if self.is_mark_search: self.cleanup_search() Loading @@ -540,6 +547,7 @@ class PdfViewerWidget(QWidget): self.scale_to(max(1, self.scale - 0.2)) self.update() @interactive() def zoom_reset(self): if self.is_mark_search: self.cleanup_search() Loading @@ -547,6 +555,7 @@ class PdfViewerWidget(QWidget): self.update_scale() self.update() @interactive() def toggle_inverted_mode(self): # Need clear page cache first, otherwise current page will not inverted until next page. self.page_cache_pixmap_dict.clear() Loading @@ -557,6 +566,7 @@ class PdfViewerWidget(QWidget): # Re-render page. self.update() @interactive() def toggle_mark_link(self): # mark_link will add underline mark on link, using prompt link position. if self.is_mark_link: self.cleanup_mark_link() Loading app/rss-reader/buffer.py +12 −10 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ from PyQt5.QtWidgets import QPushButton, QHBoxLayout, QWidget, QWidget, QListWid from core.buffer import Buffer from PyQt5 import QtCore from core.browser import BrowserView from core.utils import touch from core.utils import touch, interactive import feedparser import json import os Loading @@ -35,16 +35,10 @@ class AppBuffer(Buffer): Buffer.__init__(self, buffer_id, url, arguments, emacs_var_dict, module_path, True) self.add_widget(RSSReaderWidget(config_dir)) self.buffer_widget.browser.buffer = self for method_name in ["next_subscription", "prev_subscription", "next_article", "prev_article", "first_subscription", "last_subscription", "first_article", "last_article"]: self.build_interactive_method(method_name, self.buffer_widget) for method_name in ["scroll_up", "scroll_down", "scroll_up_page", "scroll_down_page", "scroll_to_begin", "scroll_to_bottom", "search_text_forward", "search_text_backward"]: self.build_interactive_method(method_name, self.buffer_widget.browser) self.build_interactive_method("action_quit", self.buffer_widget.browser, "search_quit") self.build_all_methods(self.buffer_widget) self.build_all_methods(self.buffer_widget.browser) def add_subscription(self): self.send_input_message("Subscribe to RSS feed: ", "add_subscription") Loading Loading @@ -372,6 +366,7 @@ class RSSReaderWidget(QWidget): except Exception: pass @interactive() def next_subscription(self): feed_count = self.feed_list.count() current_row = self.feed_list.currentRow() Loading @@ -383,6 +378,7 @@ class RSSReaderWidget(QWidget): else: self.buffer.message_to_emacs.emit("End of subscribed feeds") @interactive() def prev_subscription(self): current_row = self.feed_list.currentRow() Loading @@ -393,11 +389,13 @@ class RSSReaderWidget(QWidget): else: self.buffer.message_to_emacs.emit("Beginning of subscribed feeds") @interactive() def first_subscription(self): self.feed_list.setCurrentRow(0) self.feed_list.scrollToItem(self.feed_list.currentItem()) self.handle_feed(self.feed_list.currentItem()) @interactive() def last_subscription(self): feed_count = self.feed_list.count() Loading @@ -405,6 +403,7 @@ class RSSReaderWidget(QWidget): self.feed_list.scrollToItem(self.feed_list.currentItem()) self.handle_feed(self.feed_list.currentItem()) @interactive() def next_article(self): article_count = self.article_list.count() current_row = self.article_list.currentRow() Loading @@ -416,6 +415,7 @@ class RSSReaderWidget(QWidget): else: self.buffer.message_to_emacs.emit("End of articles") @interactive() def prev_article(self): current_row = self.article_list.currentRow() Loading @@ -426,11 +426,13 @@ class RSSReaderWidget(QWidget): else: self.buffer.message_to_emacs.emit("Beginning of articles") @interactive() def first_article(self): self.article_list.setCurrentRow(0) self.article_list.scrollToItem(self.article_list.currentItem()) self.handle_article(self.article_list.currentItem()) @interactive() def last_article(self): article_count = self.article_list.count() Loading app/terminal/buffer.py +11 −3 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ from PyQt5.QtCore import QUrl, QTimer, QEvent, QPointF, Qt from PyQt5.QtGui import QColor, QMouseEvent from PyQt5.QtWidgets import QApplication from core.browser import BrowserBuffer from core.utils import PostGui, get_free_port from core.utils import PostGui, get_free_port, interactive import os import subprocess import signal Loading Loading @@ -59,8 +59,7 @@ class AppBuffer(BrowserBuffer): QTimer.singleShot(250, self.focus_terminal) for method_name in ["search_text_forward", "search_text_backward", "scroll_up", "scroll_down", "scroll_up_page", "scroll_down_page", "scroll_to_begin", "scroll_to_bottom"]: self.build_interactive_method(method_name, self) self.build_all_methods(self) def focus_terminal(self): event = QMouseEvent(QEvent.MouseButtonPress, QPointF(0, 0), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) Loading Loading @@ -125,21 +124,27 @@ class AppBuffer(BrowserBuffer): else: self.scroll_down() @interactive() def scroll_up(self): self.buffer_widget.eval_js("scroll_line(1);") @interactive() def scroll_down(self): self.buffer_widget.eval_js("scroll_line(-1);") @interactive() def scroll_up_page(self): self.buffer_widget.eval_js("scroll_page(1);") @interactive() def scroll_down_page(self): self.buffer_widget.eval_js("scroll_page(-1);") @interactive() def scroll_to_begin(self): self.buffer_widget.eval_js("scroll_to_begin();") @interactive() def scroll_to_bottom(self): self.buffer_widget.eval_js("scroll_to_bottom();") Loading @@ -159,18 +164,21 @@ class AppBuffer(BrowserBuffer): # self.web_page.findText(self.search_term) self.buffer_widget.eval_js("find_prev('{}')".format(text)) @interactive() def search_text_forward(self): if self.search_term == "": self.buffer.send_input_message("Forward Search Text: ", "search_text_forward") else: self._search_text(self.search_term) @interactive() def search_text_backward(self): if self.search_term == "": self.buffer.send_input_message("Backward Search Text: ", "search_text_backward") else: self._search_text(self.search_term, True) @interactive() def search_quit(self): if self.search_term != "": self._search_text("") Loading app/video-player/buffer.py +6 −4 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer from PyQt5.QtMultimediaWidgets import QGraphicsVideoItem from PyQt5.QtWidgets import QWidget, QGraphicsScene, QGraphicsView, QVBoxLayout from core.buffer import Buffer from core.utils import interactive class AppBuffer(Buffer): def __init__(self, buffer_id, url, config_dir, arguments, emacs_var_dict, module_path): Loading @@ -33,8 +34,7 @@ class AppBuffer(Buffer): self.add_widget(VideoPlayerWidget()) self.buffer_widget.play(url) self.build_interactive_method("play_backward", self.buffer_widget, "seek_backward") self.build_interactive_method("play_forward", self.buffer_widget, "seek_forward") self.build_all_methods(self.buffer_widget) def all_views_hide(self): # Pause video before all views hdie, otherwise will got error "Internal data stream error". Loading Loading @@ -99,10 +99,12 @@ class VideoPlayerWidget(QWidget): self.media_player.setMedia(QMediaContent(QUrl.fromLocalFile(url))) self.media_player.play() def seek_forward(self): @interactive() def play_forward(self): video_position = self.media_player.position() self.media_player.setPosition(video_position + self.video_seek_durcation) def seek_backward(self): @interactive() def play_backward(self): video_position = self.media_player.position() self.media_player.setPosition(max(video_position - self.video_seek_durcation, 0)) Loading
app/mindmap/buffer.py +13 −13 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ from PyQt5.QtCore import QUrl, QTimer from PyQt5.QtWidgets import QApplication from PyQt5.QtGui import QColor from core.browser import BrowserBuffer from core.utils import touch, string_to_base64 from core.utils import touch, string_to_base64, interactive import os import base64 Loading @@ -50,13 +50,13 @@ class AppBuffer(BrowserBuffer): self.build_js_method(method_name) for method_name in ["zoom_in", "zoom_out", "zoom_reset", "remove_node", "remove_middle_node", "add_middle_node", "update_node_topic", "copy_node_topic", "paste_node_topic", "refresh_page", "remove_middle_node", "add_middle_node", "refresh_page", "select_up_node", "select_down_node", "select_left_node", "select_right_node", "toggle_node", "save_screenshot", "save_file", "save_org_file", "change_node_background", "cut_node_tree", "paste_node_tree"]: "toggle_node", "save_screenshot"]: self.build_insert_or_do(method_name) self.build_all_methods(self) QTimer.singleShot(500, self.init_file) def resize_view(self): Loading Loading @@ -87,19 +87,13 @@ class AppBuffer(BrowserBuffer): self.save_file(False) setattr(self, method_name, _do) def build_insert_or_do(self, method_name): def _do (): if self.is_focus(): self.fake_key_event(self.current_event_string) else: getattr(self, method_name)() setattr(self, "insert_or_{}".format(method_name), _do) @interactive(insert_or_do=True) def copy_node_topic(self): node_topic = self.buffer_widget.execute_js("get_node_topic();") self.eval_in_emacs.emit('''(kill-new "{}")'''.format(node_topic)) self.message_to_emacs.emit("Copy: {}".format(node_topic)) @interactive(insert_or_do=True) def paste_node_topic(self): text = QApplication.clipboard().text() if text.strip() != "": Loading @@ -110,6 +104,7 @@ class AppBuffer(BrowserBuffer): else: self.message_to_emacs.emit("Nothing in clipboard, can't paste.") @interactive(insert_or_do=True) def cut_node_tree(self): self.cut_node_id = self.buffer_widget.execute_js("get_selected_nodeid();") if self.cut_node_id: Loading @@ -118,15 +113,18 @@ class AppBuffer(BrowserBuffer): else: self.message_to_emacs.emit("Cut node tree: {}".format(self.cut_node_id)) @interactive(insert_or_do=True) def paste_node_tree(self): if self.cut_node_id: self.buffer_widget.eval_js("paste_node_tree('{}');".format(self.cut_node_id)) self.save_file(False) self.message_to_emacs.emit("Paste node tree: {}".format(self.cut_node_id)) @interactive(insert_or_do=True) def change_node_background(self): self.send_input_message("Change node background: ", "change_node_background", "file") @interactive(insert_or_do=True) def update_node_topic(self): self.send_input_message( "Update topic: ", Loading Loading @@ -176,6 +174,7 @@ class AppBuffer(BrowserBuffer): self.message_to_emacs.emit("Save image: " + image_path) @interactive(insert_or_do=True) def save_file(self, notify=True): file_path = self.get_save_path("emm") touch(file_path) Loading @@ -185,6 +184,7 @@ class AppBuffer(BrowserBuffer): if notify: self.message_to_emacs.emit("Save file: " + file_path) @interactive(insert_or_do=True) def save_org_file(self): file_path = self.get_save_path("org") touch(file_path) Loading
app/pdf-viewer/buffer.py +19 −9 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ from PyQt5.QtGui import QColor, QPixmap, QImage, QFont, QCursor from PyQt5.QtGui import QPainter from PyQt5.QtWidgets import QWidget from core.buffer import Buffer from core.utils import touch from core.utils import touch, interactive import fitz import time import random Loading @@ -41,13 +41,7 @@ class AppBuffer(Buffer): self.add_widget(PdfViewerWidget(url, config_dir, QColor(0, 0, 0, 255), buffer_id, emacs_var_dict)) self.buffer_widget.translate_double_click_word.connect(self.translate_text) for method_name in ["scroll_up", "scroll_down", "scroll_up_page", "scroll_down_page", "scroll_to_home", "scroll_to_end", "zoom_reset", "zoom_in", "zoom_out", "save_current_pos", "jump_to_saved_pos", "scroll_right", "scroll_left", "toggle_read_mode", "toggle_inverted_mode", "toggle_mark_link"]: self.build_interactive_method(method_name, self.buffer_widget) self.build_all_methods(self.buffer_widget) def destroy_buffer(self): if self.delete_temp_file: Loading Loading @@ -276,10 +270,12 @@ class PdfViewerWidget(QWidget): def repeat_to_length(self, string_to_expand, length): return (string_to_expand * (int(length/len(string_to_expand))+1))[:length] @interactive() def save_current_pos(self): self.remember_offset = self.scroll_offset self.buffer.message_to_emacs.emit("Saved current position.") @interactive() def jump_to_saved_pos(self): if self.remember_offset is None: self.buffer.message_to_emacs.emit("Cannot jump from this position.") Loading Loading @@ -489,6 +485,7 @@ class PdfViewerWidget(QWidget): def max_scroll_offset(self): return self.scale * self.page_height * self.page_total_number - self.rect().height() @interactive() def toggle_read_mode(self): if self.read_mode == "fit_to_customize": self.read_mode = "fit_to_width" Loading @@ -500,32 +497,41 @@ class PdfViewerWidget(QWidget): self.update_scale() self.update() @interactive() def scroll_up(self): self.update_vertical_offset(min(self.scroll_offset + self.scale * self.scroll_step, self.max_scroll_offset())) @interactive() def scroll_down(self): self.update_vertical_offset(max(self.scroll_offset - self.scale * self.scroll_step, 0)) @interactive() def scroll_right(self): self.update_horizontal_offset(max(self.horizontal_offset - self.scale * 30, (self.rect().width() - self.page_width * self.scale) / 2)) @interactive() def scroll_left(self): self.update_horizontal_offset(min(self.horizontal_offset + (self.scale * 30), (self.page_width * self.scale - self.rect().width()) / 2)) @interactive() def scroll_up_page(self): # Adjust scroll step to make users continue reading fluently. self.update_vertical_offset(min(self.scroll_offset + self.rect().height() - self.scroll_step, self.max_scroll_offset())) @interactive() def scroll_down_page(self): # Adjust scroll step to make users continue reading fluently. self.update_vertical_offset(max(self.scroll_offset - self.rect().height() + self.scroll_step, 0)) def scroll_to_home(self): @interactive() def scroll_to_begin(self): self.update_vertical_offset(0) @interactive() def scroll_to_end(self): self.update_vertical_offset(self.max_scroll_offset()) @interactive() def zoom_in(self): if self.is_mark_search: self.cleanup_search() Loading @@ -533,6 +539,7 @@ class PdfViewerWidget(QWidget): self.scale_to(min(10, self.scale + 0.2)) self.update() @interactive() def zoom_out(self): if self.is_mark_search: self.cleanup_search() Loading @@ -540,6 +547,7 @@ class PdfViewerWidget(QWidget): self.scale_to(max(1, self.scale - 0.2)) self.update() @interactive() def zoom_reset(self): if self.is_mark_search: self.cleanup_search() Loading @@ -547,6 +555,7 @@ class PdfViewerWidget(QWidget): self.update_scale() self.update() @interactive() def toggle_inverted_mode(self): # Need clear page cache first, otherwise current page will not inverted until next page. self.page_cache_pixmap_dict.clear() Loading @@ -557,6 +566,7 @@ class PdfViewerWidget(QWidget): # Re-render page. self.update() @interactive() def toggle_mark_link(self): # mark_link will add underline mark on link, using prompt link position. if self.is_mark_link: self.cleanup_mark_link() Loading
app/rss-reader/buffer.py +12 −10 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ from PyQt5.QtWidgets import QPushButton, QHBoxLayout, QWidget, QWidget, QListWid from core.buffer import Buffer from PyQt5 import QtCore from core.browser import BrowserView from core.utils import touch from core.utils import touch, interactive import feedparser import json import os Loading @@ -35,16 +35,10 @@ class AppBuffer(Buffer): Buffer.__init__(self, buffer_id, url, arguments, emacs_var_dict, module_path, True) self.add_widget(RSSReaderWidget(config_dir)) self.buffer_widget.browser.buffer = self for method_name in ["next_subscription", "prev_subscription", "next_article", "prev_article", "first_subscription", "last_subscription", "first_article", "last_article"]: self.build_interactive_method(method_name, self.buffer_widget) for method_name in ["scroll_up", "scroll_down", "scroll_up_page", "scroll_down_page", "scroll_to_begin", "scroll_to_bottom", "search_text_forward", "search_text_backward"]: self.build_interactive_method(method_name, self.buffer_widget.browser) self.build_interactive_method("action_quit", self.buffer_widget.browser, "search_quit") self.build_all_methods(self.buffer_widget) self.build_all_methods(self.buffer_widget.browser) def add_subscription(self): self.send_input_message("Subscribe to RSS feed: ", "add_subscription") Loading Loading @@ -372,6 +366,7 @@ class RSSReaderWidget(QWidget): except Exception: pass @interactive() def next_subscription(self): feed_count = self.feed_list.count() current_row = self.feed_list.currentRow() Loading @@ -383,6 +378,7 @@ class RSSReaderWidget(QWidget): else: self.buffer.message_to_emacs.emit("End of subscribed feeds") @interactive() def prev_subscription(self): current_row = self.feed_list.currentRow() Loading @@ -393,11 +389,13 @@ class RSSReaderWidget(QWidget): else: self.buffer.message_to_emacs.emit("Beginning of subscribed feeds") @interactive() def first_subscription(self): self.feed_list.setCurrentRow(0) self.feed_list.scrollToItem(self.feed_list.currentItem()) self.handle_feed(self.feed_list.currentItem()) @interactive() def last_subscription(self): feed_count = self.feed_list.count() Loading @@ -405,6 +403,7 @@ class RSSReaderWidget(QWidget): self.feed_list.scrollToItem(self.feed_list.currentItem()) self.handle_feed(self.feed_list.currentItem()) @interactive() def next_article(self): article_count = self.article_list.count() current_row = self.article_list.currentRow() Loading @@ -416,6 +415,7 @@ class RSSReaderWidget(QWidget): else: self.buffer.message_to_emacs.emit("End of articles") @interactive() def prev_article(self): current_row = self.article_list.currentRow() Loading @@ -426,11 +426,13 @@ class RSSReaderWidget(QWidget): else: self.buffer.message_to_emacs.emit("Beginning of articles") @interactive() def first_article(self): self.article_list.setCurrentRow(0) self.article_list.scrollToItem(self.article_list.currentItem()) self.handle_article(self.article_list.currentItem()) @interactive() def last_article(self): article_count = self.article_list.count() Loading
app/terminal/buffer.py +11 −3 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ from PyQt5.QtCore import QUrl, QTimer, QEvent, QPointF, Qt from PyQt5.QtGui import QColor, QMouseEvent from PyQt5.QtWidgets import QApplication from core.browser import BrowserBuffer from core.utils import PostGui, get_free_port from core.utils import PostGui, get_free_port, interactive import os import subprocess import signal Loading Loading @@ -59,8 +59,7 @@ class AppBuffer(BrowserBuffer): QTimer.singleShot(250, self.focus_terminal) for method_name in ["search_text_forward", "search_text_backward", "scroll_up", "scroll_down", "scroll_up_page", "scroll_down_page", "scroll_to_begin", "scroll_to_bottom"]: self.build_interactive_method(method_name, self) self.build_all_methods(self) def focus_terminal(self): event = QMouseEvent(QEvent.MouseButtonPress, QPointF(0, 0), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) Loading Loading @@ -125,21 +124,27 @@ class AppBuffer(BrowserBuffer): else: self.scroll_down() @interactive() def scroll_up(self): self.buffer_widget.eval_js("scroll_line(1);") @interactive() def scroll_down(self): self.buffer_widget.eval_js("scroll_line(-1);") @interactive() def scroll_up_page(self): self.buffer_widget.eval_js("scroll_page(1);") @interactive() def scroll_down_page(self): self.buffer_widget.eval_js("scroll_page(-1);") @interactive() def scroll_to_begin(self): self.buffer_widget.eval_js("scroll_to_begin();") @interactive() def scroll_to_bottom(self): self.buffer_widget.eval_js("scroll_to_bottom();") Loading @@ -159,18 +164,21 @@ class AppBuffer(BrowserBuffer): # self.web_page.findText(self.search_term) self.buffer_widget.eval_js("find_prev('{}')".format(text)) @interactive() def search_text_forward(self): if self.search_term == "": self.buffer.send_input_message("Forward Search Text: ", "search_text_forward") else: self._search_text(self.search_term) @interactive() def search_text_backward(self): if self.search_term == "": self.buffer.send_input_message("Backward Search Text: ", "search_text_backward") else: self._search_text(self.search_term, True) @interactive() def search_quit(self): if self.search_term != "": self._search_text("") Loading
app/video-player/buffer.py +6 −4 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer from PyQt5.QtMultimediaWidgets import QGraphicsVideoItem from PyQt5.QtWidgets import QWidget, QGraphicsScene, QGraphicsView, QVBoxLayout from core.buffer import Buffer from core.utils import interactive class AppBuffer(Buffer): def __init__(self, buffer_id, url, config_dir, arguments, emacs_var_dict, module_path): Loading @@ -33,8 +34,7 @@ class AppBuffer(Buffer): self.add_widget(VideoPlayerWidget()) self.buffer_widget.play(url) self.build_interactive_method("play_backward", self.buffer_widget, "seek_backward") self.build_interactive_method("play_forward", self.buffer_widget, "seek_forward") self.build_all_methods(self.buffer_widget) def all_views_hide(self): # Pause video before all views hdie, otherwise will got error "Internal data stream error". Loading Loading @@ -99,10 +99,12 @@ class VideoPlayerWidget(QWidget): self.media_player.setMedia(QMediaContent(QUrl.fromLocalFile(url))) self.media_player.play() def seek_forward(self): @interactive() def play_forward(self): video_position = self.media_player.position() self.media_player.setPosition(video_position + self.video_seek_durcation) def seek_backward(self): @interactive() def play_backward(self): video_position = self.media_player.position() self.media_player.setPosition(max(video_position - self.video_seek_durcation, 0))