unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] Add IME status change support on windows natively
@ 2020-04-13  4:09 Albert
  2020-04-13  4:53 ` Eli Zaretskii
  0 siblings, 1 reply; 10+ messages in thread
From: Albert @ 2020-04-13  4:09 UTC (permalink / raw)
  To: emacs-devel


[-- Attachment #1.1: Type: text/plain, Size: 1449 bytes --]

Hi,
    I added some code on src/w32fns.c and src/w32term.h to add IME status change support on windows natively like gVim did. gVim can change IME status to chinese mode  in insert mode and switch back to english mode when in normal mode natively.



   IME status can be changed by dynamic call imm32.dll's function ImmSetOpenStatus_Proc, but we can't change IME status by elisp code only. Because calling imm32.dll's function ImmSetOpenStatus_Proc from lisp thread is not allowed by Windows, IME is attached to window thread and lisp code is executed in lisp thread. We have to set a flag in lisp thread and set a user-defined message to window thread, then processes that message in w32_msg_pump(). I added a function w32-set-ime-open-status which is called by lisp code.


Following is lisp to use w32-set-ime-open-status after evil mode changed



(if (fboundp 'w32-set-ime-open-status)
    (progn
      (defun emacs-ime-disable ()
        (w32-set-ime-open-status nil))

      (defun emacs-ime-enable ()
        (w32-set-ime-open-status t))

      (add-hook 'evil-insert-state-entry-hook 'emacs-ime-enable)
      (add-hook 'evil-insert-state-exit-hook 'emacs-ime-disable)
      ))

[-- Attachment #1.2: Type: text/html, Size: 1630 bytes --]

[-- Attachment #2: w32fns.c.patch --]
[-- Type: application/octet-stream, Size: 5516 bytes --]

diff --git a/src/w32fns.c b/src/w32fns.c
index 8d714f0b8d..341cbb4fcd 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -166,6 +166,10 @@ DECLARE_HANDLE(HMONITOR);
 typedef BOOL (WINAPI * ImmReleaseContext_Proc) (IN HWND wnd, IN HIMC context);
 typedef BOOL (WINAPI * ImmSetCompositionWindow_Proc) (IN HIMC context,
 						      IN COMPOSITIONFORM *form);
+/* for ime switch */
+typedef BOOL (WINAPI * ImmGetOpenStatus_Proc) (IN HIMC);
+typedef BOOL (WINAPI * ImmSetOpenStatus_Proc) (IN HIMC, IN BOOL);
+
 typedef HMONITOR (WINAPI * MonitorFromPoint_Proc) (IN POINT pt, IN DWORD flags);
 typedef BOOL (WINAPI * GetMonitorInfo_Proc)
   (IN HMONITOR monitor, OUT struct MONITOR_INFO* info);
@@ -185,6 +189,8 @@ DECLARE_HANDLE(HMONITOR);
 TrackMouseEvent_Proc track_mouse_event_fn = NULL;
 ImmGetCompositionString_Proc get_composition_string_fn = NULL;
 ImmGetContext_Proc get_ime_context_fn = NULL;
+ImmGetOpenStatus_Proc get_ime_open_status_fn = NULL;
+ImmSetOpenStatus_Proc set_ime_open_status_fn = NULL;
 ImmReleaseContext_Proc release_ime_context_fn = NULL;
 ImmSetCompositionWindow_Proc set_ime_composition_window_fn = NULL;
 MonitorFromPoint_Proc monitor_from_point_fn = NULL;
@@ -295,6 +301,10 @@ #define WS_EX_NOACTIVATE 0x08000000L
 
 static struct w32_display_info *w32_display_info_for_name (Lisp_Object);
 
+/* emacs ime status change flag, used in mainThread and windowsThread */
+static int w32_ime_status_changed = 0;
+static int w32_emacs_ime_status = 0;
+
 /* Let the user specify a display with a frame.
    nil stands for the selected frame--or, if that is not a w32 frame,
    the first display on the list.  */
@@ -2421,6 +2431,7 @@ w32_createhscrollbar (struct frame *f, struct scroll_bar * bar)
 		       FRAME_W32_WINDOW (f), NULL, hinst, NULL);
 }
 
+
 static void
 w32_createwindow (struct frame *f, int *coords)
 {
@@ -3305,6 +3316,7 @@ #define M(msg) { msg, # msg }
       M (WM_EMACS_SETCURSOR),
       M (WM_EMACS_SHOWCURSOR),
       M (WM_EMACS_PAINT),
+      M (WM_EMACS_IME_STATUS),
       M (WM_CHAR),
 #undef M
       { 0, 0 }
@@ -3442,6 +3454,25 @@ w32_msg_pump (deferred_msg * msg_buf)
 		  emacs_abort ();
 	      }
 	      break;
+            case WM_EMACS_IME_STATUS:
+              if (!set_ime_open_status_fn)
+                break;
+              else
+                {
+                  if (w32_ime_status_changed)
+                    {
+                      w32_ime_status_changed = 0;
+                      HIMC context;
+                      context = get_ime_context_fn (w32_system_caret_hwnd);
+                      if (!context)
+                          break;
+
+                      set_ime_open_status_fn (context, w32_emacs_ime_status);
+                      release_ime_context_fn (w32_system_caret_hwnd, context);
+                    }
+                }
+              break;
+
 #ifdef MSG_DEBUG
 	      /* Broadcast messages make it here, so you need to be looking
 		 for something in particular for this to be useful.  */
@@ -10218,6 +10249,43 @@ DEFUN ("w32-notification-close",
 
 #endif	/* WINDOWSNT && !HAVE_DBUS */
 
+DEFUN ("w32-get-ime-open-status",
+       Fw32_get_ime_open_status, Sw32_get_ime_open_status,
+       0, 0, 0,
+       doc: /* Return ime open status on Windows. */)
+  (void)
+{
+  int retval;
+
+  HIMC context = get_ime_context_fn (w32_system_caret_hwnd);
+  if (context != NULL)
+    {
+      retval = get_ime_open_status_fn (context);
+      release_ime_context_fn (w32_system_caret_hwnd, context);
+
+      return make_fixnum(retval);
+    }
+
+  return Qnil;
+}
+
+DEFUN ("w32-set-ime-open-status",
+       Fw32_set_ime_open_status, Sw32_set_ime_open_status,
+       1, 1, 0,
+       doc: /* Set emacs IME open status on Windows. */)
+  (Lisp_Object status)
+{
+    w32_ime_status_changed = 1;
+    if (NILP (status))
+      w32_emacs_ime_status = 0;
+    else
+      w32_emacs_ime_status = 1;
+
+    PostThreadMessage (dwWindowsThreadId, WM_EMACS_IME_STATUS, 0, 0);
+
+    return Qnil;
+}
+
 \f
 #ifdef WINDOWSNT
 /***********************************************************************
@@ -10744,6 +10812,8 @@ syms_of_w32fns (void)
   defsubr (&Sw32_notification_notify);
   defsubr (&Sw32_notification_close);
 #endif
+  defsubr (&Sw32_get_ime_open_status);
+  defsubr (&Sw32_set_ime_open_status);
 
 #ifdef WINDOWSNT
   defsubr (&Sw32_read_registry);
@@ -11032,6 +11102,11 @@ globals_of_w32fns (void)
       get_proc_addr (imm32_lib, "ImmReleaseContext");
     set_ime_composition_window_fn = (ImmSetCompositionWindow_Proc)
       get_proc_addr (imm32_lib, "ImmSetCompositionWindow");
+
+    get_ime_open_status_fn = (ImmGetOpenStatus_Proc)
+      get_proc_addr (imm32_lib, "ImmGetOpenStatus");
+    set_ime_open_status_fn = (ImmSetOpenStatus_Proc)
+      get_proc_addr (imm32_lib, "ImmSetOpenStatus");
   }
 
   HMODULE hm_kernel32 = GetModuleHandle ("kernel32.dll");
diff --git a/src/w32term.h b/src/w32term.h
index f8a8a727e8..4e9234f239 100644
--- a/src/w32term.h
+++ b/src/w32term.h
@@ -670,7 +670,8 @@ #define WM_EMACS_PAINT                 (WM_EMACS_START + 22)
 #define WM_EMACS_BRINGTOTOP            (WM_EMACS_START + 23)
 #define WM_EMACS_INPUT_READY           (WM_EMACS_START + 24)
 #define WM_EMACS_FILENOTIFY            (WM_EMACS_START + 25)
-#define WM_EMACS_END                   (WM_EMACS_START + 26)
+#define WM_EMACS_IME_STATUS            (WM_EMACS_START + 26)
+#define WM_EMACS_END                   (WM_EMACS_START + 27)
 
 #define WND_FONTWIDTH_INDEX    (0)
 #define WND_LINEHEIGHT_INDEX   (4)

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] Add IME status change support on windows natively
  2020-04-13  4:09 Albert
@ 2020-04-13  4:53 ` Eli Zaretskii
  2020-04-13  5:47   ` Eli Zaretskii
                     ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Eli Zaretskii @ 2020-04-13  4:53 UTC (permalink / raw)
  To: Albert; +Cc: emacs-devel

> From: "Albert" <georgealbert@qq.com>
> Date: Mon, 13 Apr 2020 12:09:00 +0800
> 
>     I added some code on src/w32fns.c and src/w32term.h to add IME status change support on windows
> natively like gVim did. gVim can change IME status to chinese mode  in insert mode and switch back to
> english mode when in normal mode natively.

Thanks.  Can you please tell more about the uses of this feature?  How
would a user of Emacs use this, and what is the effect of using this
on editing inside Emacs?

I'm asking because we probably need to say something about this in the
manual.

>       (add-hook 'evil-insert-state-entry-hook 'emacs-ime-enable)
>       (add-hook 'evil-insert-state-exit-hook 'emacs-ime-disable)

I don't use Evil, so I'm not sure I understand what this does.  If you
describe the typical uses of this feature, I will probably understand
better.  In particular, why is this placed on a hook?

> +/* emacs ime status change flag, used in mainThread and windowsThread */
> +static int w32_ime_status_changed = 0;
> +static int w32_emacs_ime_status = 0;

Can we do this without static variables?  E.g., can you use the 2
parameters of the PostThreadMessage API to pass these flags?  I think
that would be cleaner.

> +DEFUN ("w32-get-ime-open-status",
> +       Fw32_get_ime_open_status, Sw32_get_ime_open_status,
> +       0, 0, 0,
> +       doc: /* Return ime open status on Windows. */)

The doc string is too terse, it should say something about the
returned status and its significance.

> +DEFUN ("w32-set-ime-open-status",
> +       Fw32_set_ime_open_status, Sw32_set_ime_open_status,
> +       1, 1, 0,
> +       doc: /* Set emacs IME open status on Windows. */)

Likewise here.  AFAIU, this function doesn't "set the status", it
actually opens or closes the IME.  If so, the doc string should say
that, and it should explicitly mention the argument of the function
and its significance.

Thank you for working on this.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Add IME status change support on windows natively
  2020-04-13  4:53 ` Eli Zaretskii
