Projectile is great for this. I use C-c P u to run projectile-run-project and it runs my run command. I use it for golang mostly. If you run it while it's already running it will ask if you want to kill it first. I'm sure there's a way to automate that.
Emacs
A community for the timeless and infinitely powerful editor. Want to see what Emacs is capable of?!
Get Emacs
Rules
- Posts should be emacs related
- Be kind please
- Yes, we already know: Google results for "emacs" and "vi" link to each other. We good.
Emacs Resources
Emacs Tutorials
- Beginner’s Guide to Emacs
- Absolute Beginner's Guide to Emacs
- How to Learn Emacs: A Hand-drawn One-pager for Beginners
Useful Emacs configuration files and distributions
Quick pain-saver tip
Maybe do it all in the makefile? Then use projectile or something to "make"...
I did wonder if that's perhaps the solution, although not sure how you would get the pid in a make file to kill the running instance, make files are not something I have played with much, I will see if others have any suggestions.
There's only one running *compilation*
buffer allowed at a time, so if you use M-x compile
(which I've had bound to C-x C-e
for like 20 years), that should roughly ensure it.
In the past, I also had a bit of elisp to – IIRC – create and rename multiple compilation buffers to be able to run multiple things at once (multiple servers in a control plane).
Okay so what I think your saying is if i do something like this as the compilation command
go build main.go && ./main
Then when I run compilation again it will kill the buffer and running process and all will be good ?
In which case I wonder why you are not running go run anyway?
Probably because I was just getting into golang and following a tutorial which did not mention using go run, but I will now thanks :)
yes, should do. It'll prompt you if you want to kill the existing live compilation to start the new one. If it's already dead, it'll just launch the new compilation.
One trick, as well, is if you rename the existing *compilation*
buffer, it will live on its own lifecycle, so you rename it to *server*
or whatever, and still do compilation cycles (eg. just go build main.go
) while the existing main
from the previous run is still live.
Awesome I will give that a try :)
Simplest way to achieve this is by getting recompile-on-save to recompile for you. Because your process is long-running, also configure compilation-always-kill
to be t
.
You might also want to set compilation-ask-about-save
as nil
.