Emacs,转换&#34; M-x命令<ret> <tab>&#34;单一命令</tab> </ret>

时间:2014-07-19 22:49:04

标签: emacs

我最近沉浸在Vim中已经被宠坏了。很容易在那里创建一个宏,它将组合导致提示的键击。例如,以下,c,我得到了颜色方案的提示,以及通过键入Tab生成的列表。

" colorscheme switcher
nnoremap <leader>c :colorscheme <C-z><S-Tab>

现在我意识到,我不知道怎么做Emacs。这是对代码如何进行的天真尝试,

(defun load-theme-prompt ()
       (interactive)
       (load-theme)
       (kbd "<tab>"))

当然这不起作用,我确实尝试录制宏并插入(甚至试过kmacro),但它抱怨'不是主题,但我没看到宏输出中的任何引号。

也就是说,我尝试记录M-x load-theme <RET> <TAB>,并插入缓冲区,但该功能不起作用,即使我修剪了部分。

这是录制的宏不起作用,

(fset 'load-theme-prompt
   [?\M-x ?l ?o ?a ?d tab ?t ?h tab return tab])

尝试M-x load-theme-prompt会给我以下错误,

load-theme: Invalid theme name `'

load-theme-prompt

根据法律名单的评论,我又拍了一张照片,但现在我的参数数量错误了:

(defun load-theme-prompt ()
  (interactive 
   (list
    (intern (completing-read "Load custom theme: "
                             (mapcar 'symbol-name
                                     (custom-available-themes))))
   nil nil))
  (load-theme "%s")
  )

我已尝试将nil nil移至(load-theme "%s" nil nil),但仍无效。

1 个答案:

答案 0 :(得分:3)

只需查看代码,您应该将其更改为以下内容:

(defun load-theme-prompt (name arg2 arg3)
  (interactive 
   (list
    (intern (completing-read "Load custom theme: "
                             (mapcar 'symbol-name
                                     (custom-available-themes))))
   nil nil))
  (load-theme name arg2 arg3))

(interactive ...)将参数传递给函数,但是您的函数不带参数。 另外,您实际上并不想将文字"%s"传递给load-theme。