@ 2020-04-13  5:47   ` Eli Zaretskii
  2020-04-13  6:12   ` =?gb18030?B?u9i4tKO6IFtQQVRDSF0gQWRkIElNRSBzdGF0dXMgY2hhbmdlIHN1cHBvcnQgb24gd2luZG93cyBuYXRpdmVseQ==?= =?gb18030?B?QWxiZXJ0?=
  2020-04-14  2:13   ` Richard Stallman
  2 siblings, 0 replies; 10+ messages in thread
From: Eli Zaretskii @ 2020-04-13  5:47 UTC (permalink / raw)
  To: georgealbert; +Cc: emacs-devel

> Date: Mon, 13 Apr 2020 07:53:00 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: emacs-devel@gnu.org
> 
> Thanks.  Can you please tell more about the uses of this feature?  How
> would a user of Emacs use this, and what is the effect of using this
> on editing inside Emacs?
> 
> I'm asking because we probably need to say something about this in the
> manual.
> 
> >       (add-hook 'evil-insert-state-entry-hook 'emacs-ime-enable)
> >       (add-hook 'evil-insert-state-exit-hook 'emacs-ime-disable)

Hmm, the answer seems to be that the changes you proposed allow to
turn the IMM on and off at will.  E.g., the above setup turns IMM on
when Evil enters the "insert" mode.  However, Emacs is always in the
"insert" mode, so I wonder why and under what circumstances would an
Emacs user want to turn IMM off?  Perhaps that should happen
automatically in buffers where character keys do not insert
themselves, but are bound to commands, like Dired buffers and buffers
in view-mode and its derivatives?



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Add IME status change support on windows natively
  2020-04-13  9:22                     ` =?gb18030?B?u9i4tKO6ILvYuLSjuiC72Li0o7ogu9i4tKO6ILvYuLSjuiBbUEFUQ0hdIEFkZCBJTUUgc3RhdHVzIGNoYW5nZSBzdXBwb3J0IG9uIHdpbmRvd3MgbmF0aXZlbHk=?= =?gb18030?B?QWxiZXJ0?=
