Reputation: 190759
I need to get a range (or whole range) of current buffer, run program to process the range as an input, get the result and to put the string at the end of the current buffer.
I learned that shell-command-on-region can process a region.
I learned that shell-command-to-string can store the result of the program to a string.
Then, how can I implement 'shell-command-on-region-to-string'?
(defun shell-command-on-region-to-string (process &optional b e)
(interactive)
(let ((b (if mark-active (min (point) (mark)) (point-min)))
(e (if mark-active (max (point) (mark)) (point-max))))
?? (shell-command-on-region b e process (current-buffer) t)
?? how to store the return of a process to a string
?? how to insert the result at the end of current buffer
))
Upvotes: 6
Views: 1258
Reputation: 26529
(defun shell-command-on-region-to-string (start end command)
(with-output-to-string
(shell-command-on-region start end command standard-output)))
(defun shell-command-on-region-with-output-to-end-of-buffer (start end command)
(interactive
(let ((command (read-shell-command "Shell command on region: ")))
(if (use-region-p)
(list (region-beginning) (region-end) command)
(list (point-min) (point-max) command))))
(save-excursion
(goto-char (point-max))
(insert (shell-command-on-region-to-string start end command))))
Upvotes: 6