代码之家  ›  专栏  ›  技术社区  ›  Kyle Burton

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

  •  8
  • Kyle Burton  · 技术社区  · 16 年前

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

    第一次调用函数时,我希望它记住用户提供的参数,以便下次调用函数时,他们只需按enter键,它将使用上次提供的值。

    3 回复  |  直到 16 年前
        1
  •  8
  •   Trey Jackson    16 年前
    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)))
    

        2
  •  5
  •   jfm3    16 年前

    你可以看到 compile C-h f compile RETURN . 这将为您打开源文件 编写 .

    基本上,有一个动态/全局变量 compile-command

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

    说到 编写 run-rake 作用

        3
  •  0
  •   Kyle Burton    16 年前

    (defvar *editconf-ruby-run-rake-last-rake-task* nil)
    
    (defun editconf-ruby-run-rake-last-rake-task (&optional new-val)
      (when new-val
        (setf *editconf-ruby-run-rake-last-rake-task* new-val))
      *editconf-ruby-run-rake-last-rake-task*)
    
    (defun editconf-ruby-run-rake (task-name)
      "Execute rake `task-name'.  See                                                                                            
    `krb-ruby-get-rakefile-path-for-current-buffer' for how the                                                                  
    Rakefile is located.."
      (interactive
       (let* ((rakefile (krb-ruby-get-rakefile-path-for-current-buffer))
              (rake-tasks (krb-ruby-get-rake-tasks rakefile))
              (default-task (or (editconf-ruby-run-rake-last-rake-task)
                                (editconf-ruby-run-rake-last-rake-task (car rake-tasks)))))
         (list
          (read-string (format "Task [%s|%s]: "
                               rake-tasks
                               default-task)
                       nil nil default-task))))
      (editconf-ruby-run-rake-last-rake-task task-name)
      (let ((cmd (format "cd %s; rake %s"
                         (krb-lisp-strip-path-suffix rakefile 1)
                         task-name)))
        (message "editconf-ruby-run-rake: cmd='%s'" cmd)
        (shell-command cmd)))