@ 2020-04-13  9:33                       ` Eli Zaretskii
  2020-04-13 10:02                         ` =?gb18030?B?u9i4tKO6IFtQQVRDSF0gQWRkIElNRSBzdGF0dXMgY2hhbmdlIHN1cHBvcnQgb24gd2luZG93cyBuYXRpdmVseQ==?= =?gb18030?B?QWxiZXJ0?=
  0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2020-04-13  9:33 UTC (permalink / raw)
  To: Albert; +Cc: emacs-devel

> From: "Albert" <georgealbert@qq.com>
> Cc: "emacs-devel" <emacs-devel@gnu.org>
> Date: Mon, 13 Apr 2020 17:22:35 +0800
> 
> I modifed the code following your instruction.  I added some more comments on functions. Test is done, IME
> status changes as expected.
> 
> I used GetFocus() in w32_msg_pump() now.

Thanks.

> But I can't invoke GetFocus() in w32-get-ime-open-status(), because w32-get-ime-open-status() is invoked
> in lisp thread. I just use w32_system_caret_hwnd instead, if get_ime_context_fn(w32-get-ime-open-status)
> returns NULL, w32-get-ime-open-status() return nil.

Do we actually need w32-get-ime-open-status?  Maybe we should simply
delete that function?  When will it be useful?

