Skip to content

Commit 129ba4e

Browse files
committed
feat: Change expression name
1 parent 51c8ca0 commit 129ba4e

File tree

3 files changed

+58
-7
lines changed

3 files changed

+58
-7
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ tmux-sessionizer
22
*.mov
33
# Added by goreleaser init:
44
dist/
5+
my-tmux-sessionizer

handler/handler.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,32 +116,45 @@ func (sh *SessionHandler) expandPath(path string) (string, error) {
116116
return path, nil
117117
}
118118

119+
func (sh *SessionHandler) replaceHomeDir(fullpath string) (string, error) {
120+
home, err := os.UserHomeDir()
121+
if err != nil {
122+
return "", err
123+
}
124+
return strings.Replace(fullpath, home, "~", 1), nil
125+
}
126+
119127
func (sh *SessionHandler) NewSession() error {
120128
config := sh.readConfig()
121129
if config == nil {
122130
return errors.New("failed to create new project from projects")
123131
}
124132
/*build fzf input and build hashmap to retrieve filepath from entry's name.*/
125133
var input bytes.Buffer
126-
projectHashMap := make(map[string]string, 0)
134+
projectNameFullPathMap, projectExpressionNameMap := make(map[string]string, 0), make(map[string]string, 0)
127135
for _, project := range config.projects {
128-
input.WriteString(project.name + "\n")
129-
projectHashMap[project.name] = project.filepath
136+
replaced, err := sh.replaceHomeDir(project.filepath)
137+
if err != nil {
138+
return errors.New("failed to replace home directory to ~")
139+
}
140+
input.WriteString(replaced + "\n")
141+
projectNameFullPathMap[project.name] = project.filepath
142+
projectExpressionNameMap[replaced] = project.name
130143
}
131144
fzfOut, err := sh.toFzf(input)
132145
if err != nil {
133146
return fmt.Errorf("failed to create new project from projects: %w", err)
134147
}
135-
sessionName := strings.Trim(fzfOut.String(), "\n")
148+
sessionName := projectExpressionNameMap[strings.Trim(fzfOut.String(), "\n")]
136149
if sh.isInSession() {
137-
return sh.switchToNewClient(sessionName, projectHashMap[sessionName])
150+
return sh.switchToNewClient(sessionName, projectNameFullPathMap[sessionName])
138151
}
139152
if sh.sessionExists(sessionName) {
140153
return sh.attach(sessionName)
141154
}
142155
if err := sh.newTmuxCmd(
143156
"tmux", "new-session", "-s",
144-
sessionName, "-c", projectHashMap[sessionName]).Run(); err != nil {
157+
sessionName, "-c", projectNameFullPathMap[sessionName]).Run(); err != nil {
145158
return fmt.Errorf("failed to create new session %w: ", err)
146159
}
147160
return nil

handler/handler_test.go

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ func TestExpandPath(t *testing.T) {
8181
sh := SessionHandler{}
8282
got, err := sh.expandPath(tt.args.relative)
8383
if err != nil && !errors.Is(err, tt.wantErr) {
84-
t.Errorf("failed to expand path: %v.", err)
84+
t.Errorf("failed to expand path: %v", err)
8585
return
8686
}
8787
if got != tt.want {
@@ -90,3 +90,40 @@ func TestExpandPath(t *testing.T) {
9090
})
9191
}
9292
}
93+
94+
func TestReplaceHomeDir(t *testing.T) {
95+
t.Parallel()
96+
homeDir, _ := os.UserHomeDir()
97+
type args struct {
98+
fullpath string
99+
}
100+
tests := []struct {
101+
name string
102+
args args
103+
want string
104+
wantErr error
105+
}{
106+
{
107+
name: "Normal test case1",
108+
args: args{
109+
fullpath: filepath.Join(homeDir, "a/b/c"),
110+
},
111+
want: "~/a/b/c",
112+
wantErr: nil,
113+
},
114+
}
115+
for _, tt := range tests {
116+
t.Run(tt.name, func(t *testing.T) {
117+
t.Parallel()
118+
sh := SessionHandler{}
119+
got, err := sh.replaceHomeDir(tt.args.fullpath)
120+
if err != nil && !errors.Is(err, tt.wantErr) {
121+
t.Errorf("failed to replace home directory: %v", err)
122+
return
123+
}
124+
if got != tt.want {
125+
t.Errorf("failed to replace home directory, expected: %v, but got %v", tt.want, got)
126+
}
127+
})
128+
}
129+
}

0 commit comments

Comments
 (0)