【问题标题】:How to copy a region or a whole buffer to another buffer in Emacs without affecting the kill ring?如何在不影响终止环的情况下将区域或整个缓冲区复制到 Emacs 中的另一个缓冲区?
【发布时间】:2013-01-31 22:10:14
【问题描述】:

我想将该区域复制到 Emacs 中的另一个(临时)缓冲区,但如果没有(活动)区域,我想复制整个当前缓冲区。我所做的如下:

(defun do-something-with-region-or-buffer ()
  (interactive)
  (save-excursion
    (let ((begin (point-min)) (end (point-max)))
      (when (region-active-p)
        (setq begin (region-beginning))
        (setq end (region-end)))
      (copy-region-as-kill begin end)
      (with-temp-buffer
        (switch-to-buffer (current-buffer))
        (rename-buffer "*My Temp Buffer*")
        (delete-other-windows)
        (yank)
        (do-something-with-current-buffer)))))

但是,我有一种强烈的感觉,那就是这不是最理想的,因为我在搞乱杀戮戒指。如何在不影响的情况下做到这一点? (额外的问题:我对区域的处理方式是还是整个缓冲区如果没有活动区域是一个好的?)

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    我就是这样做的:

    (defun aak/dswrob ()
      (interactive)
      (let* ((regionp (region-active-p))
             (beg (and regionp (region-beginning)))
             (end (and regionp (region-end)))
             (buf (current-buffer)))
        (with-temp-buffer
          (switch-to-buffer (current-buffer) nil t)
          (rename-buffer "*My Temp Buffer*" t)
          (insert-buffer-substring buf beg end)
          (read-key-sequence "Keys?"))))
    

    由您决定是否需要insert-buffer-substringinsert-buffer-substring-no-properties,不过没必要用 杀死戒指。

    在内部交互地做一些事情也很奇怪 with-temp-buffer: 你要在那里运行一种模态循环吗? 还是只是显示一些进展?

    在处理区域整个缓冲区时(注意:模 缩小),这并不罕见(见 replace-string 和 朋友)。

    【讨论】:

    • 非常感谢!如果没有其他更好的答案出现,我会在明天左右接受这个。至于with-temp-buffer:它是一种视觉玩具,用当前缓冲区的内容做一些有趣的事情,我希望它在完成后消失。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 2014-04-27
    • 2021-09-03
    相关资源
    最近更新 更多