Initial commit
Signed-off-by: jolheiser <john.olheiser@gmail.com>main latest
commit
9625e97e67
|
@ -0,0 +1 @@
|
||||||
|
.idea/
|
|
@ -0,0 +1,39 @@
|
||||||
|
pipeline:
|
||||||
|
compile-util:
|
||||||
|
image: jolheiser/woodpecker-ahk:latest
|
||||||
|
settings:
|
||||||
|
script: src/NavigatorUtil.ahk
|
||||||
|
icon: icon.ico
|
||||||
|
out: src/NavigatorUtil.exe
|
||||||
|
when:
|
||||||
|
event: push
|
||||||
|
branch: main
|
||||||
|
compile-main:
|
||||||
|
image: jolheiser/woodpecker-ahk:latest
|
||||||
|
settings:
|
||||||
|
script: src/Navigator.ahk
|
||||||
|
icon: icon.ico
|
||||||
|
out: src/Navigator.exe
|
||||||
|
when:
|
||||||
|
event: push
|
||||||
|
branch: main
|
||||||
|
compile-installer:
|
||||||
|
image: jolheiser/woodpecker-ahk:latest
|
||||||
|
settings:
|
||||||
|
script: src/Navigator-Install.ahk
|
||||||
|
icon: icon.ico
|
||||||
|
out: src/Navigator-Install.exe
|
||||||
|
when:
|
||||||
|
event: push
|
||||||
|
branch: main
|
||||||
|
release-main:
|
||||||
|
image: jolheiser/drone-gitea-main:latest
|
||||||
|
settings:
|
||||||
|
base: https://git.jojodev.com
|
||||||
|
token:
|
||||||
|
from_secret: gitea_token
|
||||||
|
files:
|
||||||
|
- "src/Navigator-Install.exe"
|
||||||
|
when:
|
||||||
|
event: push
|
||||||
|
branch: main
|
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (c) 2022 John Olheiser
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Navigator
|
||||||
|
|
||||||
|
![icon](icon.ico)
|
||||||
|
|
||||||
|
An AHK script to allow quick movement to specified directories.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
|
@ -0,0 +1,9 @@
|
||||||
|
RegRead, k_test, HKCR, Directory\shell\Navigator_Add
|
||||||
|
If k_test =
|
||||||
|
{
|
||||||
|
MsgBox, 36, Navigator, Would you like Navigator to add its options to folder/background context menus?
|
||||||
|
IfMsgBox, Yes
|
||||||
|
{
|
||||||
|
Run, %k_base%\NavigatorUtil.exe WriteReg
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
@ECHO OFF
|
||||||
|
start "" %~dp0\NavigatorUtil.exe CheckReg
|
|
@ -0,0 +1,35 @@
|
||||||
|
#Include options.ahk
|
||||||
|
|
||||||
|
;CHECK CONFIG
|
||||||
|
Gosub, CheckConfig
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
CheckConfig:
|
||||||
|
IfExist, %k_config%
|
||||||
|
{
|
||||||
|
IniRead, k_ver, %k_config%, System, Version, 0.0.0
|
||||||
|
If (k_version != k_ver)
|
||||||
|
{
|
||||||
|
IfExist, %k_base%\Uninstall.bat
|
||||||
|
{
|
||||||
|
MsgBox, 16, Navigator, Please run the uninstaller before updating Navigator!`nThis ensures a clean install with no orphaned objects.`n`nUninstaller location: %k_base%\Uninstall.bat
|
||||||
|
ExitApp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FileCreateDir, %k_base%
|
||||||
|
FileInstall, config.ini, %k_config%, 0
|
||||||
|
IniWrite, %k_version%, %k_config%, System, Version
|
||||||
|
FileInstall, Navigator.exe, %k_base%\Navigator.exe, 1
|
||||||
|
FileInstall, NavigatorUtil.exe, %k_base%\NavigatorUtil.exe, 1
|
||||||
|
FileInstall, CheckReg.bat, %k_base%\CheckReg.bat, 1
|
||||||
|
FileInstall, Uninstall.bat, %k_base%\Uninstall.bat, 1
|
||||||
|
#Include CheckReg.ahk
|
||||||
|
MsgBox, 36, Navigator, Installed successfully!`nWould you like to start Navigator?
|
||||||
|
IfMsgBox, Yes
|
||||||
|
{
|
||||||
|
Run, %k_base%\Navigator.exe
|
||||||
|
}
|
||||||
|
return
|
|
@ -0,0 +1,254 @@
|
||||||
|
#SingleInstance Force
|
||||||
|
#Include options.ahk
|
||||||
|
|
||||||
|
;INIT MENU
|
||||||
|
Menu, NavMenu, Add
|
||||||
|
|
||||||
|
;(RE)LOAD CONFIG
|
||||||
|
Gosub, ReloadConfig
|
||||||
|
|
||||||
|
;INIT HOTKEY
|
||||||
|
Hotkey, #n, DisplayNavMenu
|
||||||
|
|
||||||
|
;GENERATE ADDRESS CALLBACK
|
||||||
|
k_address := RegisterCallback("ReloadConfigCallback")
|
||||||
|
IniWrite, %k_address%, %k_config%, System, Address
|
||||||
|
|
||||||
|
;MONITOR CONFIG
|
||||||
|
FileRead, k_monitor, %k_config%
|
||||||
|
SetTimer, MonitorConfig, 1000
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
MonitorConfig:
|
||||||
|
FileRead, k_monitor_temp, %k_config%
|
||||||
|
if (k_monitor_temp != k_monitor)
|
||||||
|
{
|
||||||
|
k_monitor := k_monitor_temp
|
||||||
|
GoSub, ReloadConfig
|
||||||
|
TrayTip, Navigator, Config Reloaded
|
||||||
|
}
|
||||||
|
return
|
||||||
|
|
||||||
|
ReloadConfigCallback() {
|
||||||
|
GoSub, ReloadConfig
|
||||||
|
TrayTip, Navigator, Config Reloaded
|
||||||
|
}
|
||||||
|
|
||||||
|
ReloadConfig:
|
||||||
|
Gosub, GenerateNavMenu
|
||||||
|
Gosub, GenerateTrayMenu
|
||||||
|
return
|
||||||
|
|
||||||
|
GenerateTrayMenu:
|
||||||
|
Menu, TRAY, DeleteAll
|
||||||
|
Menu, TRAY, Tip, Navigator
|
||||||
|
Menu, TRAY, NoStandard
|
||||||
|
Menu, TRAY, Add, Navigator v%k_version%, Help
|
||||||
|
Menu, TRAY, Default, Navigator v%k_version%
|
||||||
|
Menu, TRAY, Add
|
||||||
|
Menu, TRAY, Add, &Navigator, :NavMenu
|
||||||
|
fn := Func("ExploreTo").Bind(k_config, true)
|
||||||
|
Menu, SystemMenu, Add, Lock Menus, Lock
|
||||||
|
If k_lock
|
||||||
|
Menu, SystemMenu, Check, Lock Menus
|
||||||
|
Menu, SystemMenu, Add, Edit Config, %fn%
|
||||||
|
;Menu, SystemMenu, Add, Reload Config, ReloadConfig
|
||||||
|
Menu, SystemMenu, Add, Close, Close
|
||||||
|
Menu, TRAY, Add, &System, :SystemMenu
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
Lock:
|
||||||
|
If k_lock {
|
||||||
|
k_lock := false
|
||||||
|
} else {
|
||||||
|
k_lock := true
|
||||||
|
}
|
||||||
|
Menu, SystemMenu, ToggleCheck, Lock Menus
|
||||||
|
GoSub, GenerateNavMenu
|
||||||
|
return
|
||||||
|
|
||||||
|
GenerateNavMenu:
|
||||||
|
Gui, Menu
|
||||||
|
Menu, NavMenu, DeleteAll
|
||||||
|
CreateMenu("NavMenu")
|
||||||
|
return
|
||||||
|
|
||||||
|
CreateMenu(menu_name) {
|
||||||
|
global k_config, k_lock, k_ext_pattern
|
||||||
|
IniRead, k_nav_config, %k_config%, %menu_name%
|
||||||
|
If (k_nav_config == "")
|
||||||
|
{
|
||||||
|
MsgBox,, %menu_name%, No paths found for this sub-menu, please add some to the config.
|
||||||
|
}
|
||||||
|
StringSplit, k_nav, k_nav_config, `n
|
||||||
|
Loop, %k_nav0%
|
||||||
|
{
|
||||||
|
StringSplit, k_nav_array, k_nav%A_Index%, `,
|
||||||
|
If (k_nav_array0 > 1)
|
||||||
|
{
|
||||||
|
; We have a path to work with
|
||||||
|
fn := Func("ExploreTo").Bind(k_nav_array2)
|
||||||
|
k_pos := RegExMatch(k_nav_array2, k_ext_pattern)
|
||||||
|
If (k_pos > 0)
|
||||||
|
{
|
||||||
|
Menu, %menu_name%, Add, %k_nav_array1%, %fn%, +Radio
|
||||||
|
Menu, %menu_name%, Check, %k_nav_array1%
|
||||||
|
} else {
|
||||||
|
Menu, %menu_name%, Add, %k_nav_array1%, %fn%
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
; No path, so this is a new menu
|
||||||
|
Menu, %k_nav_array1%, Add
|
||||||
|
Menu, %k_nav_array1%, DeleteAll
|
||||||
|
k_menu_name := k_nav_array1
|
||||||
|
k_menu_ini := k_nav_array1
|
||||||
|
StringSplit, k_menu_array, k_menu_name, |
|
||||||
|
If (k_menu_array0 > 1)
|
||||||
|
{
|
||||||
|
k_menu_name := k_menu_array2
|
||||||
|
k_menu_ini := k_menu_array1
|
||||||
|
}
|
||||||
|
CreateMenu(k_menu_ini)
|
||||||
|
Menu, %menu_name%, Add, %k_menu_name%, :%k_menu_ini%
|
||||||
|
}
|
||||||
|
}
|
||||||
|
If not k_lock {
|
||||||
|
Menu, %menu_name%, Add
|
||||||
|
fn := Func("AddMenuItem").Bind(menu_name)
|
||||||
|
Menu, %menu_name%, Add, Add, %fn%
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayNavMenu:
|
||||||
|
WinGet, k_window_id, ID, A
|
||||||
|
WinGetClass, k_class, ahk_id %k_window_id%
|
||||||
|
ControlGetFocus, k_control, ahk_id %k_window_id%
|
||||||
|
if k_class in ExploreWClass,CabinetWClass
|
||||||
|
{
|
||||||
|
; Try to activate the edit, this sometimes fixes weird issues
|
||||||
|
SendInput, {AltDown}d{AltUp}{Esc}
|
||||||
|
ControlGetPos, k_Edit1Pos,,,, Edit1, ahk_id %k_window_id%
|
||||||
|
} else if k_class in #32770
|
||||||
|
{
|
||||||
|
ControlGetPos, k_Edit2Pos,,,, Edit2, ahk_id %k_window_id%
|
||||||
|
}
|
||||||
|
if k_class in #32770,ExploreWClass,CabinetWClass ; Dialog or Explorer.
|
||||||
|
{
|
||||||
|
if k_Edit1Pos = ; The control doesn't exist
|
||||||
|
{
|
||||||
|
WinActivate, ahk_id %k_window_id%
|
||||||
|
if k_class in ExploreWClass,CabinetWClass
|
||||||
|
ControlGetPos, k_Edit1Pos,,,, Edit1, ahk_id %k_window_id%
|
||||||
|
else if k_class in #32770
|
||||||
|
ControlGetPos, k_Edit2Pos,,,, Edit2, ahk_id %k_window_id%
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Menu, NavMenu, Show
|
||||||
|
return
|
||||||
|
|
||||||
|
AddMenuItem(menu_name) {
|
||||||
|
global
|
||||||
|
InputBox, k_label, Navigator, %menu_name%`nPlease enter the name of the new menu item
|
||||||
|
InputBox, k_path, Navigator, %menu_name%`nPlease enter the path to the new menu item`nIf this is a new sub-menu`, leave this blank
|
||||||
|
If (k_path == "")
|
||||||
|
IniWrite, %k_label%, %k_config%, %menu_name%
|
||||||
|
Else
|
||||||
|
IniWrite, %k_label%`,%k_path%, %k_config%, %menu_name%
|
||||||
|
GoSub, ReloadConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
ExploreTo(location) {
|
||||||
|
global
|
||||||
|
RegExMatch(location, k_branch_pattern, k_match)
|
||||||
|
if k_match <>
|
||||||
|
{
|
||||||
|
InputBox, k_replacement, Navigator, %k_match2%
|
||||||
|
if k_replacement <>
|
||||||
|
{
|
||||||
|
location := StrReplace(location, k_match1, k_replacement)
|
||||||
|
} else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if k_class = #32770 ; It's a dialog.
|
||||||
|
{
|
||||||
|
if k_Edit2Pos <> ; And it has an Edit2 control.
|
||||||
|
{
|
||||||
|
; Activate the window so that if the user is middle-clicking
|
||||||
|
; outside the dialog, subsequent clicks will also work:
|
||||||
|
WinActivate ahk_id %k_window_id%
|
||||||
|
; Retrieve any filename that might already be in the field so
|
||||||
|
; that it can be restored after the switch to the new folder:
|
||||||
|
ControlGetText, k_text, Edit1, ahk_id %k_window_id%
|
||||||
|
ControlSetText, Edit2, %location%, ahk_id %k_window_id%
|
||||||
|
ControlSend, Edit2, {Enter}, ahk_id %k_window_id%
|
||||||
|
Sleep, 100 ; It needs extra time on some dialogs or in some cases.
|
||||||
|
ControlSetText, Edit1, %k_text%, ahk_id %k_window_id%
|
||||||
|
GoSub, Cleanup
|
||||||
|
return
|
||||||
|
}
|
||||||
|
; else fall through to the bottom of the subroutine to take standard action.
|
||||||
|
}
|
||||||
|
else if k_class in ExploreWClass,CabinetWClass ; In Explorer, switch folders.
|
||||||
|
{
|
||||||
|
if k_Edit1Pos <> ; And it has an Edit1 control.
|
||||||
|
{
|
||||||
|
ControlSetText, Edit1, %location%, ahk_id %k_window_id%
|
||||||
|
; Tekl reported the following: "If I want to change to Folder L:\folder
|
||||||
|
; then the addressbar shows http://www.L:\folder.com. To solve this,
|
||||||
|
; I added a {right} before {Enter}":
|
||||||
|
ControlSend, Edit1, {Right}{Enter}, ahk_id %k_window_id%
|
||||||
|
GoSub, Cleanup
|
||||||
|
return
|
||||||
|
}
|
||||||
|
; else fall through to the bottom of the subroutine to take standard action.
|
||||||
|
}
|
||||||
|
else if k_class in ConsoleWindowClass,TMobaXTermForm,mintty ; In a console window, CD to that directory
|
||||||
|
{
|
||||||
|
WinActivate, ahk_id %k_window_id% ; Because sometimes the mclick deactivates it.
|
||||||
|
SetKeyDelay, 0 ; This will be in effect only for the duration of this thread.
|
||||||
|
IfInString, k_path, : ; It contains a drive letter
|
||||||
|
{
|
||||||
|
StringLeft, k_path_drive, location, 1
|
||||||
|
Send %k_path_drive%:{enter}
|
||||||
|
}
|
||||||
|
Send, cd "%location%"{Enter}
|
||||||
|
GoSub, Cleanup
|
||||||
|
return
|
||||||
|
}
|
||||||
|
else if InStr(k_control, "Edit") == 1 ; If Navigator is called from an edit control, modify it
|
||||||
|
{
|
||||||
|
ControlSetText, %k_control%, %location%, ahk_id %k_window_id%
|
||||||
|
ControlSend, %k_control%, {Right}{Enter}, ahk_id %k_window_id%
|
||||||
|
GoSub, Cleanup
|
||||||
|
return
|
||||||
|
}
|
||||||
|
GoSub, Cleanup
|
||||||
|
Run, Explorer %location%
|
||||||
|
}
|
||||||
|
|
||||||
|
Cleanup:
|
||||||
|
k_window_id=
|
||||||
|
k_class=
|
||||||
|
k_control=
|
||||||
|
return
|
||||||
|
|
||||||
|
Help:
|
||||||
|
RegRead, k_reg, HKCR, Directory\shell\Navigator_Add
|
||||||
|
k_reg_help=
|
||||||
|
if k_reg <>
|
||||||
|
{
|
||||||
|
k_reg_help = `n`nRegistry Extension:`n- New context menu options to add a file/folder to Navigator`n- New context menu options to copy a file/folder's path to the clipboard
|
||||||
|
}
|
||||||
|
MsgBox, 32, Navigator, Navigator v%k_version%`nThis program was created to aid in quickly navigating to common directories/files.`n`nFeatures:`n- Infinite sub-menus`; Organize your navigations as much as you want.`n- Simple naming`; To rename a folder, simple add a pipe (|) followed by the preferred name`n- Window detection`; In File Explorer`, switch to the directory. In command prompt`, cd to the directory. `n- Hotkey support`; Press the windows key + N to bring up the navigator menu.`n- If the path is a file instead of a directory, Navigator will open the file.*`n`n* File paths will be denoted by a radio mark next to their entry.%k_reg_help%
|
||||||
|
return
|
||||||
|
|
||||||
|
;This is the only way to actually close the application
|
||||||
|
Close:
|
||||||
|
MsgBox, 52, Navigator, Are you sure you want to close the Navigator?
|
||||||
|
IfMsgBox, YES
|
||||||
|
ExitApp
|
||||||
|
return
|
|
@ -0,0 +1,171 @@
|
||||||
|
#SingleInstance Off
|
||||||
|
#Include options.ahk
|
||||||
|
|
||||||
|
;INIT MENU
|
||||||
|
Menu, NavMenu, Add
|
||||||
|
|
||||||
|
k_args_len=%0%
|
||||||
|
|
||||||
|
if (k_args_len == 0)
|
||||||
|
{
|
||||||
|
MsgBox,, NavigatorUtil, No arguments given. Specify "CheckReg", "AddItem", "Copy", or "Uninstall"
|
||||||
|
ExitApp
|
||||||
|
}
|
||||||
|
|
||||||
|
Loop, %0%
|
||||||
|
{
|
||||||
|
if (A_Index > 1)
|
||||||
|
{
|
||||||
|
k_arg := %A_Index%
|
||||||
|
k_index := A_Index - 1
|
||||||
|
k_args%k_index% := k_arg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GoSub, %1%
|
||||||
|
ExitApp
|
||||||
|
|
||||||
|
CheckReg:
|
||||||
|
#Include CheckReg.ahk
|
||||||
|
return
|
||||||
|
|
||||||
|
WriteReg:
|
||||||
|
if not (A_IsAdmin)
|
||||||
|
{
|
||||||
|
; Circular loop for admin privileges
|
||||||
|
Run *RunAs "%A_ScriptFullPath%" WriteReg /restart
|
||||||
|
ExitApp
|
||||||
|
}
|
||||||
|
|
||||||
|
; Add to Navigator contexts
|
||||||
|
|
||||||
|
; Folder context
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\shell\Navigator_Add,, Add folder to Navigator
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\shell\Navigator_Add, Icon, "%A_ScriptFullPath%"
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\shell\Navigator_Add\command,, "%A_ScriptFullPath%" "AddItem" "`%V"
|
||||||
|
|
||||||
|
; Background context
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\Background\shell\Navigator_Add,, Add folder to Navigator
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\Background\shell\Navigator_Add, Icon, "%A_ScriptFullPath%"
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\Background\shell\Navigator_Add\command,, "%A_ScriptFullPath%" "AddItem" "`%V"
|
||||||
|
|
||||||
|
; File context
|
||||||
|
RegWrite, REG_SZ, HKCR, *\shell\Navigator_Add,, Add file to Navigator
|
||||||
|
RegWrite, REG_SZ, HKCR, *\shell\Navigator_Add, Icon, "%A_ScriptFullPath%"
|
||||||
|
RegWrite, REG_SZ, HKCR, *\shell\Navigator_Add\command,, "%A_ScriptFullPath%" "AddItem" "`%1"
|
||||||
|
|
||||||
|
|
||||||
|
; Copy location contexts
|
||||||
|
|
||||||
|
; Folder context
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\shell\Navigator_Copy,, Copy folder location
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\shell\Navigator_Copy, Icon, "%A_ScriptFullPath%"
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\shell\Navigator_Copy\command,, "%A_ScriptFullPath%" "Copy" "`%V"
|
||||||
|
|
||||||
|
; Background context
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\Background\shell\Navigator_Copy,, Copy folder location
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\Background\shell\Navigator_Copy, Icon, "%A_ScriptFullPath%"
|
||||||
|
RegWrite, REG_SZ, HKCR, Directory\Background\shell\Navigator_Copy\command,, "%A_ScriptFullPath%" "Copy" "`%V"
|
||||||
|
|
||||||
|
; File context
|
||||||
|
RegWrite, REG_SZ, HKCR, *\shell\Navigator_Copy,, Copy file location
|
||||||
|
RegWrite, REG_SZ, HKCR, *\shell\Navigator_Copy, Icon, "%A_ScriptFullPath%"
|
||||||
|
RegWrite, REG_SZ, HKCR, *\shell\Navigator_Copy\command,, "%A_ScriptFullPath%" "Copy" "`%1"
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
Uninstall:
|
||||||
|
RegRead, k_reg, HKCR, Directory\shell\Navigator_Add
|
||||||
|
if k_reg <>
|
||||||
|
{
|
||||||
|
if not (A_IsAdmin)
|
||||||
|
{
|
||||||
|
; Circular loop for admin privileges
|
||||||
|
Run *RunAs "%A_ScriptFullPath%" Uninstall /restart
|
||||||
|
ExitApp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MsgBox, 35, Navigator, Uninstalling Navigator...`nWould you like to keep your config.ini?
|
||||||
|
IfMsgBox, Cancel
|
||||||
|
{
|
||||||
|
ExitApp
|
||||||
|
} else {
|
||||||
|
RegDelete, HKCR, Directory\shell\Navigator_Add
|
||||||
|
RegDelete, HKCR, Directory\Background\shell\Navigator_Add
|
||||||
|
RegDelete, HKCR, *\shell\Navigator_Add
|
||||||
|
RegDelete, HKCR, Directory\shell\Navigator_Copy
|
||||||
|
RegDelete, HKCR, Directory\Background\shell\Navigator_Copy
|
||||||
|
RegDelete, HKCR, *\shell\Navigator_Copy
|
||||||
|
}
|
||||||
|
IfMsgBox, Yes
|
||||||
|
{
|
||||||
|
Run, %ComSpec% /c "TASKKILL /f /im `"Navigator.exe`" > nul 2> nul & SLEEP 1 > nul 2> nul & DEL %A_ScriptDir%\*.bat > nul 2> nul & DEL %A_ScriptDir%\*.exe > nul 2> nul" ; Batch files and exe files
|
||||||
|
} else IfMsgBox, No
|
||||||
|
{
|
||||||
|
Run, %ComSpec% /c "TASKKILL /f /im `"Navigator.exe`" > nul 2> nul & SLEEP 1 > nul 2> nul & RD /S /Q %A_ScriptDir% > nul 2> nul"
|
||||||
|
}
|
||||||
|
return
|
||||||
|
|
||||||
|
AddItem:
|
||||||
|
Gui, Menu
|
||||||
|
Menu, NavMenu, DeleteAll
|
||||||
|
CreateMenu("NavMenu")
|
||||||
|
Menu, NavMenu, Show
|
||||||
|
return
|
||||||
|
|
||||||
|
Copy:
|
||||||
|
Clipboard = %k_args1%
|
||||||
|
return
|
||||||
|
|
||||||
|
ReloadConfig:
|
||||||
|
IniRead, k_address, %k_config%, System, Address
|
||||||
|
DllCall(%k_address%)
|
||||||
|
return
|
||||||
|
|
||||||
|
Select(menu_name) {
|
||||||
|
global k_config, k_args1
|
||||||
|
InputBox, k_label, Navigator, %menu_name%`nPlease enter the name of the new menu item
|
||||||
|
if (k_label <> "")
|
||||||
|
{
|
||||||
|
IniWrite, %k_label%`,%k_args1%, %k_config%, %menu_name%
|
||||||
|
GoSub, ReloadConfig
|
||||||
|
} else {
|
||||||
|
MsgBox, 21, Navigator, You must enter a name for this sub-menu.
|
||||||
|
IfMsgBox, Retry
|
||||||
|
{
|
||||||
|
Select(menu_name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateMenu(menu_name) {
|
||||||
|
global k_config, k_ext_pattern
|
||||||
|
IniRead, k_nav_config, %k_config%, %menu_name%
|
||||||
|
If (k_nav_config == "")
|
||||||
|
{
|
||||||
|
MsgBox,, %menu_name%, No paths found for this sub-menu, please add some to the config.
|
||||||
|
}
|
||||||
|
StringSplit, k_nav, k_nav_config, `n
|
||||||
|
Loop, %k_nav0%
|
||||||
|
{
|
||||||
|
StringSplit, k_nav_array, k_nav%A_Index%, `,
|
||||||
|
If (k_nav_array0 == 1)
|
||||||
|
{
|
||||||
|
; No path, so this is a new menu
|
||||||
|
Menu, %k_nav_array1%, Add
|
||||||
|
Menu, %k_nav_array1%, DeleteAll
|
||||||
|
k_menu_name := k_nav_array1
|
||||||
|
k_menu_ini := k_nav_array1
|
||||||
|
StringSplit, k_menu_array, k_menu_name, |
|
||||||
|
If (k_menu_array0 > 1)
|
||||||
|
{
|
||||||
|
k_menu_name := k_menu_array2
|
||||||
|
k_menu_ini := k_menu_array1
|
||||||
|
}
|
||||||
|
CreateMenu(k_menu_ini)
|
||||||
|
Menu, %menu_name%, Add, %k_menu_name%, :%k_menu_ini%
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn := Func("Select").Bind(menu_name)
|
||||||
|
Menu, %menu_name%, Add, Select This Menu, %fn%
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
@ECHO OFF
|
||||||
|
start "" %~dp0\NavigatorUtil.exe Uninstall
|
|
@ -0,0 +1,19 @@
|
||||||
|
; To re-run the registry check, go to your config folder and run CheckReg.bat
|
||||||
|
; To uninstall, go to your config folder and run Uninstall.bat
|
||||||
|
|
||||||
|
[NavMenu]
|
||||||
|
; Without a path, Navigator will assume the next line corresponds with a sub-menu
|
||||||
|
; Notice the pipe (|) used to rename the sub-menu. Each sub-menu needs to match a specific "header" in the ini file, but sometimes the names double up, so renaming can look better visually.
|
||||||
|
Config|NavMenu
|
||||||
|
|
||||||
|
[Config]
|
||||||
|
; A sub-menu for the above matching line in NavMenu
|
||||||
|
|
||||||
|
; Notice this path leads directly to a file, so Navigator will mark it in the sub-menu with a radio button mark
|
||||||
|
Config File,C:\Applications\Navigator\config.ini
|
||||||
|
|
||||||
|
; If the path is a directory, Navigator will open to that folder. This is really the core of the project and is supported in File Explorer, Command Line, and MobaXTerm.
|
||||||
|
Config Folder,C:\Applications\Navigator
|
||||||
|
|
||||||
|
[System]
|
||||||
|
; DO NOT MODIFY
|
|
@ -0,0 +1,9 @@
|
||||||
|
;SYSTEM
|
||||||
|
k_version=2.0.5 ; Version number
|
||||||
|
|
||||||
|
;OPTIONS
|
||||||
|
k_base=C:\Applications\Navigator ; Base path to the application folder
|
||||||
|
k_config=%k_base%\config.ini ; Where to store the config file
|
||||||
|
k_lock=true ; Whether to show the 'Add' options on menus/sub-menus initially
|
||||||
|
k_branch_pattern=.*(<(.+)>).* ; The regex pattern to match for branching paths
|
||||||
|
k_ext_pattern=\w+\.\w+$ ; The regex pattern to match for file extensions
|
Loading…
Reference in New Issue