pwsh: handling z ~ and z separately#1161
Open
chawyehsu wants to merge 1 commit intoajeetdsouza:mainfrom
Open
Conversation
Zouziszzm
added a commit
to Zouziszzm/zoxide
that referenced
this pull request
Jan 27, 2026
fixes ajeetdsouza#1161 Before: When you used the fzf selector, paths in your home directory showed like this: /home/yourname/Documents /home/yourname/Downloads /home/yourname/projects/foo After: Now they show like this: ~/Documents ~/Downloads ~/projects/foo How I did it: When displaying paths → replace your home directory part with ~ When you select a path → convert ~ back to the full path before using it So it's just cleaner to read in the fzf menu, but everything still works the same way behind the scenes.
Author
|
@ajeetdsouza thoughts on this? |
This patch enables the capability of navigating to the current user's home
directory with `z` when cwd is on a PSDrive that does not have a definition
of the `HOME` location.
Context: The fact that `~` can be counterintuitive on PowerShell, as it's
relative to the cwd, **and its value is defined with a `.Home` property of
cwd's PSProvider\[1]. Not all PSProviders however define this property, leaving
that sometimes you cannot navigate to the undefined `HOME` location with `~`.
To validate this, you can use `Get-PSDrive` to iterate your PSDrives and see
which providers define a `Home` property. On Windows,
```plain
Get-PSDrive C,HKLM | select Name,{$_.Provider.Name},{$_.Provider.Home}
Name $_.Provider.Name $_.Provider.Home
---- ---------------- ----------------
C FileSystem C:\Users\<username>
HKLM Registry
```
or on Linux/macOS,
```plain
Get-PSDrive /,Function | select Name,{$_.Provider.Name},{$_.Provider.Home}
Name $_.Provider.Name $_.Provider.Home
---- ---------------- ----------------
/ FileSystem /Users/<username>
Function Function
```
When cwd is on a PSDrive without a defined `HOME` location, the original
`Set-Location` alias `cd` in PowerShell handles this case by falling back
to the user's home directory when no argument is provided\[2], and when `~`
is explicitly provided, it results in an error.
```plain
PS C:\> Set-Location Function:
PS Function:\> cd ~
Home location for this provider is not set. To set the home location, call "(get-psprovider 'Function').Home = 'path'".
PS Function:\> cd
PS C:\Users\<username>\>
```
This patch implements the same behavior for `z` by handling `z ~` and `z` separately.
\[1]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_providers
\[2]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-location?#-path
Signed-off-by: Chawye Hsu <su+git@chawyehsu.com>
a1ebcd8 to
976a721
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This patch enables the capability of navigating to the current user's home directory with
zwhen cwd is on a PSDrive that does not have a definition of theHOMElocation.Context: The fact that
~can be counterintuitive on PowerShell, as it's relative to the cwd, **and its value is defined with a.Homeproperty of cwd's PSProvider[1]. Not all PSProviders however define this property, leaving that sometimes you cannot navigate to the undefinedHOMElocation with~.To validate this, you can use
Get-PSDriveto iterate your PSDrives and see which providers define aHomeproperty. On Windows,or on Linux/macOS,
When cwd is on a PSDrive without a defined
HOMElocation, the originalSet-Locationand aliascdin PowerShell handles this case by falling back to the user's home directory when no argument is provided[2], and when~is explicitly provided, it results in an error.This patch implements the same behavior for
zby handlingz ~andzseparately.[1]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_providers
[2]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-location?#-path