Code Monkey home page Code Monkey logo

scoop-better-shimexe's Introduction

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

scoop-better-shimexe's People

Contributors

71 avatar rasa avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.