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

Emacs:如何将用户提供的最后一个参数存储为默认值?

如何解决《Emacs:如何将用户提供的最后一个参数存储为默认值?》经验,为你挑选了2个好方法。

我正在编写一个交互式函数,我想记住用户提供的最后一个参数并将其用作默认值.

(defun run-rake (param)
  (interactive "sTask: ")
  (shell-command (format "rake %s" task)))

第一次调用该函数时,我希望它记住用户提供的参数,以便下次调用该函数时,只需按Enter键,它将使用前一次提供的值.

我似乎无法在文档中找到这个 - 你如何在elisp中做到这一点?



1> Trey Jackson..:
read-from-minibuffer

是你想要使用的.它有一个历史变量的位置.

以下是一些示例代码:

(defvar run-rake-history nil "History for run-rake")
(defun run-rake (cmd)
(interactive (list (read-from-minibuffer "Task: " (car run-rake-history) nil nil 'run-rake-history)))
  (shell-command (format "rake %s " cmd)))

显然可以根据您的需求进行定制.'run-rake-history只是一个变量,用于存储这个'read-from-minibuffer'调用的历史记录.另一个选择是使用'完成 - 读 - 但假设您有一个选项列表,您希望限制用户使用(通常情况不是像shell一样的命令).



2> jfm3..:

您可以看到compile命令如何执行此操作.打开编译命令的帮助文本C-h f compile,将光标移到包含该函数的文件的名称上,然后单击RETURN.这将打开源文件compile.

基本上,有一个动态/全局变量compile-command保存最后一个编译命令.Emacs是一个单用户,单线程系统,所以真的不需要更多.还要记住,Elisp是一个非常古老的学校Lisp,变量有动态(调用堆栈),而不是词法,范围.在这种系统中,很自然地:

(let ((compile-command "gcc -o foo foo.c frobnicate.c"))
     ...
     (compile)
     ...)

说到compile命令,您是否尝试过使用它而不是自己的run-rake功能?

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