From 4a5f1cc88432ea02bb9ba1886e12ca255a5a1e4a Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Mon, 23 Sep 2019 17:55:58 +0800 Subject: [PATCH] Move keybinding of pdf viewer code from python to elisp side. --- app/pdfviewer/buffer.py | 73 ++++++++++++++++++++++++----------------- eaf.el | 28 +++++++++++++++- 2 files changed, 69 insertions(+), 32 deletions(-) diff --git a/app/pdfviewer/buffer.py b/app/pdfviewer/buffer.py index c6f89ac..6cf44ae 100644 --- a/app/pdfviewer/buffer.py +++ b/app/pdfviewer/buffer.py @@ -63,6 +63,48 @@ class AppBuffer(Buffer): self.buffer_widget.read_mode = read_mode self.buffer_widget.update() + def scroll_up(self): + self.buffer_widget.scroll_up() + + def scroll_down(self): + self.buffer_widget.scroll_down() + + def scroll_up_page(self): + self.buffer_widget.scroll_up_page() + + def scroll_down_page(self): + self.buffer_widget.scroll_down_page() + + def swtich_to_read_mode(self): + self.buffer_widget.switch_to_read_mode() + + def scroll_to_home(self): + self.buffer_widget.scroll_to_home() + + def scroll_to_end(self): + self.buffer_widget.scroll_to_end() + + def zoom_reset(self): + self.buffer_widget.zoom_reset() + + def zoom_in(self): + self.buffer_widget.zoom_in() + + def zoom_out(self): + self.buffer_widget.zoom_out() + + def jump_to_page(self): + self.buffer_widget.send_input_message("Jump to: ", "jump_page") + + def jump_to_percent(self): + self.buffer_widget.send_input_message("Jump to percent: ", "jump_percent") + + def remember_current_position(self): + self.buffer_widget.remember_current_position() + + def remeber_jump(self): + self.buffer_widget.remeber_jump() + class PdfViewerWidget(QWidget): def __init__(self, url, background_color): @@ -248,37 +290,6 @@ class PdfViewerWidget(QWidget): def wheelEvent(self, event): self.update_scroll_offset(max(min(self.scroll_offset - self.scale * event.angleDelta().y() / 120 * self.mouse_scroll_offset, self.max_scroll_offset()), 0)) - @build_context_wrap - def keyPressEvent(self, event): - if event.key() == Qt.Key_J: - self.scroll_up() - elif event.key() == Qt.Key_K: - self.scroll_down() - elif event.key() == Qt.Key_Space: - self.scroll_up_page() - elif event.key() == Qt.Key_B: - self.scroll_down_page() - elif event.key() == Qt.Key_T: - self.switch_to_read_mode() - elif event.key() == Qt.Key_Period: - self.scroll_to_home() - elif event.key() == Qt.Key_Comma: - self.scroll_to_end() - elif event.key() == Qt.Key_0: - self.zoom_reset() - elif event.key() == Qt.Key_Equal: - self.zoom_in() - elif event.key() == Qt.Key_Minus: - self.zoom_out() - elif event.key() == Qt.Key_G: - self.send_input_message("Jump to: ", "jump_page") - elif event.key() == Qt.Key_P: - self.send_input_message("Jump to percent: ", "jump_percent") - elif event.key() == Qt.Key_BracketLeft: - self.remember_current_position() - elif event.key() == Qt.Key_BracketRight: - self.remember_jump() - def get_start_page_index(self): return int(self.scroll_offset * 1.0 / self.scale / self.page_height) diff --git a/eaf.el b/eaf.el index 204a81e..8dbdff1 100644 --- a/eaf.el +++ b/eaf.el @@ -162,6 +162,26 @@ by `dired-find-alternate-file'. Otherwise they will be opened normally with `dir :type 'cons :group 'eaf) +(defcustom eaf-pdfviewer-keybinding + '(("j" . "scroll_up") + ("k" . "scroll_down") + ("SPC" . "scroll_up_page") + ("b" . "scroll_down_page") + ("t" . "switch_to_read_mode") + ("." . "scroll_to_home") + ("," . "scroll_to_end") + ("0" . "zoom_reset") + ("=" . "zoom_in") + ("-" . "zoom_out") + ("g" . "jump_to_page") + ("p" . "jump_to_percent") + ("[" . "remember_current_position") + ("]" . "remeber_jump") + ) + "The keybinding of pdf viewer." + :type 'cons + :group 'eaf) + (defun eaf-call (method &rest args) (apply 'dbus-call-method :session ; use the session (not system) bus @@ -372,7 +392,13 @@ We need calcuate render allocation to make sure no black border around render co (equal key-command "self-insert-command") (equal key-command "completion-select-if-within-overlay")) (equal 1 (string-width (this-command-keys)))) - (eaf-call "send_key" buffer-id key-desc)) + (cond ((equal buffer-app-name "pdfviewer") + (let ((function-name-value (assoc key-desc eaf-pdfviewer-keybinding))) + (if function-name-value + (eaf-call "execute_function" buffer-id (cdr function-name-value)) + (eaf-call "send_key" buffer-id key-desc)))) + (t + (eaf-call "send_key" buffer-id key-desc)))) ((string-match "^[CMSs]-.*" key-desc) (cond ((equal buffer-app-name "browser") (let ((function-name-value (assoc key-desc eaf-browser-keybinding)))