ghcup-hs/scoop-better-shimexe
2021-07-13 20:25:29 +02:00
..
LICENSE-MIT Fork shimgen into main repo, fixes #161 2021-07-13 20:25:29 +02:00
LICENSE-UNLICENSE Fork shimgen into main repo, fixes #161 2021-07-13 20:25:29 +02:00
README.md Fork shimgen into main repo, fixes #161 2021-07-13 20:25:29 +02:00
repshims.bat Fork shimgen into main repo, fixes #161 2021-07-13 20:25:29 +02:00
shim.c Fork shimgen into main repo, fixes #161 2021-07-13 20:25:29 +02:00

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