1
+ {%- import "utils/batch.txt" as batch -%}
2
+
3
+ {%- macro cd(directory, tabs) -%} if /i not "%$p%CD%$p%"=="{{ directory }}" (^
4
+ {%- call batch::indent(tabs) %} %__builtin_cd% {{ directory|safe }}^
5
+ {%- call batch::indent(tabs) %} ^&^& set "OLDPWD=%$p%CD%$p%"^
6
+ {%- if echo -%}
7
+ {%- call batch::indent(tabs) %} ^&^& {%~ call pwd(tabs + 1) ~%}^
8
+ {%- endif -%}
9
+ {%- if hook != InitHook::None -%}
10
+ {%- call batch::indent(tabs) %} ^&^& (for /f "delims=" %$p%a in ('"%__builtin_pwd%"') do @(zoxide add -- "%$p%~fa\."))^
11
+ {%- endif -%}
12
+ {%- call batch::indent(tabs) %})
13
+ {%- endmacro cd -%}
14
+
15
+ {%- macro pwd(tabs) -%} (^
16
+ {%- if resolve_symlinks -%}
17
+ {%- call batch::indent(tabs) %} (^
18
+ {%- call batch::indent(tabs) %} for /f "skip=9 tokens=1,2,*" %$p%j in ('""%$fsutil%" reparsepoint query ."') do @(^
19
+ {%- call batch::indent(tabs) %} if "%$p%~j"=="Print" if "%$p%~k"=="Name:" if not "%$p%~l"=="" (echo(%$p%~l)^
20
+ {%- call batch::indent(tabs) %} )^
21
+ {%- call batch::indent(tabs) %} ) ^|^| %__builtin_pwd%^
22
+ {%- else -%}
23
+ {%- call batch::indent(tabs) %} %__builtin_pwd%^
24
+ {%- endif -%}
25
+ {%- call batch::indent(tabs) %})
26
+ {%- endmacro pwd -%}
27
+
1
28
{%- let section = "@rem ==========================================================================\n@rem" -%}
2
29
{%- let not_configured = "@rem -- not configured --" -%}
3
- @setlocal EnableDelayedExpansion EnableExtensions & set "CMD=!CMDCMDLINE!" 2>nul
4
- @if /i not "!CMD!"=="!CMD:/=!" (goto :EOF) else @if not defined DEBUG (echo off)
5
- @reg query "HKCU\Software\Microsoft\Command Processor" /v "AutoRun" /z >nul 2>&1
6
- @if !ERRORLEVEL! equ 0 (endlocal & set "CMD_ENV=%~0") else (echo(cmd& goto :EOF)
7
30
8
- {{ section }}
9
- @rem Utility functions for zoxide.
10
- @rem
31
+ @echo off & setlocal EnableDelayedExpansion EnableExtensions
11
32
12
- @rem Full credits to jeb for this - https://stackoverflow.com/a/76213522/6724141
13
- set i_AS_$*=%%^^^^ in ("") do @for /f "delims=" %%i in (^^""$*%%~^^"^")
33
+ @if "%~f0"=="%~dpnx0" (
34
+ set ^"$p=%%<nul"
35
+ ) else (
36
+ set ^"$p=^%<nul"
37
+ )
14
38
15
- set __ZOXIDE_CD=chdir /d
16
- set __ZOXIDE_PWD=chdir
39
+ set ^"$true=(call )"
40
+ set ^"$false=(call)"
17
41
18
- @rem cd + custom logic based on the value of _ZO_ECHO.
19
- doskey cd = ( ^
20
- {#- Full credits to jeb (see https://stackoverflow.com/a/76213522/6724141) #}
21
- for %%^^^^ in ("") do @for /f "delims=" %%i in (^^""$*%%~^^"^") do @( ^
22
- if "%%~i"=="" ( ^
23
- if defined USERPROFILE ( ^
24
- if /i not "%%CD%%"=="%%USERPROFILE%%" ( ^
25
- %__ZOXIDE_CD% "%%USERPROFILE%%" ^&^& ^
26
- }
27
- {%- if echo %}
28
- %__ZOXIDE_PWD% ^&^& ^
42
+ set root=%SystemRoot%\System32
43
+ set ^"$doskey=%root%\doskey.exe"
44
+ {%- if resolve_symlinks %}
45
+ set ^"$fsutil=%root%\fsutil.exe"
29
46
{%- endif %}
30
- {% if hook != InitHook::None -%}
31
- if defined __ZOXIDE_HOOK (%%__ZOXIDE_HOOK%%) ^&^& ^
32
- {%- endif %}
33
- set "OLDCD=%%CD%%" ^
34
- ) ^
35
- ) ^
36
- ) else if "%%~i"=="-" ( ^
37
- if defined OLDCD ( ^
38
- if /i not "%%CD%%"=="%%OLDCD%%" ( ^
39
- %__ZOXIDE_CD% "%%OLDCD%%" ^&^& ^
40
- {%- if echo %}
41
- %__ZOXIDE_PWD% ^&^& ^
42
- {%- endif %}
43
- {% if hook != InitHook::None -%}
44
- if defined __ZOXIDE_HOOK (%%__ZOXIDE_HOOK%%) ^&^& ^
45
- {%- endif %}
46
- set "OLDCD=%%CD%%" ^
47
- ) ^
48
- ) ^
49
- ) else ( ^
50
- ( ^
51
- if /i not "%%CD%%"=="%%~fi" ( ^
52
- %__ZOXIDE_CD% %%~fi ^&^& ^
53
- {%- if echo %}
54
- %__ZOXIDE_PWD% ^&^& ^
55
- {%- endif %}
56
- {% if hook != InitHook::None -%}
57
- if defined __ZOXIDE_HOOK (%%__ZOXIDE_HOOK%%) ^&^& ^
58
- {%- endif %}
59
- set "OLDCD=%%CD%%" ^
60
- ) ^
61
- ) ^
62
- ) ^
63
- ) ^
64
- )
65
-
66
- doskey pwd = (%__ZOXIDE_PWD%)
67
47
68
48
{{ section }}
69
- @rem Hook configuration for zoxide.
49
+ @rem Utility functions for zoxide.
70
50
@rem
71
51
72
- if not defined __ZOXIDE_HOOKED (
73
- set __ZOXIDE_HOOKED=1
74
- {% if hook == InitHook::None -%}
75
- @rem {{ not_configured }}
76
- set __ZOXIDE_HOOK=
77
- {%- else -%}
78
- @rem Initialize hook to add new entries to the database.
79
- set __ZOXIDE_HOOK=for /f "delims=" %%z in ('%__ZOXIDE_PWD%') do (zoxide add -- "%%~fz ")
80
- {%- endif %}
81
- )
52
+ set __builtin_cd=chdir /d
53
+ set __builtin_pwd=chdir
54
+
55
+ set __zoxide_cd=cd
56
+ set __zoxide_pwd=pwd
57
+
58
+ @rem cd + custom logic based on the value of _ZO_ECHO.
59
+ "%$doskey%" %__zoxide_cd% = (^
60
+ {% call batch::for_caret("%$p%", "i") ~%} @(^
61
+ if "%$p%~i"=="" (^
62
+ if defined USERPROFILE (^
63
+ {% call cd("%$p%USERPROFILE%$p%", 4) %}^
64
+ ) else (^
65
+ (echo(%__zoxide_cd%: USERPROFILE is not defined) ^>^&2 ^& %$false%^
66
+ )^
67
+ ) else if "%$p%~i"=="~" (^
68
+ if defined USERPROFILE (^
69
+ {% call cd("%$p%USERPROFILE%$p%", 4) %}^
70
+ ) else (^
71
+ (echo(%__zoxide_cd%: USERPROFILE is not defined) ^>^&2 ^& %$false%^
72
+ )^
73
+ ) else if "%$p%~i"=="-" (^
74
+ if defined OLDPWD (^
75
+ {% call cd("%$p%OLDPWD%$p%", 4) %}^
76
+ ) else (^
77
+ (echo(%__zoxide_cd%: OLDPWD is not defined) ^>^&2 ^& %$false%^
78
+ )^
79
+ ) else (^
80
+ (^
81
+ {% call cd("%$p%~fi", 4) %}^
82
+ )^
83
+ )^
84
+ )^
85
+ ) ^&^& %$true%
86
+
87
+ @rem pwd based on the value of _ZO_RESOLVE_SYMLINKS.
88
+ "%$doskey%" %__zoxide_pwd% = {%~ call pwd(0) %}
82
89
83
90
{{ section }}
84
91
@rem Commands for zoxide. Disable these using --no-cmd.
@@ -87,70 +94,55 @@ if not defined __ZOXIDE_HOOKED (
87
94
{%- match cmd %}
88
95
{%- when Some with (cmd) %}
89
96
97
+ set __zoxide_z_prefix={{cmd}}
98
+
90
99
@rem Jump to a directory using only keywords.
91
- doskey {{cmd}} = ( ^
92
- for %%^^^^ in ("") do @for /f "delims=" %%i in (^^""$*%%~^^"^") do @( ^
93
- if "%%~i"=="" ( ^
94
- if defined HOME ( ^
95
- if /i not "%%CD%%"=="%%HOME%%" ( ^
96
- %__CD% "%%HOME%%" ^&^& ^
97
- {%- if echo %}
98
- %__ZOXIDE_PWD% ^&^& ^
99
- {%- endif %}
100
- set "OLDCD=%%CD%%" ^&^& ^
101
- %__ZOXIDE_HOOK% ^
102
- ) ^
103
- ) ^
104
- ) else if "%%~i"=="-" ( ^
105
- if defined OLDCD ( ^
106
- if /i not "%%CD%%"=="%%OLDCD%%" ( ^
107
- %__CD% "%%OLDCD%%" ^&^& ^
108
- {%- if echo %}
109
- %__ZOXIDE_PWD% ^&^& ^
110
- {%- endif %}
111
- set "OLDCD=%%CD%%" ^&^& ^
112
- %__ZOXIDE_HOOK% ^
113
- ) ^
114
- ) ^
115
- ) else ( ^
116
- for /f "delims=" %%p in ('zoxide query --exclude "%%CD%%" -- "%%~i"') do @( ^
117
- if /i not "%%CD%%"=="%%~fp" ( ^
118
- %__CD% %%~fp ^&^& ^
119
- {%- if echo %}
120
- %__ZOXIDE_PWD% ^&^& ^
121
- {%- endif %}
122
- set "OLDCD=%%CD%%" ^&^& ^
123
- %__ZOXIDE_HOOK% ^
124
- ) ^
125
- ) ^
126
- ) ^
127
- ) ^
128
- )
100
+ "%$doskey%" %__zoxide_z_prefix% = (^
101
+ {% call batch::for_caret("%$p%", "i") ~%} @(^
102
+ if "%$p%~i"=="" (^
103
+ if defined USERPROFILE (^
104
+ {% call cd("%$p%USERPROFILE%$p%", 4) %}^
105
+ ) else (^
106
+ (echo(%__zoxide_z_prefix%: USERPROFILE is not defined) ^>^&2 ^& %$false%^
107
+ )^
108
+ ) else if "%$p%~i"=="~" (^
109
+ if defined USERPROFILE (^
110
+ {% call cd("%$p%USERPROFILE%$p%", 4) %}^
111
+ ) else (^
112
+ (echo(%__zoxide_z_prefix%: USERPROFILE is not defined) ^>^&2 ^& %$false%^
113
+ )^
114
+ ) else if "%$p%~i"=="-" (^
115
+ if defined OLDPWD (^
116
+ {% call cd("%$p%OLDPWD%$p%", 4) %}^
117
+ ) else (^
118
+ (echo(%__zoxide_z_prefix%: OLDPWD is not defined) ^>^&2 ^& %$false%^
119
+ )^
120
+ ) else (^
121
+ for /f "delims=" %$p%p in ('"zoxide query --exclude "%$p%CD%$p%\." -- %$p%~i"') do @(^
122
+ {% call cd("%$p%~fp", 4) %}^
123
+ )^
124
+ )^
125
+ )^
126
+ ) ^&^& %$true%
129
127
130
128
@rem Jump to a directory using interactive search.
131
- doskey {{cmd}}i = ( ^
132
- for %%^^^^ in ("") do @for /f "delims=" %%i in (^^""$*%%~^^"^") do @( ^
133
- for /f "delims=" %%q in ('zoxide query --interactive -- "%%~i"') do @( ^
134
- %__CD% %%~fq ^&^& ^
135
- {%- if echo %}
136
- %__ZOXIDE_PWD% ^&^& ^
137
- {%- endif %}
138
- set "OLDCD=%%CD%%" ^&^& ^
139
- %__ZOXIDE_HOOK% ^
140
- ) ^
141
- ) ^
142
- )
129
+ "%$doskey%" %__zoxide_z_prefix%i = (^
130
+ {% call batch::for_caret("%$p%", "i") ~%} @(^
131
+ for /f "delims=" %$p%p in ('"zoxide query --interactive -- %$p%~i"') do @(^
132
+ {% call cd("%$p%~fp", 3) %}^
133
+ )^
134
+ )^
135
+ ) ^&^& %$true%
143
136
144
137
{%- when None %}
145
138
146
139
{{ not_configured }}
147
140
148
141
{%- endmatch %}
149
142
143
+ @endlocal
144
+
150
145
{{ section }}
151
- @rem To initialize zoxide, add the contents of the following command to your
152
- @rem configuration:
153
- @rem
154
- @rem zoxide init cmd
146
+ @rem To initialize zoxide, add this to your configuration or AutoRun command:
155
147
@rem
156
- @rem If you don't have one: <TODO: explain how to run `AutoRun` scripts>
148
+ @rem zoxide init cmd | cmd /d >nul
0 commit comments