如何解决如何用其他缓冲区重写整个当前缓冲区?
我正在尝试编写我自己的 before-save-hook
绑定函数来格式化我的代码。我找到了命令行应用程序来格式化。
所以我想
(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 有这个功能可以完全重写当前缓冲区吗? 是否有另一种简洁/elisp 风格的方式来达到我的目标?
谢谢
解决方法
我使用额外的步骤将文件读取到临时缓冲区并将缓冲区插入到当前缓冲区。
(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)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。