Support editing multiple files at once using range selection

We pass all of them to a single editor command, hoping that the editor will be
able to handle multiple files (VS Code and vim do).

We ignore directories that happen to be in the selection range; this makes it
easier to edit multiple files in different folders in tree view. We show an
error if only directories are selected, though.
This commit is contained in:
Stefan Haller 2024-03-20 21:01:20 +01:00
parent 9b5269b490
commit 73019574a8
7 changed files with 69 additions and 30 deletions

View file

@ -177,9 +177,9 @@ func TestEditFileCmdStrLegacy(t *testing.T) {
}
}
func TestEditFileCmd(t *testing.T) {
func TestEditFilesCmd(t *testing.T) {
type scenario struct {
filename string
filenames []string
osConfig config.OSConfig
expectedCmdStr string
suspend bool
@ -187,13 +187,13 @@ func TestEditFileCmd(t *testing.T) {
scenarios := []scenario{
{
filename: "test",
filenames: []string{"test"},
osConfig: config.OSConfig{},
expectedCmdStr: `vim -- "test"`,
suspend: true,
},
{
filename: "test",
filenames: []string{"test"},
osConfig: config.OSConfig{
Edit: "nano {{filename}}",
},
@ -201,13 +201,21 @@ func TestEditFileCmd(t *testing.T) {
suspend: true,
},
{
filename: "file/with space",
filenames: []string{"file/with space"},
osConfig: config.OSConfig{
EditPreset: "sublime",
},
expectedCmdStr: `subl -- "file/with space"`,
suspend: false,
},
{
filenames: []string{"multiple", "files"},
osConfig: config.OSConfig{
EditPreset: "sublime",
},
expectedCmdStr: `subl -- "multiple" "files"`,
suspend: false,
},
}
for _, s := range scenarios {
@ -218,7 +226,7 @@ func TestEditFileCmd(t *testing.T) {
userConfig: userConfig,
})
cmdStr, suspend := instance.GetEditCmdStr(s.filename)
cmdStr, suspend := instance.GetEditCmdStr(s.filenames)
assert.Equal(t, s.expectedCmdStr, cmdStr)
assert.Equal(t, s.suspend, suspend)
}