Fix #59 issue, elisp handle key binding.

master
Andy Stewart 7 years ago
parent 986908fb57
commit a18d5200e0
  1. 44
      core/browser_buffer.py
  2. 6
      core/buffer.py
  3. 14
      docs/HACKING.md
  4. 24
      eaf.el
  5. 13
      eaf.py

@ -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":
self.buffer_widget.back()
elif keystroke == "M-q":
self.buffer_widget.clean_cookie()
self.message_to_emacs.emit("Clean all cookie")
elif keystroke == "C--":
self.buffer_widget.zoom_out()
elif keystroke == "C-=":
self.buffer_widget.zoom_in()
elif keystroke == "C-0":
self.buffer_widget.zoom_reset()
def history_backward(self):
self.buffer_widget.back()
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")
def zoom_out(self):
self.buffer_widget.zoom_out()
def zoom_in(self):
self.buffer_widget.zoom_in()
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)")

@ -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)()

@ -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:

@ -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")

@ -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):

Loading…
Cancel
Save