Skip to content

Latest commit

 

History

History
71 lines (51 loc) · 2.8 KB

README.md

File metadata and controls

71 lines (51 loc) · 2.8 KB

shim.c

shim.c is a simple Windows program that, when started:

  1. Looks for a file with the exact same name as the running program, but with the extension shim (e.g. C:\bin\foo.exe will read the file C:\bin\foo.shim).
  2. Reads and parses the files into a Scoop shim format.
  3. 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:

  1. 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;
  2. 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 .shim file 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+C are ignored, and therefore handled directly by the spawned child. Your processes and REPLs will no longer close when pressing Ctrl+C.
    • Children are automatically killed when the shim process is killed. No more orphaned processes and weird behaviors.

Note: This project is not affiliated with Scoop.

Installation for Scoop

  • In a Visual Studio command prompt, run cl /O1 shim.c.
  • Replace any .exe in scoop\shims by shim.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