Commit 4a5f1cc8 authored by Andy Stewart's avatar Andy Stewart
Browse files

Move keybinding of pdf viewer code from python to elisp side.

parent 22456ca1
Loading
Loading
Loading
Loading
+42 −31
Original line number Diff line number Diff line
@@ -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)

+27 −1
Original line number Diff line number Diff line
@@ -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)))