Compile, run and clear programs in different languages with a single command.
Currently C, C++, Java, Python, Rust, Go, latex and shell scripts are supported.
The scripts are written in POSIX shell so they can be easily extended to add more languages.
The idea for this script initially came when I was compiling and running C and C++ programs and wanted to have it done in a single command rather than 2 separate commands. Initially I just aliased the required commands to c
. Then I wanted the command to clear out the binaries and other unecessary intermediate files generated during compilation(I'm looking at you Java), so I turned it into a script.
Yes, I am aware that these just save me a couple of keystrokes but I was bored one evening and thought I'd do the typical Linux user thing of spending 6 hours to automate something that takes you 6 seconds. And over thousands of compilations and clears it's saved me a good amount of time.
For just the compilation script, add the c
file from this repo, somewhere on your PATH. Then you can run c filename
to compile any script in a supported language.
On it's own buildSystem
isn't very useful. Essentially, it runs c
and requests user input(i.e. press enter) before exiting. But this behaviour allows it to run your code in a pop up terminal for quick testing. This is especially useful in text editors like vim and sublime where there isn't a very convenient way to run programs. To use buildSystem
download it and add it somewhere on your PATH
Add a new build system and put the following in it's .sublime-build file
{
"shell_cmd": "st -e buildSystem '$file'"
}
Now whenever you press Ctrl+B your code will run in a pop up and close after you press enter
Note: This uses the st terminal, but any terminal that supports executing a command in a popup terminal will work, eg gnome terminal
Add the follwing to your vimrc:
augroup runners
autocmd!
autocmd FileType sh map <buffer> <leader>r :w<CR>:exec '!' shellescape(@%, 1)<CR>
autocmd FileType python map <buffer> <leader>r :w<CR>:exec '!st -e buildSystem' shellescape(@%, 1)<CR>
autocmd FileType go map <buffer> <leader>r :w<CR>:exec '!st -e buildSystem' shellescape(@%, 1)<CR>
autocmd FileType rust map <buffer> <leader>r :w<CR>:exec '!st -e buildSystem' shellescape(@%, 1)<CR>
autocmd FileType c map <buffer> <leader>r :w<CR>:exec '!st -e buildSystem' shellescape(@%, 1)<CR>
autocmd FileType cpp map <buffer> <leader>r :w<CR>:exec '!st -e buildSystem' shellescape(@%, 1)<CR>
augroup END
This maps r to the buildSystem. You can change this to whatever hot key you prefer Note: This uses the st terminal, but any terminal that supports executing a command in a popup terminal will work, eg gnome terminal
Each language has its own requirements to use it with this script but these can easily be changed in the source code.
The only notable requirements are:
- I use the st terminal, but any terminal with the option to execute code in a pop up terminal will do, eg the gnome terminal. You will have to change the commands mentioned in the sublime and vim sections accordingly though.
- Make
- latexmk