如何重写整个当前缓冲区与其他缓冲区?



我正在尝试编写自己的before-save-hook绑定函数来格式化我的代码。我已经找到命令行应用程序做格式。

所以我试着

  1. 复制当前缓冲区到临时文件
  2. 运行命令行应用程序格式化临时文件。
  3. 将其复制(覆盖)到当前缓冲区。

所以我写了这个函数,但不知道如何将文件内容复制回当前缓冲区

(defun my-format-before-save ()
(interactive)
(let* ((filename buffer-file-name)
(tempfilename (concat filename ".tmp")))
(unwind-protect
(progn (write-region (point-min) (point-max) tempfilename)
(shell-command-to-string (format "some-format %s" tempfilename))
;;(???) ;; how to copy and over write current buffer with tempfile?
)
(delete-file tempfilename))))

emacs有这个功能来完全重写当前缓冲区吗?是否有其他整洁/简洁的方式来达到我的目标?

感谢

我使用了一个额外的步骤来读取文件到临时缓冲区,并将缓冲区插入到当前缓冲区。

(defun my-format-before-save ()
(interactive)
(when (eq major-mode 'my-mode)
(let* ((filename buffer-file-name)
(tempfilename (concat filename ".tmp"))
(formatted-buffer (get-buffer-create "*formatted-buffer*")))
(unwind-protect
(progn (write-region (point-min) (point-max) tempfilename)
(with-current-buffer formatted-buffer
(erase-buffer)
(insert (shell-command-to-string (format "some-format %s" tempfilename))))
(erase-buffer)
(insert-buffer formatted-buffer)
)
(kill-buffer formatted-buffer)
(delete-file tempfilename)
))))

看起来我已经完成了我的目标,除了光标总是在格式化后回到当前缓冲区的(point-min)。

相关内容

最新更新