| .. | ||
| LICENSE-MIT | ||
| LICENSE-UNLICENSE | ||
| README.md | ||
| repshims.bat | ||
| shim.c | ||
shim.c
shim.c is a simple Windows program that, when started:
- Looks for a file with the exact same name as the running program, but with
the extension
shim(e.g.C:\bin\foo.exewill read the fileC:\bin\foo.shim). - Reads and parses the files into a Scoop shim format.
- Executes the target executable with the given arguments.
shim.c was originally made to replace Scoop's
shim.cs
since it had several important flaws:
- It was made in C#, and thus required an instantiation of a .NET command line app everytime it was started, which can make a command run much slower than if it had been ran directly;
- It did not handle Ctrl+C and other signals correctly, which could be quite infuriating (and essentially killing REPLs and long-running apps).
shim.c is:
- Faster, because it does not use the .NET Framework, and parses the
.shimfile in a simpler way. - More efficient, because by the time the target of the shim is started, all allocated memory will have been freed.
- And more importantly, it works better:
- Signals originating from pressing
Ctrl+Care ignored, and therefore handled directly by the spawned child. Your processes and REPLs will no longer close when pressingCtrl+C. - Children are automatically killed when the shim process is killed. No more orphaned processes and weird behaviors.
- Signals originating from pressing
Note
: This project is not affiliated with Scoop.
Installation for Scoop
- In a Visual Studio command prompt, run
cl /O1 shim.c. - Replace any
.exeinscoop\shimsbyshim.exe.
An additional script, repshims.bat, is provided. It will replace all .exes in the user's Scoop directory
by shim.exe.
Example
Given the following shim gs.shim:
path = C:\Program Files\Git\git.exe
args = status -u
In this directory, where gs.exe is the compiled shim.c:
C:\Bin\
gs.exe
gs.shim
Then calling gs -s will run the program C:\Program Files\Git\git.exe status -u -s.
Shim format
Shims follow the same format as Scoop's shims: line-separated key = value pairs.
path = C:\Program Files\Git\git.exe
args = status -uno
path is a required value, but args can be omitted. Also, do note that lines must end with a line feed.
License
SPDX-License-Identifier: MIT OR Unlicense