如何在emacs lisp中硬编码参数?

如何在emacs lisp中硬编码参数?,emacs,lisp,elisp,Emacs,Lisp,Elisp,我的.emacs中有以下函数,在我工作了适当的时间后通知我 问题是,我无法硬编码time和msg的值,所以每次都必须重新输入它们 (defun timed-notification(time msg) (interactive "sNotification when (e.g: 2 minutes, 60 seconds, 3 days): \nsMessage: ") (run-at-time time nil (lambda

我的
.emacs
中有以下函数,在我工作了适当的时间后通知我

问题是,我无法硬编码time和msg的值,所以每次都必须重新输入它们

(defun timed-notification(time msg)
  (interactive "sNotification when (e.g: 2 minutes, 60 seconds, 3 days): \nsMessage: ")
  (run-at-time time
               nil
               (lambda (msg) (terminal-notifier-notify "Pomodoro" msg))
               msg))
(setq column-number-mode t)
如何将时间设置为“25分钟”,并将消息设置为“休息一下,时间到了!”

以下是我的尝试:

(defun timed-notification()
  ;(interactive "sNotification when (e.g: 2 minutes, 60 seconds, 3 days): \nsMessage: ")
  (run-at-time 25
               nil
               (lambda ("Time's up")
                 (terminal-notifier-notify "Take a break, time's up!" msg))
               msg))
(setq column-number-mode t)

您去掉了
msg
参数,但仍在尝试使用它。使用
let
将局部变量绑定到该值

(defun timed-notification()
  (interactive)
  (let ((msg "Take a break, time's up!"))
    (run-at-time 25 nil (lambda (mess) (terminal-notifier-notify "pomodoro" mess)) msg)))

您去掉了
msg
参数,但仍在尝试使用它。使用
let
将局部变量绑定到该值

(defun timed-notification()
  (interactive)
  (let ((msg "Take a break, time's up!"))
    (run-at-time 25 nil (lambda (mess) (terminal-notifier-notify "pomodoro" mess)) msg)))

像最初一样定义函数,然后使用所需的参数调用它一次。
interactive
表单,顾名思义,仅在实际以交互方式调用函数时使用。当您从代码中调用它时,您传递参数;因此,
交互式
表单被忽略

(defun timed-notification (time msg)
  (interactive "sNotification when (e.g: 2 minutes, 60 seconds, 3 days): \nsMessage: ")
  (run-at-time time nil (lambda (msg) (terminal-notifier-notify "Pomodoro" msg)) msg))
(setq column-number-mode t)
(timed-notification 25 "Take a break, time's up!")  ;; New addition

像最初一样定义函数,然后使用所需的参数调用它一次。
interactive
表单,顾名思义,仅在实际以交互方式调用函数时使用。当您从代码中调用它时,您传递参数;因此,
交互式
表单被忽略

(defun timed-notification (time msg)
  (interactive "sNotification when (e.g: 2 minutes, 60 seconds, 3 days): \nsMessage: ")
  (run-at-time time nil (lambda (msg) (terminal-notifier-notify "Pomodoro" msg)) msg))
(setq column-number-mode t)
(timed-notification 25 "Take a break, time's up!")  ;; New addition
现在可以为常规pomo调用tf,而当我需要x分钟休息时,原始函数仍然可用


现在可以为常规pomo调用tf,而当我需要x分钟休息时,原始函数仍然可用

谢谢,我相信这是可行的,但是现在我无法用m-x启动定时通知。添加类似(交互式“sadfasdf”)的伪行可以再次使用M-x查找定时通知,但它不会运行(“参数数量错误:(lambda nil(交互式“sadfa…””)。在此处填写newb,因此解决方案可能很简单。如果函数不带参数,则它应该是
(交互式的)
。交互式的参数字符串中的每一行都是参数提示。谢谢,我自己也意识到了这一点。当我复制他的代码时,我甚至没有注意到这一点。我已经修复了它。我为lambda中的变量和函数中的变量使用了不同的变量名,以明确区分。谢谢,我确信这一点工作正常,但现在我无法用m-x启动定时通知。添加一个伪行(交互式“sadfasdf”)使定时通知可以再次用m-x查找,但它不会运行(“参数数目错误:(lambda nil(交互式“sadfa…”)).Complete newb,因此解决方案可能很简单。如果函数不带参数,则应为
(交互式)
。交互式的参数字符串中的每一行都是参数提示。谢谢,我自己也意识到了这一点。当我复制他的代码时,我甚至没有注意到这一点。我已经修复了它。我为lambda中的变量和函数中的变量使用了不同的变量名,以明确区别。谢谢。也许我可以d制作一个新的(交互式)函数调用(定时通知25“times up!”)并调用其他函数。这样我就不必破坏原来的函数。谢谢。也许我可以制作一个新的(交互式)函数调用(定时通知25“times up!”)这样我就不必破坏原来的函数了。也许还需要注意,也许还需要注意