If we do need to use it, does it work to use this to find a suitable
window handle:

  HWND current_window = FRAME_W32_WINDOW (SELECTED_FRAME ());

> Attachement is the modifed patch.

Thanks.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Add IME status change support on windows natively
@ 2020-04-13 10:56 Zhu Zihao
  0 siblings, 0 replies; 10+ messages in thread
From: Zhu Zihao @ 2020-04-13 10:56 UTC (permalink / raw)
  To: eliz; +Cc: emacs-devel

> However, Emacs is always in the
> "insert" mode, so I wonder why and under what circumstances would an
> Emacs user want to turn IMM off?  Perhaps that should happen
> automatically in buffers where character keys do not insert
> themselves, but are bound to commands, like Dired buffers and buffers
> in view-mode and its derivatives?

When entering a key sequence to invoke command. e.g. C-x l for count-lines. IME
will capture the "l" key and you have to disable IME. 




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Add IME status change support on windows natively
  2020-04-13 10:02                         ` =?gb18030?B?u9i4tKO6IFtQQVRDSF0gQWRkIElNRSBzdGF0dXMgY2hhbmdlIHN1cHBvcnQgb24gd2luZG93cyBuYXRpdmVseQ==?= =?gb18030?B?QWxiZXJ0?=
@ 2020-04-13 13:10                           ` Eli Zaretskii
  2020-04-13 13:15                             ` =?gb18030?B?u9i4tKO6IFtQQVRDSF0gQWRkIElNRSBzdGF0dXMgY2hhbmdlIHN1cHBvcnQgb24gd2luZG93cyBuYXRpdmVseQ==?= =?gb18030?B?QWxiZXJ0?=
  0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2020-04-13 13:10 UTC (permalink / raw)
  To: Albert; +Cc: emacs-devel

> From: "Albert" <georgealbert@qq.com>
> Cc: "emacs-devel" <emacs-devel@gnu.org>
> Date: Mon, 13 Apr 2020 18:02:17 +0800
> 
> I modified the code processing WM_EMACS_IME_STATUS,  no need to get status of IME, just change IME
> status by the argument. If the user want to get status of IME to control IME status, he can write some lisp to
> do it.
> 
> and I modifed w32-get-ime-open-status(), get hwnd from FRAME_W32_WINDOW (SELECTED_FRAME
> ()).

Thanks, I pushed the changes with a few modifications and cleanups.

Please in the future accompany your contributions with suitable commit
log messages, as described in the CONTRIBUTE file.  I did this for you
this time; please see the style I used and try to use it in your
future contributions.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Add IME status change support on windows natively
  2020-04-13 13:15                             ` =?gb18030?B?u9i4tKO6IFtQQVRDSF0gQWRkIElNRSBzdGF0dXMgY2hhbmdlIHN1cHBvcnQgb24gd2luZG93cyBuYXRpdmVseQ==?= =?gb18030?B?QWxiZXJ0?=
