我对elisp不太熟悉,我正在努力学习。在emacs中,我希望能够执行以下操作:
将突出显示的文本更改为“情节(突出显示的文字)”。也就是说,我想用括号括起highlited文本,并在它前面添加我输入的文本。
(defun wrap-text ()
)
我认为函数的输入是突出显示的文本,但我不知道从哪里开始查找。另一个难点是输入文本部分。有人可以指导我吗?感谢。
答案 0 :(得分:8)
对于您的情况,这应该有效:
(defun wrap-text (b e txt)
"simple wrapper"
(interactive "r\nMEnter text to wrap with: ")
(save-restriction
(narrow-to-region b e)
(goto-char (point-min))
(insert txt)
(insert "(")
(goto-char (point-max))
(insert ")")))
(global-set-key (kbd "C-x M-w") 'wrap-text)
答案 1 :(得分:3)
更接近你的版本,但有一些变化:
以下是一个例子:
(defun wrap-in-function ()
"Wrap marked region with a specified PREFIX and closing parentheses."
(interactive)
(let ((prefix (read-from-minibuffer "function: ")))
(save-excursion
(goto-char (region-beginning))
(insert (concat prefix "(")))
(save-excursion
(goto-char (region-end))
(insert ")"))))
两个版本之间的另一个区别是调用函数后该点的位置; trey版本可能更好用(味道问题)。
编辑:按照vinh评论进行编辑。
答案 2 :(得分:2)
这需要'cl但是否则非常小。已经使用了几年。
(require 'cl) ;;if you haven't elsewhere
(defun decorate-region( beg end prefix suffix )
(interactive "r\nMPrefix: \nMSuffix: ")
(cl-set-buffer-substring beg end (concat prefix
(buffer-substring beg end)
suffix)))
答案 3 :(得分:1)
(defun ess-R-wrap-content-vqn ()
"Wrap marked region with a specified PREFIX and closing parentheses."
(interactive)
(set (make-local-variable 'prefix) (read-from-minibuffer "function: "))
(set (make-local-variable 'prefix) (concat prefix "("))
(save-excursion (goto-char (region-beginning)) (insert prefix))
(save-excursion (goto-char (region-end)) (insert ")"))
)
(define-key ess-mode-map "\C-c\M-w" 'ess-R-wrap-content-vqn) ;; w is for wrap
我认为stackoverflow会在发布解决方案时通知我。再次,谢谢。从中学到更多的elisp。