我写了个MacOS下的输入法切换工具:macism

我也不懂这个,是一些函数上都需要加 static 么?未用的变量是哪个,我可以删除后重新生成 patch 试试

你make的时候会看见nsfns.m有几个warning,不过编译能通过,也不影响使用,就是不太好看。

  • cfdata_to_lisp
  • cfstring_to_lisp_nodecode
  • cfstring_to_lisp
  • cfstring_create_with_utf8_cstring
  • cfstring_create_with_string_noencode
  • cfstring_create_with_string
  • mac_create_input_source_from_lisp
  • mac_input_source_properties

这些没有在外部使用,应该都可以加 static,我来加一下,去掉一些注释的代码

mac_create_input_source_from_lisp和mac_input_source_properties不用加static。

1 个赞

我改过 static 以及去掉一些注释了,正常可用。

PR没问题,merge了。

2 个赞

你好,sis 上周的更新好像冲掉了我这个 pr

我想到一个问题,这么改动的话,terminal下是不是有问题?
太久没写elisp,我记不清细节了。

好像是有问题,Error running timer ‘sis--auto-refresh-timer-restart’: (error "Window system is not in use or not initialized") [6 times],不知道改为 (memq (window-system) '(mac ns)) 是不是可以,我也不太熟悉elisp😂。

嗯。这样没问题。改了。

1 个赞

我准备尝试下这个 patch,我的理解是,patch 完毕就可以像 Emacs Mac Port 一样开箱即用了,也就不再需要 macism 了,为什么还需要给 macism 提 PR 呢?

我给 sis 提的 pr,不是 macism。macism 的那个 pr 是很久之前还没有这个 patch 的时候。

明白啦!

感谢前辈!Emacs Plus 打上 patch 后,sis 里面还是按照 Emacs Mac Port 来设置,就可以直接使用了!

你还在用这个 patch 么,我发现最新的 emacs master代码 patch上了,但是找不到 mac-input-source 这个方法,很奇怪,看了下文件 src/nsfns.m也没有什么变化

我不用patch,我是直接改代码的,每次自动merge没有问题,最近一次merge是1月8日的代码。

没啥问题,我改了下切换的代码。

(if (and (eq system-type 'darwin) (fboundp 'mac-input-source))
    (progn
      (defvar ime-list '("im.rime.inputmethod.Squirrel.Hans" "com.apple.keylayout.ABC"))

      (defun toggle-ime ()
        (interactive)
        (let* ((current-ime (mac-input-source))
               (next-ime (or (cadr (member current-ime ime-list))
                             (car ime-list))))  ;; Cycle to the next IME or start from the beginning
          (mac-select-input-source next-ime)))

      ;; Bind F13 to toggle IME
      (global-set-key (kbd "<f13>") 'toggle-ime)))

macism升级到v2了,使用了另外一种机制,
不再需要用户授予“辅助功能”权限,
也不需要人为地delay,因此性能和可靠性都大幅提高。

1 个赞