评估后如何留在同一个缓冲区窗口?

时间:2014-08-02 17:36:25

标签: emacs elisp ess

我试图编写一个函数R>来评估在活动ESS R过程中作为字符串给出的代码,并将基本转换返回到elisp数据结构或只返回nil。我不是一个经验elisp编码器,所以现在我只是想让一个真正基本的功能工作。

(defun R> (s)
  "Evaluate simple R command."
  (save-excursion
    (with-temp-buffer
      (setq ess-dialect "R")
      (let (out list)
    (setq tmpbuf (current-buffer))
    (ess-command (s-concat s "\n") tmpbuf)
    (setq list  (s-split "\w" (R>--remove-numbered-brackets)))
    (apply 'vector
           (--map
        (let ((it* (s-trim it)))
          ( if (s-numeric? it*)
              (string-to-number it*)
            (strip-inner-quotes it*)))
        list))))))

(defun R>--remove-numbered-brackets ()
  (replace-regexp-in-string "[\\[0-9\\]+]" "" (buffer-string)))

(defun strip-inner-quotes (s)
  "If the string has inner quotes, remove them."
  (replace-regexp-in-string "\"" "" s))

不幸的是,运行此操作会导致活动窗口发生变化。不是理想的行为!我认为save-excursion旨在防止这种情况,但我想我没有正确使用。是否有其他方法可以使用没有此问题的save-excursion

1 个答案:

答案 0 :(得分:2)

除了save-selected-window之外,使用save-excursion代替/。