mirror of
https://github.com/golang/go
synced 2024-11-22 02:14:40 -07:00
misc/emacs: Restore the window position after a successful gofmt.
This adds restoring the window position so that the buffer doesn't jump around after the erase/copy. R=sameer CC=golang-dev https://golang.org/cl/5981055
This commit is contained in:
parent
a96a983606
commit
9d063816ef
@ -743,34 +743,37 @@ Replace the current buffer on success; display errors on failure."
|
||||
(let ((currconf (current-window-configuration)))
|
||||
(let ((srcbuf (current-buffer)))
|
||||
(with-temp-buffer
|
||||
(let ((outbuf (current-buffer))
|
||||
(errbuf (get-buffer-create "*Gofmt Errors*"))
|
||||
(coding-system-for-read 'utf-8) ;; use utf-8 with subprocesses
|
||||
(coding-system-for-write 'utf-8))
|
||||
(with-current-buffer errbuf (erase-buffer))
|
||||
(with-current-buffer srcbuf
|
||||
(save-restriction
|
||||
(let (deactivate-mark)
|
||||
(widen)
|
||||
(if (= 0 (shell-command-on-region (point-min) (point-max) "gofmt"
|
||||
outbuf nil errbuf))
|
||||
;; restore window config
|
||||
;; gofmt succeeded: replace the current buffer with outbuf,
|
||||
;; restore the mark and point, and discard errbuf.
|
||||
(let ((old-mark (mark t)) (old-point (point)))
|
||||
(set-window-configuration currconf)
|
||||
(erase-buffer)
|
||||
(insert-buffer-substring outbuf)
|
||||
(goto-char (min old-point (point-max)))
|
||||
(if old-mark (push-mark (min old-mark (point-max)) t))
|
||||
(kill-buffer errbuf))
|
||||
(let ((outbuf (current-buffer))
|
||||
(errbuf (get-buffer-create "*Gofmt Errors*"))
|
||||
(coding-system-for-read 'utf-8) ;; use utf-8 with subprocesses
|
||||
(coding-system-for-write 'utf-8))
|
||||
(with-current-buffer errbuf (erase-buffer))
|
||||
(with-current-buffer srcbuf
|
||||
(save-restriction
|
||||
(let (deactivate-mark)
|
||||
(widen)
|
||||
(if (= 0 (shell-command-on-region (point-min) (point-max) "gofmt"
|
||||
outbuf nil errbuf))
|
||||
;; restore window config
|
||||
;; gofmt succeeded: replace the current buffer with outbuf,
|
||||
;; restore the mark and point, and discard errbuf.
|
||||
(let ((old-mark (mark t))
|
||||
(old-point (point))
|
||||
(old-start (window-start)))
|
||||
(erase-buffer)
|
||||
(insert-buffer-substring outbuf)
|
||||
(set-window-configuration currconf)
|
||||
(set-window-start (selected-window) (min old-start (point-max)))
|
||||
(goto-char (min old-point (point-max)))
|
||||
(if old-mark (push-mark (min old-mark (point-max)) t))
|
||||
(kill-buffer errbuf))
|
||||
|
||||
;; gofmt failed: display the errors
|
||||
(display-buffer errbuf)))))
|
||||
;; gofmt failed: display the errors
|
||||
(display-buffer errbuf)))))
|
||||
|
||||
;; Collapse any window opened on outbuf if shell-command-on-region
|
||||
;; displayed it.
|
||||
(delete-windows-on outbuf))))))
|
||||
;; Collapse any window opened on outbuf if shell-command-on-region
|
||||
;; displayed it.
|
||||
(delete-windows-on outbuf))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun gofmt-before-save ()
|
||||
|
Loading…
Reference in New Issue
Block a user