简体   繁体   中英

Referencing a PROCESS in Emacs (ESS R)

I am trying to run a command from Emacs using ESS, to send code to the R buffer (though I have stumbled onto this problem in python as well).

I can't figure out though how to use:

(ess-send-string PROCESS STRING)

I do not understand how I can, while calling this function from the script buffer, send a string to the associated *R* buffer.

I have tried using comint and process-send-string , but I guess I do not understand how to send a process. A buffer name did not do it, what will?

Example:

(defun create-rtags () 
  (interactive)
  (ess-send-string PROCESS "rtags(ofile=paste0(getwd(), \"TAGS\"))")

You can use get-process to have the right process or ess-get-process if you use the latest of ESS version on github.

(ess-send-string (get-process "R") "a <- 1:10;a")

Result in

[1]  1  2  3  4  5  6  7  8  9 10

So for your function, something like this should work

(defun create-rtags () 
  (interactive)
  (ess-send-string (get-process "R") "rtags(ofile = file.path(getwd(), \"TAGS\"))"))

To add to @dickoa answer. ESS handles multiple processes and they are all listed in ess-proces-name-list . "R" is the name of the first open R process. In ESS buffers there is local vairable ess-local-process-name which links the buffer with the process.

FWIW, Cc Ce Ct is bound to ess-build-tags-for-directory in ESS. It is smart enough to send rtags command from R buffers and a regexp etag request (based on current imenu regexp) from other buffers.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM