From ddd52ca9335cb5c4cf8ec6dfc1848de566b592b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Tue, 28 Feb 2023 20:39:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A6=81=E7=94=A8=E5=BF=AB=E9=80=9F?= =?UTF-8?q?=E7=BC=96=E8=BE=91&=E4=BC=98=E5=8C=96=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/gocq/main.go | 11 ++++++++--- global/terminal/doc.go | 2 +- global/terminal/double_click.go | 2 +- global/terminal/quick_edit.go | 6 ++++++ global/terminal/quick_edit_windows.go | 19 +++++++++++++++++++ global/terminal/vt100.go | 6 ++++++ global/terminal/vt100_windows.go | 19 +++++++++++++++++++ main.go | 4 ++++ 8 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 global/terminal/quick_edit.go create mode 100644 global/terminal/quick_edit_windows.go create mode 100644 global/terminal/vt100.go create mode 100644 global/terminal/vt100_windows.go diff --git a/cmd/gocq/main.go b/cmd/gocq/main.go index fded837..adde588 100644 --- a/cmd/gocq/main.go +++ b/cmd/gocq/main.go @@ -41,8 +41,10 @@ var allowStatus = [...]client.UserOnlineStatus{ client.StatusGaming, client.StatusVacationing, client.StatusWatchingTV, client.StatusFitness, } -// Main 启动主程序 -func Main() { +// InitBase 解析参数并检测 +// +// 如果在 windows 下双击打开了程序,程序将在此函数释出脚本后终止 +func InitBase() { base.Parse() if !base.FastStart && terminal.RunningByDoubleClick() { err := terminal.NoMoreDoubleClick() @@ -50,7 +52,7 @@ func Main() { log.Errorf("遇到错误: %v", err) time.Sleep(time.Second * 5) } - return + os.Exit(0) } switch { case base.LittleH: @@ -65,7 +67,10 @@ func Main() { } } base.Init() +} +// Main 启动主程序,必须在 InitBase 之后执行 +func Main() { rotateOptions := []rotatelogs.Option{ rotatelogs.WithRotationTime(time.Hour * 24), } diff --git a/global/terminal/doc.go b/global/terminal/doc.go index 55212d9..80afc19 100644 --- a/global/terminal/doc.go +++ b/global/terminal/doc.go @@ -1,2 +1,2 @@ -// Package terminal 包含用于检测在windows下是否通过双击运行go-cqhttp的函数 +// Package terminal 包含用于检测在windows下是否通过双击运行go-cqhttp, 禁用快速编辑, 启用VT100的函数 package terminal diff --git a/global/terminal/double_click.go b/global/terminal/double_click.go index 53f0e36..dbe3d9b 100644 --- a/global/terminal/double_click.go +++ b/global/terminal/double_click.go @@ -2,7 +2,7 @@ package terminal -// RunningByDoubleClick 检查是否通过双击直接运行,非Windows系统永远返回false +// RunningByDoubleClick 检查是否通过双击直接运行,非Windows系统永远返回false func RunningByDoubleClick() bool { return false } diff --git a/global/terminal/quick_edit.go b/global/terminal/quick_edit.go new file mode 100644 index 0000000..b85bf71 --- /dev/null +++ b/global/terminal/quick_edit.go @@ -0,0 +1,6 @@ +package terminal + +// DisableQuickEdit 禁用快速编辑,非Windows系统永远返回nil +func DisableQuickEdit() error { + return nil +} diff --git a/global/terminal/quick_edit_windows.go b/global/terminal/quick_edit_windows.go new file mode 100644 index 0000000..1186b48 --- /dev/null +++ b/global/terminal/quick_edit_windows.go @@ -0,0 +1,19 @@ +package terminal + +import "golang.org/x/sys/windows" + +// DisableQuickEdit 禁用快速编辑 +func DisableQuickEdit() error { + stdin := windows.Handle(os.Stdin.Fd()) + + var mode uint32 + err := windows.GetConsoleMode(stdin, &mode) + if err != nil { + return err + } + + mode &^= windows.ENABLE_QUICK_EDIT_MODE // 禁用快速编辑模式 + mode |= windows.ENABLE_EXTENDED_FLAGS // 启用扩展标志 + + return windows.SetConsoleMode(stdin, mode) +} diff --git a/global/terminal/vt100.go b/global/terminal/vt100.go new file mode 100644 index 0000000..ff135a4 --- /dev/null +++ b/global/terminal/vt100.go @@ -0,0 +1,6 @@ +package terminal + +// EnableVT100 启用颜色、控制字符,非Windows系统永远返回nil +func EnableVT100() error { + return nil +} diff --git a/global/terminal/vt100_windows.go b/global/terminal/vt100_windows.go new file mode 100644 index 0000000..b879ae1 --- /dev/null +++ b/global/terminal/vt100_windows.go @@ -0,0 +1,19 @@ +package terminal + +import "golang.org/x/sys/windows" + +// EnableVT100 启用颜色、控制字符 +func EnableVT100() error { + stdout := windows.Handle(os.Stdout.Fd()) + + var mode uint32 + err := windows.GetConsoleMode(stdout, &mode) + if err != nil { + return err + } + + mode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING // 启用虚拟终端处理 + mode |= windows.ENABLE_PROCESSED_OUTPUT // 启用处理后的输出 + + return windows.SetConsoleMode(stdout, mode) +} diff --git a/main.go b/main.go index 30838f7..74dbfbe 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "github.com/Mrs4s/go-cqhttp/cmd/gocq" + "github.com/Mrs4s/go-cqhttp/global/terminal" _ "github.com/Mrs4s/go-cqhttp/db/leveldb" // leveldb 数据库支持 _ "github.com/Mrs4s/go-cqhttp/modules/silk" // silk编码模块 @@ -13,5 +14,8 @@ import ( ) func main() { + gocq.InitBase() + terminal.DisableQuickEdit() + terminal.EnableVT100() gocq.Main() }