ahk编辑器增强套件2-工程文件快速打开工作区的指定

这次没有带lib,之后四个套件合并发布的时候带着lib一起

序言:这个工具做啥的?

首先看一张图

这是eme,这个工具的作用就是快速在选定的工作区内搜索文件然后使用当前的编辑器快速打开这个文件,让原本没有自带快速打开功能的编辑器也能完成快速打开,全局编辑器增强,当然不仅仅是适用于ahk,其他的语言文件一样可以预览和打开

1. 缘起

vscode按下^p可以快速切换文件这个功能实在是很舒服,但是scite等编辑器没有,所以决定做一个脚本来变相实现这个功能

演示vsocde的效果

2. 致谢

感谢zzz大佬的超级命令管理器,以及僵尸大佬本地化修改超级命令管理器的创意,站在大佬的肩膀上,这个工具实际上就是超级命令管理器的分支版本

3.功能特点

1. 支持自定义编辑器

只在编辑器内触发,比如我定义 了scite,np3等没有自带文件管理器的编辑器

2.预览文件

vscode自带的这个功能是不能进行预览的,但是这个可以进行预览

3. 跳转文件管理器打开

支持自定义打开的文件管理器

4. 代码快速上屏或者复制

5.支持自定义工作区,搜索的文件内容来自工作区

这个功能就是类似代码片段的管理的使用了,也就是说可以仍旧当作代码片段的管理器

功能演示scite

 

np3

 

eme

4. 下个版本加入的特性

vscode自带一个挺不错的文件管理器在侧面,vim这样的也可以通过插件来装上一个这样的功能,但是有些编辑器就是没法原生实现的,所以我在下个版本中打算做一个ahk的实现方案

 

5.功能联动

之前是做了一个多编辑器跳转工具的,之后我制作的所有编辑器相关的工具将集成在一个汇总工具上进行发布

整体工具暂时命名为ahk编辑增强套件,由多个组建构成

 

6. 多个编辑器中的实际使用体验示例

7. 源码

/* 参照vscode的^p设计的全局功能
可以实现在np3,scite,eme等没有自带资源管理器的编辑器中实现以下功能
1. 快速打开工作区中文件
2. 快速打开历史文件
3. 生成一个类似vscode的文件管理页面,查看设置的工作区内文件
4. 支持首字母快搜
5. 支持预览文件
*/
;*************************************使用功能的编辑器组***********************
GroupAdd, editorall,ahk_exe Notepad.exe
GroupAdd, editorall,ahk_exe SciTE.exe
GroupAdd, editorall,ahk_exe EmEditor.exe
;*************************************       ***********************


