我试图编写一个函数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
?
答案 0 :(得分:2)
除了save-selected-window
之外,使用save-excursion
代替/。