diff options
-rw-r--r-- | misc/emacs/go-mode.el | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/misc/emacs/go-mode.el b/misc/emacs/go-mode.el index 47d790db4..42336a0fe 100644 --- a/misc/emacs/go-mode.el +++ b/misc/emacs/go-mode.el @@ -475,4 +475,15 @@ Useful for development work." "Pipe the current buffer through the external tool `gofmt`." (interactive) - (shell-command-on-region 1 (+ (buffer-size) 1) "gofmt" t t shell-command-default-error-buffer)) + ;; for some reason save-excursion isn't working + ;; probably because shell-command-on-region deletes the contents of the + ;; region before filling in the new values + ;; so we will save the point/mark by hand + ;; similarly we can't use push-mark/pop-mark + (let ((old-mark (mark t)) (old-point (point))) + (save-restriction + (let (deactivate-mark) + (widen) + (shell-command-on-region (point-min) (point-max) "gofmt" t t shell-command-default-error-buffer))) + (goto-char (min old-point (point-max))) + (if old-mark (set-mark (min old-mark (point-max)))))) |