blacken icon indicating copy to clipboard operation
blacken copied to clipboard

Apply patch instead of replacing whole buffer

Open bdarnell opened this issue 7 years ago • 5 comments

Replacing the entire buffer with copy-to-buffer is disruptive: It's a delete followed by a replace, and many links within emacs (including compilation, grep, and occur buffers) will overreact to the deletion by redirecting all links to the beginning of the file. (Reinserting the whole file also causes it to be reparsed for syntax highlighting, which can be kind of slow)

The support for gofmt in go-mode shows a better way, although it's unfortunately a nontrivial amount of code. go-mode asks for a diff instead of rewriting the whole file, then parses the diff and translates it into editing commands. It would be nice if blacken did the same (It would be even nicer if there were one meta-fmt mode for emacs so that this wheel doesn't have to be reinvented for every formatting tool).

bdarnell avatar Oct 28 '18 14:10 bdarnell

Hi,

I agree to every point in this issue.

I have very limited time, so I spend it on @dry-python project mostly.

If anyone can work on this and submit a PR, I will be more than happy to merge it.

Regards, Artem.

proofit404 avatar Oct 29 '18 00:10 proofit404

@bdarnell After a very short discussion on /r/emacs, I've created #19, which is a more sensitive way to replace buffer contents.

pmiddend avatar Feb 27 '19 11:02 pmiddend

#19 was reverted, are there any plans to try to re-implement the functionality?

jidicula avatar Oct 07 '20 15:10 jidicula

Personally I use https://github.com/raxod502/apheleia which uses a patch and tries very hard that your cursor doesn't move when reformatting. Maybe that's a good alternative.

dakra avatar Oct 07 '20 15:10 dakra

I'm trying out https://github.com/wbolster/emacs-python-black, but I haven't used it enough to observe how/if the cursor moves when reformatting.

I'll give apheleia a try, though, thanks @dakra!

jidicula avatar Oct 07 '20 15:10 jidicula