Allow simple interaction to pick save file name

can type and if no matches are found the typed text is used as the file
name with a further opportunity to edit it.
This commit is contained in:
Kovid Goyal
2025-07-03 12:14:24 +05:30
parent 8ea7ebb242
commit 115227e61a
2 changed files with 20 additions and 12 deletions

View File

@@ -292,7 +292,7 @@ func (h *Handler) change_to_current_dir_if_possible() error {
func (h *Handler) finish_selection() error {
if h.state.mode.CanSelectNonExistent() {
h.initialize_save_file_name()
h.initialize_save_file_name(h.state.suggested_save_file_name)
return h.draw_screen()
}
h.lp.Quit(0)
@@ -333,15 +333,17 @@ func (h *Handler) OnKeyEvent(ev *loop.KeyEvent) (err error) {
return h.draw_screen()
}
case ev.MatchesPressOrRepeat("enter"):
m := h.current_abspath()
if h.state.mode.SelectFiles() {
m := h.current_abspath()
var s os.FileInfo
if s, err = os.Stat(m); err != nil {
h.lp.Beep()
return nil
}
if s.IsDir() {
return h.change_to_current_dir_if_possible()
if m != "" {
var s os.FileInfo
if s, err = os.Stat(m); err != nil {
h.lp.Beep()
return nil
}
if s.IsDir() {
return h.change_to_current_dir_if_possible()
}
}
}
if h.add_selection_if_possible() {
@@ -350,7 +352,13 @@ func (h *Handler) OnKeyEvent(ev *loop.KeyEvent) (err error) {
}
return h.draw_screen()
} else {
h.lp.Beep()
if h.state.mode.CanSelectNonExistent() {
t := h.state.SearchText()
h.initialize_save_file_name(utils.IfElse(t == "", h.state.suggested_save_file_name, t))
return h.draw_screen()
} else {
h.lp.Beep()
}
}
}
case SAVE_FILE:

View File

@@ -43,11 +43,11 @@ func (h *Handler) save_file_name_handle_key(ev *loop.KeyEvent) (err error) {
return
}
func (h *Handler) initialize_save_file_name() {
func (h *Handler) initialize_save_file_name(use_fname_when_no_selections string) {
h.state.screen = SAVE_FILE
h.rl.ResetText()
cdir := h.state.CurrentDir()
fname := h.state.suggested_save_file_name
fname := use_fname_when_no_selections
if len(h.state.selections) > 0 {
if q, err := filepath.Abs(h.state.selections[0]); err == nil {
if s, err := os.Stat(q); err == nil {