@ 2020-04-13 13:44                               ` Eli Zaretskii
  0 siblings, 0 replies; 10+ messages in thread
From: Eli Zaretskii @ 2020-04-13 13:44 UTC (permalink / raw)
  To: Albert; +Cc: emacs-devel

> From: "Albert" <georgealbert@qq.com>
> Date: Mon, 13 Apr 2020 21:15:16 +0800
> Cc: emacs-devel <emacs-devel@gnu.org>
> 
> Thanks for your help. I will follow the emacs coding standard in the future.

Thanks, please try the latest master branch, I've modified the code a
little.  In particular, w32-get-ime-open-status now returns nil or t,
not 0 or 1.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Add IME status change support on windows natively
  2020-04-13  4:53 ` Eli Zaretskii
  2020-04-13  5:47   ` Eli Zaretskii
  2020-04-13  6:12   ` =?gb18030?B?u9i4tKO6IFtQQVRDSF0gQWRkIElNRSBzdGF0dXMgY2hhbmdlIHN1cHBvcnQgb24gd2luZG93cyBuYXRpdmVseQ==?= =?gb18030?B?QWxiZXJ0?=
@ 2020-04-14  2:13   ` Richard Stallman
  2020-04-14  5:54     ` Eli Zaretskii
  2 siblings, 1 reply; 10+ messages in thread
From: Richard Stallman @ 2020-04-14  2:13 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, georgealbert

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > >     I added some code on src/w32fns.c and src/w32term.h to add IME status change support on windows
  > > natively like gVim did. gVim can change IME status to chinese mode  in insert mode and switch back to
  > > english mode when in normal mode natively.

  > Thanks.  Can you please tell more about the uses of this feature?  How
  > would a user of Emacs use this, and what is the effect of using this
  > on editing inside Emacs?

Do we have a comparable feature on GNU/Linux?  We should not have any
features that work only on some nonfree operating system.

Our aim is to eliminate nonfree programs, not enhance them.

-- 
Dr Richard Stallman
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Add IME status change support on windows natively
  2020-04-14  2:13   ` Richard Stallman
@ 2020-04-14  5:54     ` Eli Zaretskii
  2020-04-15  2:56       ` Richard Stallman
  0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2020-04-14  5:54 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel, georgealbert

> From: Richard Stallman <rms@gnu.org>
> Cc: georgealbert@qq.com, emacs-devel@gnu.org
> Date: Mon, 13 Apr 2020 22:13:11 -0400
> 
> Do we have a comparable feature on GNU/Linux?  We should not have any
> features that work only on some nonfree operating system.

Yes, native input methods are supported on GNU/Linux for a very long
time.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Add IME status change support on windows natively
  2020-04-14  5:54     ` Eli Zaretskii
