From 2803cabe890b3ec47f54ebaa63c84de588809a6f Mon Sep 17 00:00:00 2001 From: Po Lu Date: Fri, 12 Nov 2021 17:48:56 +0800 Subject: [PATCH] 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 3d4e96f92d0..e98143b9559 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 -- 2.39.2