;相信会用这个工具的大兄弟都会自己修改源码的,所以我懒得做配置gui和ini了,全部提到开头自己改
;************************************* 一些参数      ***********************
指定编辑器路径 := "C:\AHK\SciTE\SciTE.exe"
指定文件管理器路径:="C:\SoftDir\totalcmd10.5_ez\TOTALCMD.EXE"
ahkPath:="C:\AHK\AutoHotkey.exe"
框体位置x := 1000
框体位置y := 400
框体位置w := 600
字号 := 16
字体 := "微软雅黑"
BackgroundColor := "ffc0cb"
TextColor := "666666"
Gtts := 0
workSpace:=["C:\AHK\Lib\","C:\HznCodeProject\WorkingScripts\"]
查看文件类型:="(ahk|txt)$"
;************************************* 一些快捷键 ***********************
Hotkey, IfWinActive, ahk_group editorall
	Hotkey, ^p, 显示隐藏搜索框
Hotkey, if, (WinExist("ahk_id " MyGuiHwnd) && (Showstr))
Hotkey, Down, 下一条
Hotkey, Up, 上一条
Hotkey, Enter, 编辑脚本
Hotkey, ^v, 直接输入
Hotkey, ^c, 复制到剪切板
Hotkey, ^o, 打开文件路径
Hotkey, ^r, ahk运行
Hotkey, if
Hotkey, if, (WinExist("ahk_id " MyGuiHwnd))
Hotkey, if
;************************************* 不用动的      ***********************
; hlog(1,1,1)
#SingleInstance Force
#MaxMem 640
#KeyHistory 0
#Persistent
SetBatchLines -1
DetectHiddenWindows On
SetWinDelay -1
SetControlDelay -1
SetWorkingDir %A_ScriptDir%
FileEncoding UTF-8
CoordMode, ToolTip, Screen
CoordMode, Caret , Screen
ListLines Off
#Include %A_ScriptDir%
#Include <py>
#Include <utility>
#Include <btt>
#Include <fileplus>
MyFile := New FilePlus
OnMessage(0x020A,"Mouse_MButton_W1")
OnMessage(0x0201,"Mouse_LButton_D1")
HpTip =
(
显隐搜索框`tCtrl Shift Enter
-----------------------------------
选择条目`tUp/Down
输出到输入框`tCtrl v
复制到剪切板`tCtrl c
直接编辑器打开脚本`tEnter
打开脚本目录`tCtrl o
-----------------------------------
隐藏搜索框`tEsc
重启脚本`tAlt r
-----------------------------------
从其他地方复制文本后,打开搜索
框,以“+”开头并补全提示的路
径在目标位置新建脚本文件
)
BttStyle :=  {Margin:10                                      ; If omitted, 5 will be used. Range 0-30.
	, TabStops:[50, 80, 100]                         ; If omitted, [50] will be used. This value must be an array.
	, TextColor:0xff999999                           ; ARGB
	, BackgroundColor:0xff010101                     ; ARGB
	, Font:"微软雅黑"                               ; If omitted, ToolTip's Font will be used. Can specify the font file path.
	, FontSize:18                                    ; If omitted, 12 will be used.
	, FontRender:5                                   ; If omitted, 5 will be used. Range 0-5.
	, FontStyle:"Regular"}
;*******************************************************



;************************************* 重点修改***********************
更新文件列表:
	Dir_File_All := {}
	Dir_File := []
	arr:={}
	for k,v in workSpace{
		loop Files, %v%\*.*, R
		{
			if regexmatch(A_loopFilePath,查看文件类型)
				FileList .=A_LoopFilePath "`n"
		}
		}
	FileList := Trim(FileList, "`n")
	Sort, FileList
	loop Parse, FileList, `n, `r
	{
		SplitPath, A_LoopField,name,dir
		FileJP := py.initials_muti(name)
		FileQP := py.allspell_muti(name)
		Dir_File[1] := FileJP FileQP name
		Dir_File[2] := name
		arr["" name ""]:=A_LoopField  ;引入一个辅助数组以名字作为key来索引全路径
		Dir_File_All["" A_LoopField ""] := Dir_File
		Dir_File := []
	}
	Btt(HpTip, 0, 0, ,"BttStyle")
	SetTimer, MoveBtt, -2000
return

对比:
	ControlGetText, 检索内容, , ahk_id %SSK%
	SetTimer, 搜索脚本, -10
return

搜索脚本:
	Showstr := ""
	Showarr := {}
	For k,v in Dir_File_All
	{
		if InStr(v[1], 检索内容)
			Showarr.Push(v[2])
		
	}
	For Showstrk,Showstrv in Showarr
	{
		Showstr .= "|" Showstrk "  " Showstrv
		n := A_Index
	}
	Showstr := (检索内容) ? Showstr : ""
	更新List(Showstr)
return
choosestr:
	Gui, ss:Submit, NoHide
	arrKey:=RegExReplace(command,"\d\s+")
	Add_Script_Path :=Bttstr :=Script_Path_Long:=Script_Str := ""
	ControlGetText, 检索内容, , ahk_id %SSK%
	Script_Path_Long := arr[arrKey]
	FileRead, Script_Str, % Script_Path_Long
	Bttstr := RegExReplace(Script_Str,"m`a).{100}", "$0`n")
	Bttstr :=Script_Path_Long "`n" Bttstr
	Gtt()
	GttPos := Btt(Bttstr, 框体位置x + 框体位置w + 5, 框体位置y, ,"BttStyle")
return

更新List(ListStr := "") {
	global
	GuiControl, ss:, Command, % (ListStr) ? ListStr : ""
	ListN := ((n < 15) ? n : 15) * 30
	ListN := !(ListStr) ? 0 : ListN
	GuiControl, ss:Move, Command, % "h" ListN
	ChooseRow := 1
	GuiControl, ss:Choose, command, % ChooseRow
	gosub choosestr
	Gui, ss:show, AutoSize
	if !(ListStr) {
		Gtt()
		Btt()
		GuiControl, ss:, Command, |
		; Btt(HpTip, 框体位置x + 框体位置w + 5, 框体位置y, ,"BttStyle")
	}
}
;************************************* 重点修改***********************


显示隐藏搜索框:
	WinGet,ed1, ProcessName,A
	WinGet, editorPath, ProcessPath,A
	SetTimer, MoveBtt, Off
	if (WinExist("ahk_id " MyGuiHwnd))
	{
		Gui, ss:Destroy
		Btt()
		Gtt()
		return
	}
	Gui, ss:Margin, 0, 0
	Gui, ss:-Caption +Border
	Gui, ss:+AlwaysOnTop -DPIScale +ToolWindow +HwndMyGuiHwnd +E0x02000000 +E0x00080000
	Gui, ss:Font, s%字号%, %字体%
	Gui, ss:Add, Edit, g对比 v搜索框 HwndSSK w%框体位置w% -E0x200
	Gui, ss:Font, s%字号%, %字体%
	Gui, ss:Add, ListBox, hwndLIST h0 vCommand -HScroll -E0x200 w%框体位置w% gchoosestr
	GuiControl, ss:Move, Command, h0
	ControlColor(SSK, MyGuiHwnd, "0x" BackgroundColor, "0x" TextColor)
	ControlColor(LIST, MyGuiHwnd, "0x" BackgroundColor, "0x" TextColor)
	Gui, ss:show, AutoSize x%框体位置x% y%框体位置y%
	; Btt(HpTip, 框体位置x + 框体位置w + 5, 框体位置y, ,"BttStyle")
return


下一条:
	ChooseRow := (ChooseRow < n) ? ChooseRow + 1 : ChooseRow
	GuiControl, ss:Choose, command, % ChooseRow
	Sleep 50
	gosub choosestr
return

上一条:
	ChooseRow := (ChooseRow > 1) ? ChooseRow - 1 : ChooseRow
	GuiControl, ss:Choose, command, % ChooseRow
	Sleep 50
	gosub choosestr
return

ssGuiEscape:
ssGuiClose:
	gosub Gui_Destroy
return


Gui_Destroy:
	Btt()
	Gtt()
	Gui, ss:Destroy
return

直接输入:
	Clipboard := ""
	gosub Gui_Destroy
	Clipboard := Script_Str
	ClipWait, 2
	Sleep 100
	Send, ^v
return

复制到剪切板:
	Clipboard := ""
	gosub Gui_Destroy
	Clipboard := Script_Str
	ClipWait, 2
return

ahk运行:
	gosub Gui_Destroy
	Run,%Script_Path_Long%
return

编辑脚本:
	; Run, %指定编辑器路径% %Script_Path_Long%
	gosub Gui_Destroy
	Run, %editorPath% %Script_Path_Long%
	sleep 200
	if (ProcessName="SciTE.exe")
		WinActivate ahk_exe SciTE.exe
return
 
打开文件路径:
	SplitPath,Script_Path_Long, , sPath
	Run,%指定文件管理器路径% %sPath%
	gosub Gui_Destroy
return

MoveBtt:
	btt()
return

Mouse_MButton_W1(wParam, lParam, msg, hwnd){
	global
	if (A_Gui = "_BTT1") && (Gtts = 1){
		Btt()
		Gtt_T := (Bttstr) ? Bttstr : Add_Script_Path
		Gtt(Gtt_T, 框体位置x + 框体位置w + 5, 框体位置y, GttPos["w"], GttPos["h"])
	}
}
Mouse_LButton_D1(wParam, lParam, msg, hwnd){
	global
	PostMessage, 0xA1, 2
	KeyWait, LButton
	WinGetPos, w_x, w_y, w_w, w_h, ahk_id %MyGuiHwnd%
	框体位置x := w_x, 框体位置y := w_y, 框体位置w := w_w
	return 0
}

#If (WinExist("ahk_id " MyGuiHwnd) && (Showstr))
#If
#If (WinExist("ahk_id " MyGuiHwnd))
#If

Gtt(Gtt_Text := "", Gtt_x := "", Gtt_y := "", Gtt_w := "", Gtt_h := ""){
	global
	if !(Gtt_Text)
		Gui, Gtt:Destroy
	else {
		Gui, Gtt:Destroy
		Gui, Gtt:Margin, 0, 0
		Gui, Gtt:-0x400000 +Border
		Gui, Gtt:+AlwaysOnTop -DPIScale +ToolWindow +HwndGttHwnd +LastFound
		Gui, Gtt:Font, s14, 微软雅黑
		Gui, Gtt:Add, Edit, HwndGttEdit -E0x200 +Multi vGttEdit w%Gtt_w% h%Gtt_h%, % Gtt_Text
		ControlColor(GttEdit, GttHwnd, "0x" BackgroundColor, "0x" TextColor)
		Gtt_ww := Gtt_w - 20
		Gui, Gtt:Show, NA x%Gtt_x% y%Gtt_y% w%Gtt_ww%
	}
}

给TA捐赠
共{{data.count}}人
人已捐赠
AHKV1应用

关于一个自动答题脚本的思路....

2022-9-7 23:02:16

AHKV1应用案例

为你的脚本添加微信推送功能吧!AHK调用Server酱

2022-9-8 11:21:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
有新私信 私信列表
搜索