1
1
package config
2
2
3
- import "os"
3
+ import (
4
+ "os"
5
+ "strings"
6
+ )
4
7
5
- func GetEditTemplate (osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
6
- preset := getPreset (osConfig , guessDefaultEditor )
8
+ func GetEditTemplate (shell string , osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
9
+ preset := getPreset (shell , osConfig , guessDefaultEditor )
7
10
template := osConfig .Edit
8
11
if template == "" {
9
12
template = preset .editTemplate
@@ -12,26 +15,26 @@ func GetEditTemplate(osConfig *OSConfig, guessDefaultEditor func() string) (stri
12
15
return template , getEditInTerminal (osConfig , preset )
13
16
}
14
17
15
- func GetEditAtLineTemplate (osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
16
- preset := getPreset (osConfig , guessDefaultEditor )
18
+ func GetEditAtLineTemplate (shell string , osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
19
+ preset := getPreset (shell , osConfig , guessDefaultEditor )
17
20
template := osConfig .EditAtLine
18
21
if template == "" {
19
22
template = preset .editAtLineTemplate
20
23
}
21
24
return template , getEditInTerminal (osConfig , preset )
22
25
}
23
26
24
- func GetEditAtLineAndWaitTemplate (osConfig * OSConfig , guessDefaultEditor func () string ) string {
25
- preset := getPreset (osConfig , guessDefaultEditor )
27
+ func GetEditAtLineAndWaitTemplate (shell string , osConfig * OSConfig , guessDefaultEditor func () string ) string {
28
+ preset := getPreset (shell , osConfig , guessDefaultEditor )
26
29
template := osConfig .EditAtLineAndWait
27
30
if template == "" {
28
31
template = preset .editAtLineAndWaitTemplate
29
32
}
30
33
return template
31
34
}
32
35
33
- func GetOpenDirInEditorTemplate (osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
34
- preset := getPreset (osConfig , guessDefaultEditor )
36
+ func GetOpenDirInEditorTemplate (shell string , osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
37
+ preset := getPreset (shell , osConfig , guessDefaultEditor )
35
38
template := osConfig .OpenDirInEditor
36
39
if template == "" {
37
40
template = preset .openDirInEditorTemplate
@@ -50,17 +53,28 @@ type editPreset struct {
50
53
func returnBool (a bool ) func () bool { return (func () bool { return a }) }
51
54
52
55
// IF YOU ADD A PRESET TO THIS FUNCTION YOU MUST UPDATE THE `Supported presets` SECTION OF docs/Config.md
53
- func getPreset (osConfig * OSConfig , guessDefaultEditor func () string ) * editPreset {
56
+ func getPreset (shell string , osConfig * OSConfig , guessDefaultEditor func () string ) * editPreset {
57
+ var nvimRemoteEditTemplate , nvimRemoteEditAtLineTemplate , nvimRemoteOpenDirInEditorTemplate string
58
+ // By default fish doesn't have SHELL variable set, but it does have FISH_VERSION since Nov 2012.
59
+ if (strings .HasSuffix (shell , "fish" )) || (os .Getenv ("FISH_VERSION" ) != "" ) {
60
+ nvimRemoteEditTemplate = `begin; if test -z "$NVIM"; nvim -- {{filename}}; else; nvim --server "$NVIM" --remote-send "q"; nvim --server "$NVIM" --remote-tab {{filename}}; end; end`
61
+ nvimRemoteEditAtLineTemplate = `begin; if test -z "$NVIM"; nvim +{{line}} -- {{filename}}; else; nvim --server "$NVIM" --remote-send "q"; nvim --server "$NVIM" --remote-tab {{filename}}; nvim --server "$NVIM" --remote-send ":{{line}}<CR>"; end; end`
62
+ nvimRemoteOpenDirInEditorTemplate = `begin; if test -z "$NVIM"; nvim -- {{dir}}; else; nvim --server "$NVIM" --remote-send "q"; nvim --server "$NVIM" --remote-tab {{dir}}; end; end`
63
+ } else {
64
+ nvimRemoteEditTemplate = `[ -z "$NVIM" ] && (nvim -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{filename}})`
65
+ nvimRemoteEditAtLineTemplate = `[ -z "$NVIM" ] && (nvim +{{line}} -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{filename}} && nvim --server "$NVIM" --remote-send ":{{line}}<CR>")`
66
+ nvimRemoteOpenDirInEditorTemplate = `[ -z "$NVIM" ] && (nvim -- {{dir}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{dir}})`
67
+ }
54
68
presets := map [string ]* editPreset {
55
69
"vi" : standardTerminalEditorPreset ("vi" ),
56
70
"vim" : standardTerminalEditorPreset ("vim" ),
57
71
"nvim" : standardTerminalEditorPreset ("nvim" ),
58
72
"nvim-remote" : {
59
- editTemplate : `[ -z "$NVIM" ] && (nvim -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{filename}})` ,
60
- editAtLineTemplate : `[ -z "$NVIM" ] && (nvim +{{line}} -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{filename}} && nvim --server "$NVIM" --remote-send ":{{line}}<CR>")` ,
73
+ editTemplate : nvimRemoteEditTemplate ,
74
+ editAtLineTemplate : nvimRemoteEditAtLineTemplate ,
61
75
// No remote-wait support yet. See https://github.com/neovim/neovim/pull/17856
62
76
editAtLineAndWaitTemplate : `nvim +{{line}} {{filename}}` ,
63
- openDirInEditorTemplate : `[ -z "$NVIM" ] && (nvim -- {{dir}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{dir}})` ,
77
+ openDirInEditorTemplate : nvimRemoteOpenDirInEditorTemplate ,
64
78
suspend : func () bool {
65
79
_ , ok := os .LookupEnv ("NVIM" )
66
80
return ! ok
0 commit comments