It's a mix of Starship and Zoxide made to be faster on Windows.
The common approach of piping binaries outputs is almost free on Linux but this is not true on Windows, the cost of raising processes is way higher and long living processes are preferred.
On Starship, every 'Enter' keystroke spawns a new process, which may cause a lag between prompts.
Zoxide will raise a new process every time you call it.
ShellServer raises the server only in the first shell creation and will communicate with your shell on every 'Enter' keystroke.
But if your hardware gives you a fluid shell experience using Starship, I recommend that you keep with it because it's way more customizable.
This is a sample of the prompt that you will get.
It will indicate the existence of Python, C, C++, C#, Lua, Node, PowerShell, Rust, and Java files in the directory.
The C compilers searched are GCC and G++.
Options
p path -o
: For writing to output. Tool for things likemove somefile (p -o somepath)
.p path -j
: Go to the Junction of the givenpath
p -d path
: Purges given relative or full paths from known paths.p -dr refpath
: Deletes only the givenrefpath
from known paths.p -a path
: Manually add givenpath
to tracked dirs.p -a path -as given_name
: Will usegiven_name
to jump topath
.p
behaves likecd
for relative paths.
Invocations likep -d . -dr someref -a . -as anyname anyref -j -o
are allowed, but doesn't make much sense.
It would remove all references to the current dir, deletesomeref
, add the current dir asanyname
, and write the junction ofanyref
to the output...
The name changed to Switch-ShellServerTheme
.
Options
Switches colors to conform with light/dark themes.
Can take five arguments: system, terminal, blue, prompt, and readline.
- system: Toggles system-wide Light/Dark Mode.
- terminal: Toggles Windows Terminal default theme.
- blue: Toggles 'Blue light reduction'.
- prompt: Toggles prompt colors.
- readline: Toggles PSReadLine colors.
The system
option is not working properly on Windows 11 22h2...
The name changed to Search-ShellServerHistory
.
Options
The amount of data printed will be limited to fit the terminal.
- pass
-a
to get the full result -c
to make the search case-sensitive-ac
and-ca
are allowed too
Options
There are several switches. See help ll
.
ll -List -Icons -Color
will use these options for the current execution.
An additional -SetDefault
will make your flags persist.
Use -NoOutput
if you want to set it in $profile.
Most flags can be aliased like:
ll -l -ac -he
Or prepending -o
plus the initial of the flag:
ll -o acilmhCAH
Meaning:
a: all files
c: colors
i: icons
l: list
m: modified time
h: headers
C: creation time
A: access time
H: hour
All those are relative to getting the git status.
- watchdog: Filesystem watcher. Makes better caching possible.
- pygit2: libgit2 python bindings. Faster than using git itself.
- ssd_checker: Solid-State Drive checker. Change the strategy accordingly to drive speed.
Just pip install
the ones you want, restart shellserver, and no further config is needed.
The server will look for a .shellserver.toml
in the user home directory.
The most important option will be git_timeout
.
git_timeout = 500 # in ms, defaults to 2500
# The best value is hardware-dependent.
# If you have watchdog, I would recommend something around 100,
# if you don't and the value is too low you might get no status over and over: `[...]`
See the example for more and the defaults.
The server knows how many clients it has and will know if you quit the shell with 'exit'
but if the window or tab is closed on the 'X' button it may outlive the shell.
usage: shellserver <COMMAND> [Args]
shellserver {kill|sync|clear|dump}
shellserver run [Args]
shellserver gives some functionalities for better navigation on PowerShell
commands:
run Run the server.
kill Kill the server.
sync Clear useless entries and write cache to disk.
clear Delete the server cache.
dump Dump the server cache to stdout.
options:
-h, --help show this help message and exit
- Python 3.10+ (CPython 3.11+ recommended)
- PowerShell 7.4.1+
- Any NerdFont (I use MesloLGS NF patched)
- A xterm compatible terminal
ShellServer will work only in PowerShell on Windows.
> pip install shellserver # or pip install --user shellserver
> Install-Module ShellServer -Scope CurrentUser -AllowClobber
There is a helper script to set the server to run on startup. Alternatively, you can start the server manually with:
shellserverw run
: Does not create output terminalshellserver run
Add Import-Module ShellServer
by the end of your PowerShell profile.
As many things might change in versions below 0.1.0, consider upgrading both when one changes.
> shellserver kill
> Remove-Module ShellServer
> pip install --upgrade shellserver
> Update-Module ShellServer
> Start-ScheduledTask ShellServer
> Import-Module ShellServer
Last break: Client (PowerShell module) v0.1.1 and Server (Python) v0.0.18.
All initial '--' are optional.
The git status info is still experimental, do pythonw -m shellserver --use-git
in your profile to always use git.
If you have installed pygit2, you can pass --use-pygit2
instead, which is faster than --use-git
.
Any errors that occur will be saved in $env:localappdata\shellserver\traceback
.
Attach a stdout to the server, pass --timeit
to it and it will give the time taken for each communication.
Use output=stdout
to get some info on the git repo. You can pass output=C:\path\to\file
too.
> shellserver kill
# A message that the server is not responding and your prompt will be like before.
> python -m shellserver --timeit --output=stdout # no w, blocking
Open another shell and walk to a git repo.
There are also:
- --no-fallback: We will use our 'gitstatus' subpackage for repos up to 2500 index entries (in ssd, 1000 otherwise if ssd_checker is present). Will use git otherwise, unless this flag is set.
- --no-watchdog: Disables Watchdog plugin
- --disable-git
- --use-git # instead of gitstatus subpackage
- --use-pygit2
- --linear: Fill gitstatus info synchronously
- --multiproc: Very beta and will not be updated
- --no-read-async
- --let-crash: At this point, it's probably useless
- --test-status: Put gitstatus subpackage result and git.exe status side-by-side
Pwsh module cmdlets:
Get-ShellServerConfig
: get the current server config.Get-ShellServerBuffer
: get output if it is set to 'buffer'. Pass-k
to keep the content in memory.Switch-ShellServerTimeout
: arg in ms.Switch-ShellServerOptions
: Sets most of the argv options in runtime:- use-git
- use-gitstatus: Use gitstatus subpackage for git status info
- use-pygit2
- disable-git
- enable-git
- timeit
- no-timeit
- fallback
- no-fallback
- watchdog
- no-watchdog
- test-status
- no-test-status
- linear
- no-linear
- read-async
- no-read-async
- let-crash