Замена Farhere.inf с помощью Autohotkey

Здесь обсуждаются темы, косвенно связанные с Far.
Post Reply
stealzy
Posts: 6
Joined: Sat 07 Nov, 2015 10:23
Been thanked: 2 times

Замена Farhere.inf с помощью Autohotkey

Post by stealzy »

Скрипт для открытия папок из проводника в текущем экземпляре Far-а по горячей клавише.
! Требует запуска интерпретатора Autohotkey.exe. Страница загрузки

Code: Select all

; Скрипт для открытия папок из проводника в текущем экземпляре Far-а.
; Если выделена папка, открывает ее
; если выделен файл, открывает его директорию и ставит на него курсор
; если ничего не выделено, открывает тот же каталог
; Сочетание клавиш по-умолчанию - Shift+Enter
MyHotkey := "!Enter" ; "+" - Shift, "!" -Alt, "^" - Ctrl, "#" - Win
; Для добавления в автозагрузку кидаем ярлык к интерпретатору AutoHotKey.exe со скриптом в параметрах.

#NoEnv
#SingleInstance Force
#NoTrayIcon
#KeyHistory 0
SetBatchLines -1
ListLines, Off
SetTitleMatchMode, 2
SetWorkingDir, %A_ScriptDir%

#IfWinActive, ahk_exe explorer.exe
Hotkey, %MyHotkey%, gett
gett:
   gettt()
Return

gettt() {
if !(Path:=_GetSelection())
	Return

IfWinExist Far ahk_class VirtualConsoleClass
	WinActivate
Else IfWinExist Far ahk_class ConsoleWindowClass
	WinActivate
Else
	Return

FileGetAttrib, Attributes, %Path%
IfInString, Attributes, D
{
	SendInput {Esc}cd{Space}"%Path%"{Enter}
} else {
	SplitPath, Path, name, outDir
	SendInput {Esc}cd{Space}"%outDir%"{Enter}
	SendInput !%name%
}
}

Return
#If

_GetSelection(hwnd="") {
   hwnd := hwnd? hwnd:WinExist("A")
   WinGetClass class, ahk_id %hwnd%
      if (class ~= "Progman|WorkerW") {
         ControlGet, files, List, Selected Col1, SysListView321, ahk_class %class%
         Loop, Parse, files, `n, `r
            ToReturn .= A_Desktop "\" A_LoopField "`n"
      }
      else if (class ~= "(Cabinet|Explore)WClass") {
         for window in ComObjCreate("Shell.Application").Windows
            if (window.hwnd==hwnd)
               sel := window.Document.SelectedItems
         for item in sel
            ToReturn .= item.path "`n"
      }
   if !ToReturn
   	ToReturn := ExplorerPath(hwnd)
   return Trim(ToReturn,"`n")
}


ExplorerPath(_hwnd) {
	for Item in ComObjCreate("Shell.Application").Windows
		if (Item.hwnd = _hwnd)
			return, LTrim(Item.LocationURL, "file:///")
}
Скрипт сохранить с расширением .ahk и запустить.
stealzy
Posts: 6
Joined: Sat 07 Nov, 2015 10:23
Been thanked: 2 times

Замена Farhere.inf с помощью Autohotkey

Post by stealzy »

MyHotkey := "!Enter" заменить на *MyHotkey := "+Enter"
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Замена Farhere.inf с помощью Autohotkey

Post by HaRT »

stealzy, тема перемещена. Прочитайте правила того раздела, где Вы её изначально по ошибке создали, и больше не нарушайте.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Замена Farhere.inf с помощью Autohotkey

Post by Xerox »

идея хорошая
Ищет сушествующий экземпляр ФАРа, на нем фокусируется, что уже круто.
Переход в нужную директорию реализован через "CD ..", но получилось глюковато, и у меня того не происходит например
Создается впрочем впечатлениe что легко и стоит того чтобы допилить
Может переход не стоит делать не печатанием "CD <путь>" в комманде,
а вызвать макрос кнопкосочетанием, у которого есть диалог для получения путя (?) и дальше дело техники
Last edited by Xerox on Mon 30 Dec, 2019 22:29, edited 1 time in total.
Post Reply

Return to “Операционные системы, командные оболочки и прочее”