// CmdMenu offers a menu of available commands. func (editor *Editor) CmdMenu() { keys := editor.keymap.Keys() sort.Strings(keys) names := editor.keymap.DisplayNames(keys, "") xkeys := editor.xKeymap.Keys() sort.Strings(xkeys) xnames := editor.xKeymap.DisplayNames(xkeys, "Alt-6 ") names = append(names, xnames...) menu := terminal.NewMenu(editor.screen) idx := menu.Choose(names) if idx < 0 { return } if idx < len(keys) { key := keys[idx] editor.keymap.Run(key) } else { key := xkeys[idx-len(keys)] editor.xKeymap.Run(key) } }
// SetCharMode offers a menu for selecting the character // display mode. func (editor *Editor) SetCharMode() { modes := editor.screen.ListCharModes() menu := terminal.NewMenu(editor.screen) idx := menu.Choose(modes) if idx >= 0 { editor.screen.SetCharMode(idx) } }
// SelectFile offers a menu to select from open files. func (editor *Editor) SelectFile() { names := []string{} for _, file := range editor.files { names = append(names, file.Name) } menu := terminal.NewMenu(editor.screen) idx := menu.Choose(names) if idx >= 0 { editor.SwitchFile(idx) } }
// PasteFromMenu allows the user to select from the paste history. func (editor *Editor) PasteFromMenu() { menu := terminal.NewMenu(editor.screen) items := []string{} for _, buffer := range editor.copyHist { str := strings.Join(buffer, " || ") items = append(items, str) } idx := menu.Choose(items) if idx < 0 || idx >= len(editor.copyHist) { return } editor.file.Paste(editor.copyHist[idx]) }
// OpenNewFile offers a file selection menu to choose a new file to open. func (editor *Editor) OpenNewFile() { dir, _ := os.Getwd() dir += "/" names := []string{} idx := 0 files := []os.FileInfo{} for { files, _ = ioutil.ReadDir(dir) dotdot, err := os.Stat("../") if err == nil { files = append([]os.FileInfo{dotdot}, files...) } names = []string{} for _, file := range files { if file.IsDir() { names = append(names, file.Name()+"/") } else { names = append(names, file.Name()) } } menu := terminal.NewMenu(editor.screen) idx = menu.Choose(names) editor.Flush() if idx < 0 { return } chosenFile := files[idx] if chosenFile.IsDir() { dir = filepath.Clean(dir+chosenFile.Name()) + "/" } else { break } } cwd, _ := os.Getwd() chosenFile, _ := filepath.Rel(cwd, dir+names[idx]) editor.OpenFile(chosenFile) editor.fileIdxPrv = editor.fileIdx editor.fileIdx = len(editor.files) - 1 editor.file = editor.files[editor.fileIdx] }