@ 2020-04-15  2:56       ` Richard Stallman
  0 siblings, 0 replies; 10+ messages in thread
From: Richard Stallman @ 2020-04-15  2:56 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: georgealbert, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > > Do we have a comparable feature on GNU/Linux?  We should not have any
  > > features that work only on some nonfree operating system.

  > Yes, native input methods are supported on GNU/Linux for a very long
  > time.

Indeed they are.  But I could not tell that this was relevant because
I didn't know what IME does.  Now I understand.

-- 
Dr Richard Stallman
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2020-04-15  2:56 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-13 10:56 [PATCH] Add IME status change support on windows natively Zhu Zihao
  -- strict thread matches above, loose matches on Subject: below --
2020-04-13  4:09 Albert
2020-04-13  4:53 ` Eli Zaretskii
2020-04-13  5:47   ` Eli Zaretskii
2020-04-13  6:12   ` =?gb18030?B?u9i4tKO6IFtQQVRDSF0gQWRkIElNRSBzdGF0dXMgY2hhbmdlIHN1cHBvcnQgb24gd2luZG93cyBuYXRpdmVseQ==?= =?gb18030?B?QWxiZXJ0?=
2020-04-13  6:24     ` =?gb18030?B?u9i4tKO6?= [PATCH] Add IME status change support on windows natively Eli Zaretskii
2020-04-13  6:27       ` =?gb18030?B?u9i4tKO6ILvYuLSjuiBbUEFUQ0hdIEFkZCBJTUUgc3RhdHVzIGNoYW5nZSBzdXBwb3J0IG9uIHdpbmRvd3MgbmF0aXZlbHk=?= =?gb18030?B?QWxiZXJ0?=
2020-04-13  6:43         ` =?gb18030?B?u9i4tKO6ILvYuLSjug==?= [PATCH] Add IME status change support on windows natively Eli Zaretskii
2020-04-13  6:47           ` =?gb18030?B?u9i4tKO6ILvYuLSjuiC72Li0o7ogW1BBVENIXSBBZGQgSU1FIHN0YXR1cyBjaGFuZ2Ugc3VwcG9ydCBvbiB3aW5kb3dzIG5hdGl2ZWx5?= =?gb18030?B?QWxiZXJ0?=
2020-04-13  7:05             ` 回复: 回复: 回复: [PATCH] Add IME status change support on windows natively Eli Zaretskii
2020-04-13  7:07               ` =?gb18030?B?u9i4tKO6ILvYuLSjuiC72Li0o7ogu9i4tKO6IFtQQVRDSF0gQWRkIElNRSBzdGF0dXMgY2hhbmdlIHN1cHBvcnQgb24gd2luZG93cyBuYXRpdmVseQ==?= =?gb18030?B?QWxiZXJ0?=
2020-04-13  7:21                 ` =?gb18030?B?u9i4tKO6ILvYuLSjuiC72Li0o7ogu9i4tKO6?= [PATCH] Add IME status change support on windows natively Eli Zaretskii
2020-04-13  7:26                   ` =?gb18030?B?u9i4tKO6ILvYuLSjuiC72Li0o7ogu9i4tKO6ILvYuLSjuiBbUEFUQ0hdIEFkZCBJTUUgc3RhdHVzIGNoYW5nZSBzdXBwb3J0IG9uIHdpbmRvd3MgbmF0aXZlbHk=?= =?gb18030?B?QWxiZXJ0?=
2020-04-13  9:22                     ` =?gb18030?B?u9i4tKO6ILvYuLSjuiC72Li0o7ogu9i4tKO6ILvYuLSjuiBbUEFUQ0hdIEFkZCBJTUUgc3RhdHVzIGNoYW5nZSBzdXBwb3J0IG9uIHdpbmRvd3MgbmF0aXZlbHk=?= =?gb18030?B?QWxiZXJ0?=
2020-04-13  9:33                       ` [PATCH] Add IME status change support on windows natively Eli Zaretskii
2020-04-13 10:02                         ` =?gb18030?B?u9i4tKO6IFtQQVRDSF0gQWRkIElNRSBzdGF0dXMgY2hhbmdlIHN1cHBvcnQgb24gd2luZG93cyBuYXRpdmVseQ==?= =?gb18030?B?QWxiZXJ0?=
2020-04-13 13:10                           ` [PATCH] Add IME status change support on windows natively Eli Zaretskii
2020-04-13 13:15                             ` =?gb18030?B?u9i4tKO6IFtQQVRDSF0gQWRkIElNRSBzdGF0dXMgY2hhbmdlIHN1cHBvcnQgb24gd2luZG93cyBuYXRpdmVseQ==?= =?gb18030?B?QWxiZXJ0?=
2020-04-13 13:44                               ` [PATCH] Add IME status change support on windows natively Eli Zaretskii
2020-04-14  2:13   ` Richard Stallman
2020-04-14  5:54     ` Eli Zaretskii
2020-04-15  2:56       ` Richard Stallman

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).