Commit 4e15dbe0 authored by Dominik Honnef's avatar Dominik Honnef Committed by Brad Fitzpatrick

misc/emacs: Do not modify kill ring when programmatically deleting text

Operations like gofmt and go-remove-unused-imports delete entire
lines of text. Previously this put them on the kill-ring,
negatively affecting user experience.

R=adonovan
CC=gobot, golang-dev
https://golang.org/cl/9605043
parent fdc4ce6e
...@@ -42,6 +42,19 @@ ...@@ -42,6 +42,19 @@
'kill-whole-line 'kill-whole-line
'kill-entire-line)) 'kill-entire-line))
;; Delete the current line without putting it in the kill-ring.
(defun go--delete-whole-line (&optional arg)
;; Emacs uses both kill-region and kill-new, Xemacs only uses
;; kill-region. In both cases we turn them into operations that do
;; not modify the kill ring. This solution does depend on the
;; implementation of kill-line, but it's the only viable solution
;; that does not require to write kill-line from scratch.
(flet ((kill-region (beg end)
(delete-region beg end))
(kill-new (s) ()))
(go--kill-whole-line arg)))
;; XEmacs unfortunately does not offer position-bytes. We can fall ;; XEmacs unfortunately does not offer position-bytes. We can fall
;; back to just using (point), but it will be incorrect as soon as ;; back to just using (point), but it will be incorrect as soon as
;; multibyte characters are being used. ;; multibyte characters are being used.
...@@ -524,7 +537,7 @@ buffer." ...@@ -524,7 +537,7 @@ buffer."
(goto-char (point-min)) (goto-char (point-min))
(forward-line (- from line-offset 1)) (forward-line (- from line-offset 1))
(incf line-offset len) (incf line-offset len)
(go--kill-whole-line len))) (go--delete-whole-line len)))
(t (t
(error "invalid rcs patch or internal error in go--apply-rcs-patch"))))))))) (error "invalid rcs patch or internal error in go--apply-rcs-patch")))))))))
...@@ -853,7 +866,7 @@ will be commented, otherwise they will be removed completely." ...@@ -853,7 +866,7 @@ will be commented, otherwise they will be removed completely."
(beginning-of-line) (beginning-of-line)
(if arg (if arg
(comment-region (line-beginning-position) (line-end-position)) (comment-region (line-beginning-position) (line-end-position))
(go--kill-whole-line))) (go--delete-whole-line)))
(message "Removed %d imports" (length lines))) (message "Removed %d imports" (length lines)))
(if flymake-state (flymake-mode-on))))) (if flymake-state (flymake-mode-on)))))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment