2023-03-26 14:04:09 +02:00
|
|
|
package config
|
|
|
|
|
|
|
|
func GetEditTemplate(osConfig *OSConfig, guessDefaultEditor func() string) (string, bool) {
|
|
|
|
preset := getPreset(osConfig, guessDefaultEditor)
|
|
|
|
template := osConfig.Edit
|
|
|
|
if template == "" {
|
|
|
|
template = preset.editTemplate
|
|
|
|
}
|
|
|
|
|
|
|
|
return template, getEditInTerminal(osConfig, preset)
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetEditAtLineTemplate(osConfig *OSConfig, guessDefaultEditor func() string) (string, bool) {
|
|
|
|
preset := getPreset(osConfig, guessDefaultEditor)
|
|
|
|
template := osConfig.EditAtLine
|
|
|
|
if template == "" {
|
|
|
|
template = preset.editAtLineTemplate
|
|
|
|
}
|
|
|
|
return template, getEditInTerminal(osConfig, preset)
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetEditAtLineAndWaitTemplate(osConfig *OSConfig, guessDefaultEditor func() string) string {
|
|
|
|
preset := getPreset(osConfig, guessDefaultEditor)
|
|
|
|
template := osConfig.EditAtLineAndWait
|
|
|
|
if template == "" {
|
|
|
|
template = preset.editAtLineAndWaitTemplate
|
|
|
|
}
|
|
|
|
return template
|
|
|
|
}
|
|
|
|
|
|
|
|
type editPreset struct {
|
|
|
|
editTemplate string
|
|
|
|
editAtLineTemplate string
|
|
|
|
editAtLineAndWaitTemplate string
|
|
|
|
editInTerminal bool
|
|
|
|
}
|
|
|
|
|
2023-05-04 08:53:13 +02:00
|
|
|
// IF YOU ADD A PRESET TO THIS FUNCTION YOU MUST UPDATE THE `Supported presets` SECTION OF docs/Config.md
|
2023-03-26 14:04:09 +02:00
|
|
|
func getPreset(osConfig *OSConfig, guessDefaultEditor func() string) *editPreset {
|
|
|
|
presets := map[string]*editPreset{
|
2023-04-27 17:47:47 +02:00
|
|
|
"vi": standardTerminalEditorPreset("vi"),
|
|
|
|
"vim": standardTerminalEditorPreset("vim"),
|
|
|
|
"nvim": standardTerminalEditorPreset("nvim"),
|
|
|
|
"emacs": standardTerminalEditorPreset("emacs"),
|
|
|
|
"nano": standardTerminalEditorPreset("nano"),
|
2023-06-05 14:53:39 +02:00
|
|
|
"kakoune": standardTerminalEditorPreset("kak"),
|
2023-05-25 15:50:33 +02:00
|
|
|
"helix": {
|
|
|
|
editTemplate: "hx -- {{filename}}",
|
|
|
|
editAtLineTemplate: "hx -- {{filename}}:{{line}}",
|
|
|
|
editAtLineAndWaitTemplate: "hx -- {{filename}}:{{line}}",
|
|
|
|
editInTerminal: true,
|
|
|
|
},
|
2023-03-26 14:04:09 +02:00
|
|
|
"vscode": {
|
|
|
|
editTemplate: "code --reuse-window -- {{filename}}",
|
|
|
|
editAtLineTemplate: "code --reuse-window --goto -- {{filename}}:{{line}}",
|
|
|
|
editAtLineAndWaitTemplate: "code --reuse-window --goto --wait -- {{filename}}:{{line}}",
|
|
|
|
editInTerminal: false,
|
|
|
|
},
|
|
|
|
"sublime": {
|
|
|
|
editTemplate: "subl -- {{filename}}",
|
|
|
|
editAtLineTemplate: "subl -- {{filename}}:{{line}}",
|
|
|
|
editAtLineAndWaitTemplate: "subl --wait -- {{filename}}:{{line}}",
|
|
|
|
editInTerminal: false,
|
|
|
|
},
|
|
|
|
"bbedit": {
|
|
|
|
editTemplate: "bbedit -- {{filename}}",
|
|
|
|
editAtLineTemplate: "bbedit +{{line}} -- {{filename}}",
|
|
|
|
editAtLineAndWaitTemplate: "bbedit +{{line}} --wait -- {{filename}}",
|
|
|
|
editInTerminal: false,
|
|
|
|
},
|
|
|
|
"xcode": {
|
|
|
|
editTemplate: "xed -- {{filename}}",
|
|
|
|
editAtLineTemplate: "xed --line {{line}} -- {{filename}}",
|
|
|
|
editAtLineAndWaitTemplate: "xed --line {{line}} --wait -- {{filename}}",
|
|
|
|
editInTerminal: false,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
// Some of our presets have a different name than the editor they are using.
|
|
|
|
editorToPreset := map[string]string{
|
2023-04-27 17:47:47 +02:00
|
|
|
"kak": "kakoune",
|
2023-05-25 15:50:33 +02:00
|
|
|
"hx": "helix",
|
2023-03-26 14:04:09 +02:00
|
|
|
"code": "vscode",
|
|
|
|
"subl": "sublime",
|
|
|
|
"xed": "xcode",
|
|
|
|
}
|
|
|
|
|
|
|
|
presetName := osConfig.EditPreset
|
|
|
|
if presetName == "" {
|
|
|
|
defaultEditor := guessDefaultEditor()
|
|
|
|
if presets[defaultEditor] != nil {
|
|
|
|
presetName = defaultEditor
|
|
|
|
} else if p := editorToPreset[defaultEditor]; p != "" {
|
|
|
|
presetName = p
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if presetName == "" || presets[presetName] == nil {
|
|
|
|
presetName = "vim"
|
|
|
|
}
|
|
|
|
|
|
|
|
return presets[presetName]
|
|
|
|
}
|
|
|
|
|
|
|
|
func standardTerminalEditorPreset(editor string) *editPreset {
|
|
|
|
return &editPreset{
|
|
|
|
editTemplate: editor + " -- {{filename}}",
|
|
|
|
editAtLineTemplate: editor + " +{{line}} -- {{filename}}",
|
|
|
|
editAtLineAndWaitTemplate: editor + " +{{line}} -- {{filename}}",
|
|
|
|
editInTerminal: true,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func getEditInTerminal(osConfig *OSConfig, preset *editPreset) bool {
|
|
|
|
if osConfig.EditInTerminal != nil {
|
|
|
|
return *osConfig.EditInTerminal
|
|
|
|
}
|
|
|
|
return preset.editInTerminal
|
|
|
|
}
|