Files
kitty/kittens/choose_files/save-file.go
Kovid Goyal a783d4932e ...
2025-06-03 20:44:06 +05:30

73 lines
1.7 KiB
Go

package choose_files
import (
"fmt"
"os"
"path/filepath"
"github.com/kovidgoyal/kitty/tools/tui/loop"
"github.com/kovidgoyal/kitty/tools/utils"
)
var _ = fmt.Print
func (h *Handler) current_save_file_path() string {
ans := h.rl.AllText()
if ans != "" {
ans = utils.Expanduser(ans)
if !filepath.IsAbs(ans) {
ans = filepath.Join(h.state.save_file_cdir, ans)
}
}
return ans
}
func (h *Handler) save_file_name_handle_key(ev *loop.KeyEvent) (err error) {
switch {
case ev.MatchesPressOrRepeat("esc") || ev.MatchesPressOrRepeat("ctrl+c"):
h.state.selections = nil
h.state.screen = NORMAL
err = h.draw_screen()
case ev.MatchesPressOrRepeat("enter"):
if p := h.current_save_file_path(); p != "" {
h.state.selections = []string{p}
h.lp.Quit(0)
} else {
h.lp.Beep()
}
default:
if err = h.rl.OnKeyEvent(ev); err == nil {
err = h.draw_screen()
}
}
return
}
func (h *Handler) initialize_save_file_name() {
h.state.screen = SAVE_FILE
h.rl.ResetText()
cdir := h.state.CurrentDir()
fname := h.state.suggested_save_file_name
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 {
if s.IsDir() == h.state.mode.OnlyDirs() {
cdir = filepath.Dir(q)
fname = filepath.Base(q)
}
}
}
}
h.rl.SetText(fname)
h.state.save_file_cdir = cdir
}
func (h *Handler) draw_save_file_name_screen() (err error) {
desc := utils.IfElse(h.state.mode == SELECT_SAVE_FILE, "file", "directory")
h.lp.Println("Enter the name of the", desc, "below, relative to:")
h.lp.Println(h.lp.SprintStyled("fg=green", h.state.save_file_cdir))
h.lp.Println()
h.rl.RedrawNonAtomic()
return
}