emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 2803cab: Add support for input methods to xwidget-webkit-edit-mod


From: Po Lu
Subject: master 2803cab: Add support for input methods to xwidget-webkit-edit-mode
Date: Fri, 12 Nov 2021 04:50:46 -0500 (EST)

branch: master
commit 2803cabe890b3ec47f54ebaa63c84de588809a6f
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Add support for input methods to xwidget-webkit-edit-mode
    
    * lisp/xwidget.el (xwidget-webkit--input-method-events): New
    variable.
    (xwidget-webkit-pass-command-event-with-input-method): New
    function.
    (xwidget-webkit-pass-command-event): Consult input method about
    key events if input method is enabled.
---
 lisp/xwidget.el | 31 ++++++++++++++++++++++++++++---
 1 file changed, 28 insertions(+), 3 deletions(-)

diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index 3d4e96f..e98143b 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -146,11 +146,36 @@ in `split-window-right' with a new xwidget webkit 
session."
 
 (declare-function xwidget-perform-lispy-event "xwidget.c")
 
+(defvar xwidget-webkit--input-method-events nil
+  "Internal variable used to store input method events.")
+
+(defun xwidget-webkit-pass-command-event-with-input-method ()
+  "Handle a `with-input-method' event."
+  (interactive)
+  (let ((key (pop unread-command-events)))
+    (setq xwidget-webkit--input-method-events
+          (funcall input-method-function key))
+    (exit-minibuffer)))
+
 (defun xwidget-webkit-pass-command-event ()
-  "Pass `last-command-event' to the current buffer's WebKit widget."
+  "Pass `last-command-event' to the current buffer's WebKit widget.
+If `current-input-method' is non-nil, consult `input-method-function'
+for the actual events that will be sent."
   (interactive)
-  (xwidget-perform-lispy-event (xwidget-webkit-current-session)
-                               last-command-event))
+  (if (and current-input-method
+           (characterp last-command-event))
+      (let ((xwidget-webkit--input-method-events nil)
+            (minibuffer-local-map (make-keymap)))
+        (define-key minibuffer-local-map [with-input-method]
+          'xwidget-webkit-pass-command-event-with-input-method)
+        (push last-command-event unread-command-events)
+        (push 'with-input-method unread-command-events)
+        (read-from-minibuffer "" nil nil nil nil nil t)
+        (dolist (event xwidget-webkit--input-method-events)
+          (xwidget-perform-lispy-event (xwidget-webkit-current-session)
+                                       event)))
+    (xwidget-perform-lispy-event (xwidget-webkit-current-session)
+                                 last-command-event)))
 
 ;;todo.
 ;; - check that the webkit support is compiled in



reply via email to

[Prev in Thread] Current Thread [Next in Thread]