From 8679909ae04cb6789cd880dfb41a50e29afe897b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=B9=BF?= Date: Thu, 5 Jun 2025 09:45:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 4681b44..100f8d6 100644 --- a/main.go +++ b/main.go @@ -11,6 +11,7 @@ import ( ) type CmdDaemon struct { + Name string // app cli command name SocketPath string // unix socket path cmds map[string]CmdHandler } @@ -103,7 +104,7 @@ func (c *CmdDaemon) Listen() error { cmdHandler, ok := c.cmds[req.Cmd] if !ok { _ = Write(conn, CmdResponse{ - Error: "unknown command: " + req.Cmd, + Error: "unknown command: " + req.Cmd + "\n" + c.Usage(), Continue: false, }) return @@ -113,12 +114,23 @@ func (c *CmdDaemon) Listen() error { cmdConn := &CmdConn{Conn: conn, Id: req.Id} err = cmdHandler.Handle(cmdConn, req) if err != nil { - _ = cmdConn.WriteError(err, false) + _ = cmdConn.End(err.Error() + cmdHandler.Usage()) } }(conn) } } +func (c *CmdDaemon) Usage() string { + usage := fmt.Sprintf("Usage: %s [options] [args...]\n\n", c.Name) + usage += "Options:\n" + usage += " -d, --debug Run command in debug mode\n\n" + usage += "Commands:\n" + for cmd, handler := range c.cmds { + usage += fmt.Sprintf(" %-10s %s\n", cmd, handler.Description()) + } + return usage +} + func (c *CmdDaemon) RegisterCmd(cmd string, handler CmdHandler) { c.cmds[cmd] = handler }