当前位置:  开发笔记 > 开发工具 > 正文

.emacs global-set-key并使用参数调用交互式函数

如何解决《.emacsglobal-set-key并使用参数调用交互式函数》经验,为你挑选了2个好方法。

在我的.emacs中,我有以下功能来转置一条线

(defun move-line (n)
   "Move the current line up or down by N lines."
   (interactive "p")
   (let ((col (current-column))
         start
         end)
     (beginning-of-line)
     (setq start (point))
     (end-of-line)
     (forward-char)
     (setq end (point))
     (let ((line-text (delete-and-extract-region start end)))
       (forward-line n)
       (insert line-text)
       ;; restore point to original column in moved line
       (forward-line -1)
       (forward-char col))))

我像这样绑定一把钥匙

(global-set-key (kbd "M-") 'move-line)
;; this is the same as M-x global-set-key 

但是,我想将M-up绑定到移动线(-1)但是我似乎无法正确地做到:

;; M-- M-1 M-x global-set-key 

如何使用global-set-key调用move-line -1来定义上述内容?



1> yrral..:

在提出问题之后几分钟我就通过复制+粘贴代码来解决问题.但是我不知道它是如何工作的.

(global-set-key (kbd "M-") (lambda () (interactive) (move-line -1)))


你创建了一个anomynous函数(`lambda`),它只是你用函数`-1`调用的函数的包装器.如果您想获得更多信息,请搜索"lambda"的互联网或emacs信息.
除了danielpoe所说的还有重要的信息:在任何lisp函数中都需要``(interactive)`,它意味着通过键绑定或其他方法与用户"交互".这就是允许它成为键控的东西.如果你的函数中没有``(interactive)',它可以从其他代码中调用_only_.

2> Martin Redmo..:

global-set-key只接受2个参数:键序列和要绑定到它的命令.所以

(global-set-key (kbd "M-") 'move-line)

工作良好.但是如果你想使用带参数的move-line,你需要将它包装在一个匿名(aka lamba)函数中,以便它将global-set-key作为一个值呈现给自己.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有