Commit a18d5200 authored by Andy Stewart's avatar Andy Stewart
Browse files

Fix #59 issue, elisp handle key binding.

parent 986908fb
Loading
Loading
Loading
Loading
+30 −14
Original line number Diff line number Diff line
@@ -42,17 +42,33 @@ class BrowserBuffer(Buffer):
    def scroll(self, scroll_direction, scroll_type):
        webview_scroll(self, scroll_direction, scroll_type)

    def send_keystroke(self, keystroke):
        if keystroke == "M-f":
            self.buffer_widget.forward()
        elif keystroke == "M-b":
    def history_backward(self):
        self.buffer_widget.back()
        elif keystroke == "M-q":

    def history_forward(self):
        self.buffer_widget.forward()

    def clean_all_cookie(self):
        self.buffer_widget.clean_cookie()
        self.message_to_emacs.emit("Clean all cookie")
        elif keystroke == "C--":

    def zoom_out(self):
        self.buffer_widget.zoom_out()
        elif keystroke == "C-=":

    def zoom_in(self):
        self.buffer_widget.zoom_in()
        elif keystroke == "C-0":

    def zoom_reset(self):
        self.buffer_widget.zoom_reset()

    def scroll_up(self):
        self.buffer_widget.web_page.runJavaScript("window.scrollBy(0, 50)")

    def scroll_down(self):
        self.buffer_widget.web_page.runJavaScript("window.scrollBy(0, -50)")

    def scroll_to_begin(self):
        self.buffer_widget.web_page.runJavaScript("window.scrollTo(0, 0)")

    def scroll_to_bottom(self):
        self.buffer_widget.web_page.runJavaScript("window.scrollBy(0, document.body.scrollHeight)")
+6 −0
Original line number Diff line number Diff line
@@ -123,3 +123,9 @@ class Buffer(QGraphicsScene):

    def update_with_data(self, update_data):
        pass

    def execute_function(self, function_name):
        getattr(self, function_name)()


+0 −14
Original line number Diff line number Diff line
@@ -195,20 +195,6 @@ You need to implement the interface "update_with_data". Below is an example of w

Argument "update_data" is passed from elisp side.

### Handle Emacs keystroke

If you want to handle keystrokes that's been sent from Emacs, you need to implement the interface "send_keystroke" of your Buffer. Below is an example of what browser does:

```Python
    def send_keystroke(self, keystroke):
        if keystroke == "M-f":
            self.buffer_widget.forward()
        elif keystroke == "M-b":
            self.buffer_widget.back()
```

Argument "keystroke" is emacs key string.

### Update progress.

If your application will do some long-time operation, you can use below use below interfaces of buffer:
+23 −1
Original line number Diff line number Diff line
@@ -357,7 +357,29 @@ We need calcuate render allocation to make sure no black border around render co
                      (equal 1 (string-width (this-command-keys))))
                 (eaf-call "send_key" buffer-id key-desc))
                ((string-match "^[CMSs]-.*" key-desc)
                 (eaf-call "send_keystroke" buffer-id key-desc))
                 (cond ((equal buffer-app-name "browser")
                        (cond ((equal key-desc "M-f")
                               (eaf-call "execute_function" buffer-id "history_forward"))
                              ((equal key-desc "M-b")
                               (eaf-call "execute_function" buffer-id "history_backward"))
                              ((equal key-desc "M-q")
                               (eaf-call "execute_function" buffer-id "clean_all_cookie"))
                              ((equal key-desc "C--")
                               (eaf-call "execute_function" buffer-id "zoom_out"))
                              ((equal key-desc "C-=")
                               (eaf-call "execute_function" buffer-id "zoom_in"))
                              ((equal key-desc "C-0")
                               (eaf-call "execute_function" buffer-id "zoom_reset"))
                              ((equal key-desc "C-n")
                               (eaf-call "execute_function" buffer-id "scroll_up"))
                              ((equal key-desc "C-p")
                               (eaf-call "execute_function" buffer-id "scroll_down"))
                              ((equal key-desc "M-<")
                               (eaf-call "execute_function" buffer-id "scroll_to_begin"))
                              ((equal key-desc "M->")
                               (eaf-call "execute_function" buffer-id "scroll_to_bottom"))
                              )))
                 )
                ((or
                  (equal key-command "nil")
                  (equal key-desc "RET")
+8 −5
Original line number Diff line number Diff line
@@ -230,15 +230,18 @@ class EAF(dbus.service.Object):
            self.buffer_dict.pop(buffer_id, None)

    @dbus.service.method(EAF_DBUS_NAME, in_signature="ss", out_signature="")
    def send_key(self, buffer_id, event_string):
        # Send event to buffer when found match buffer.
    def execute_function(self, buffer_id, function_name):
        if buffer_id in self.buffer_dict:
            fake_key_event(event_string, self.buffer_dict[buffer_id])
            try:
                self.buffer_dict[buffer_id].execute_function(function_name)
            except AttributeError:
                self.message_to_emacs("Can't call function: " + function_name)

    @dbus.service.method(EAF_DBUS_NAME, in_signature="ss", out_signature="")
    def send_keystroke(self, buffer_id, keystroke):
    def send_key(self, buffer_id, event_string):
        # Send event to buffer when found match buffer.
        if buffer_id in self.buffer_dict:
            self.buffer_dict[buffer_id].send_keystroke(keystroke)
            fake_key_event(event_string, self.buffer_dict[buffer_id])

    @dbus.service.method(EAF_DBUS_NAME, in_signature="sss", out_signature="")
    def handle_input_message(self, buffer_id, callback_type, callback_result):