用 Elisp(输入法)写一个简单的切换函数
Writing a simple toggle function with Elisp (input-method)
所以,我尝试了以下方法
(defun toggle-input-chinese ()
(if (equal current-input-method 'chinese-py)
(set-input-method chinese-sisheng)
(set-input-method chinese-py)))
现在,基本上,我想写中文或拼音。我发现没有简单的方法可以在非标准输入之间进行切换。因此,我决定写这个函数并绑定一个键。
好的。我的问题是:它引发了错误 (void-variable chinese-py)
。我不知道如何将当前方法等同于列出的方法。我该怎么做?
-- 编辑
此版本可正常使用。
可以在条件中放入其他输入的列表,然后您将在语言环中切换。最后,将它绑定到某个键。
这是一种比这里设想的更简单的方法:
Is it possible to alternate two input methods in Emacs?
(defun toggle-input-chinese ()
(interactive)
(if (equal (car input-method-history) "chinese-py")
(set-input-method 'chinese-py)
(set-input-method 'chinese-sisheng)))
您正在将 chinese-py
或 chinese-sisheng
作为变量传递给函数 set-input-method
。 Lisp 在调用函数之前评估函数的参数。它尝试评估该变量,但该符号没有作为变量的值。
您要做的是传递 符号 chinese-py
或 chinese-sisheng
,而不是将其值作为变量(它有 none).
尝试同时引用 chinese-py
和 chinese-sisheng
:
(defun toggle-input-chinese ()
(interactive) ; If you want to use it as a command
(if (equal (car input-method-history) "chinese-py")
(set-input-method 'chinese-sisheng)
(set-input-method 'chinese-py)))
这是一样的:
(defun toggle-input-chinese ()
(interactive) ; If you want to use it as a command
(set-input-method (if (equal (car input-method-history) "chinese-py")
'chinese-sisheng
'chinese-py)))
所以,我尝试了以下方法
(defun toggle-input-chinese ()
(if (equal current-input-method 'chinese-py)
(set-input-method chinese-sisheng)
(set-input-method chinese-py)))
现在,基本上,我想写中文或拼音。我发现没有简单的方法可以在非标准输入之间进行切换。因此,我决定写这个函数并绑定一个键。
好的。我的问题是:它引发了错误 (void-variable chinese-py)
。我不知道如何将当前方法等同于列出的方法。我该怎么做?
-- 编辑
此版本可正常使用。 可以在条件中放入其他输入的列表,然后您将在语言环中切换。最后,将它绑定到某个键。
这是一种比这里设想的更简单的方法: Is it possible to alternate two input methods in Emacs?
(defun toggle-input-chinese ()
(interactive)
(if (equal (car input-method-history) "chinese-py")
(set-input-method 'chinese-py)
(set-input-method 'chinese-sisheng)))
您正在将 chinese-py
或 chinese-sisheng
作为变量传递给函数 set-input-method
。 Lisp 在调用函数之前评估函数的参数。它尝试评估该变量,但该符号没有作为变量的值。
您要做的是传递 符号 chinese-py
或 chinese-sisheng
,而不是将其值作为变量(它有 none).
尝试同时引用 chinese-py
和 chinese-sisheng
:
(defun toggle-input-chinese ()
(interactive) ; If you want to use it as a command
(if (equal (car input-method-history) "chinese-py")
(set-input-method 'chinese-sisheng)
(set-input-method 'chinese-py)))
这是一样的:
(defun toggle-input-chinese ()
(interactive) ; If you want to use it as a command
(set-input-method (if (equal (car input-method-history) "chinese-py")
'chinese-sisheng
'chinese-py)))