From b44f4c7e340c13c5736e247871107d0fa82e051e Mon Sep 17 00:00:00 2001 From: Gadzhi Kharkharov Date: Tue, 14 Sep 2021 09:32:57 +0300 Subject: [PATCH 1/4] wip: default session --- cmd/edit.go | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/cmd/edit.go b/cmd/edit.go index ee53b44..2f912cb 100644 --- a/cmd/edit.go +++ b/cmd/edit.go @@ -34,23 +34,12 @@ func (c *EditCmd) Run() error { } _, useGitDirSessions := os.LookupEnv("KKS_USE_GITDIR_SESSIONS") + // defaultSession := os.Getenv("KKS_DEFAULT_SESSION") - gitdirSess := struct { - name string - exists bool - }{"", false} + var gitDirSess *gitDirSession if useGitDirSessions { - gitOut, err := exec.Command("git", "rev-parse", "--show-toplevel").Output() - if err == nil { - gitdirSess.name = strings.TrimSpace(strings.ReplaceAll(path.Base(string(gitOut)), ".", "-")) - sessions, _ := kak.List() - for _, s := range sessions { - if s.Name == gitdirSess.name { - gitdirSess.exists = true - } - } - } + _ = gitDirSess.Init() } switch c.session { @@ -97,3 +86,24 @@ func (c *EditCmd) Run() error { return nil } + +type gitDirSession struct { + name string + exists bool +} + +func (gs *gitDirSession) Init() error { + gitOut, err := exec.Command("git", "rev-parse", "--show-toplevel").Output() + if err != nil { + return err + } + gs.name = strings.TrimSpace(strings.ReplaceAll(path.Base(string(gitOut)), ".", "-")) + + sessions, _ := kak.List() + for _, s := range sessions { + if s.Name == gs.name { + gs.exists = true + } + } + return nil +} From 551bd6aa209a9b06a41318ff1fa5de9c58049050 Mon Sep 17 00:00:00 2001 From: Gadzhi Kharkharov Date: Tue, 14 Sep 2021 09:32:57 +0300 Subject: [PATCH 2/4] wip: default session --- cmd/edit.go | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/cmd/edit.go b/cmd/edit.go index ee53b44..2f912cb 100644 --- a/cmd/edit.go +++ b/cmd/edit.go @@ -34,23 +34,12 @@ func (c *EditCmd) Run() error { } _, useGitDirSessions := os.LookupEnv("KKS_USE_GITDIR_SESSIONS") + // defaultSession := os.Getenv("KKS_DEFAULT_SESSION") - gitdirSess := struct { - name string - exists bool - }{"", false} + var gitDirSess *gitDirSession if useGitDirSessions { - gitOut, err := exec.Command("git", "rev-parse", "--show-toplevel").Output() - if err == nil { - gitdirSess.name = strings.TrimSpace(strings.ReplaceAll(path.Base(string(gitOut)), ".", "-")) - sessions, _ := kak.List() - for _, s := range sessions { - if s.Name == gitdirSess.name { - gitdirSess.exists = true - } - } - } + _ = gitDirSess.Init() } switch c.session { @@ -97,3 +86,24 @@ func (c *EditCmd) Run() error { return nil } + +type gitDirSession struct { + name string + exists bool +} + +func (gs *gitDirSession) Init() error { + gitOut, err := exec.Command("git", "rev-parse", "--show-toplevel").Output() + if err != nil { + return err + } + gs.name = strings.TrimSpace(strings.ReplaceAll(path.Base(string(gitOut)), ".", "-")) + + sessions, _ := kak.List() + for _, s := range sessions { + if s.Name == gs.name { + gs.exists = true + } + } + return nil +} From ef8210b3b6c56a14319cf62f38953a0bbef7f65d Mon Sep 17 00:00:00 2001 From: Gadzhi Kharkharov Date: Tue, 14 Sep 2021 13:14:40 +0300 Subject: [PATCH 3/4] feat: on edit without context, connect to default session if exists --- cmd/edit.go | 54 +++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/cmd/edit.go b/cmd/edit.go index 2f912cb..8acc807 100644 --- a/cmd/edit.go +++ b/cmd/edit.go @@ -33,31 +33,36 @@ func (c *EditCmd) Run() error { return err } - _, useGitDirSessions := os.LookupEnv("KKS_USE_GITDIR_SESSIONS") - // defaultSession := os.Getenv("KKS_DEFAULT_SESSION") - - var gitDirSess *gitDirSession - - if useGitDirSessions { - _ = gitDirSess.Init() - } - switch c.session { case "": - if gitdirSess.name != "" { - if !gitdirSess.exists { - sessionName, err := kak.Create(gitdirSess.name) + var gitDirName string + _, useGitDirSessions := os.LookupEnv("KKS_USE_GITDIR_SESSIONS") + + if useGitDirSessions { + gitDirName = parseGitToplevel() + } + + if gitDirName != "" { + if !sessionExists(gitDirName) { + sessionName, err := kak.Create(gitDirName) if err != nil { return err } fmt.Println("git-dir session started:", sessionName) } - if err := kak.Connect(fp.Name, fp.Line, fp.Column, gitdirSess.name); err != nil { + if err := kak.Connect(fp.Name, fp.Line, fp.Column, gitDirName); err != nil { return err } } else { - if err := kak.Run(fp.Name, fp.Line, fp.Column); err != nil { - return err + defaultSession := os.Getenv("KKS_DEFAULT_SESSION") + if defaultSession != "" && sessionExists(defaultSession) { + if err := kak.Connect(fp.Name, fp.Line, fp.Column, defaultSession); err != nil { + return err + } + } else { + if err := kak.Run(fp.Name, fp.Line, fp.Column); err != nil { + return err + } } } default: @@ -87,23 +92,20 @@ func (c *EditCmd) Run() error { return nil } -type gitDirSession struct { - name string - exists bool -} - -func (gs *gitDirSession) Init() error { +func parseGitToplevel() string { gitOut, err := exec.Command("git", "rev-parse", "--show-toplevel").Output() if err != nil { - return err + return "" } - gs.name = strings.TrimSpace(strings.ReplaceAll(path.Base(string(gitOut)), ".", "-")) + return strings.TrimSpace(strings.ReplaceAll(path.Base(string(gitOut)), ".", "-")) +} +func sessionExists(name string) bool { sessions, _ := kak.List() for _, s := range sessions { - if s.Name == gs.name { - gs.exists = true + if s.Name == name { + return true } } - return nil + return false } From 45b98a996648994fad3833d6165c3e2c0de4c1af Mon Sep 17 00:00:00 2001 From: Gadzhi Kharkharov Date: Tue, 14 Sep 2021 13:30:05 +0300 Subject: [PATCH 4/4] docs: update readme for default session --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 5fda0ba..101071f 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,19 @@ running `kks edit` will do the following: - if a session for the directory doesn't exist, `kks` will start a new session and connect to it. +### Default session + +``` +export KKS_DEFAULT_SESSION='mysession' +``` + +When context is not set (`KKS_SESSION` is empty), running `kks edit` will check +for a session defined by `KKS_DEFAULT_SESSION` variable. If the session is +running, `kks` will connect to it instead of starting a new session. + +`kks` will not start the default session if it's not running. You can use the +autostarting mechanism of your desktop to start it with `kak -d -s mysession`. + ## Provided scripts | script | function |