mirror of
https://github.com/makew0rld/amfora.git
synced 2024-12-04 14:46:29 -05:00
f10337e429
Co-authored-by: makeworld <25111343+makeworld-the-better-one@users.noreply.github.com>
135 lines
4.2 KiB
Go
135 lines
4.2 KiB
Go
package display
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/gdamore/tcell"
|
|
"github.com/makeworld-the-better-one/amfora/config"
|
|
"gitlab.com/tslocum/cview"
|
|
)
|
|
|
|
var helpCells = strings.TrimSpace(`
|
|
?|Bring up this help. You can scroll!
|
|
Esc|Leave the help
|
|
Arrow keys, h/j/k/l|Scroll and move a page.
|
|
%s|Go up a page in document
|
|
%s|Go down a page in document
|
|
g|Go to top of document
|
|
G|Go to bottom of document
|
|
Tab|Navigate to the next item in a popup.
|
|
Shift-Tab|Navigate to the previous item in a popup.
|
|
%s|Go back in the history
|
|
%s|Go forward in the history
|
|
%s|Open bar at the bottom - type a URL, link number, search term.
|
|
|You can also type two dots (..) to go up a directory in the URL.
|
|
|Typing new:N will open link number N in a new tab
|
|
|instead of the current one.
|
|
%s|Go to links 1-10 respectively.
|
|
%s|Edit current URL
|
|
Enter, Tab|On a page this will start link highlighting.
|
|
|Press Tab and Shift-Tab to pick different links.
|
|
|Press Enter again to go to one, or Esc to stop.
|
|
%s|Go to a specific tab. (Default: Shift-NUMBER)
|
|
%s|Go to the last tab.
|
|
%s|Previous tab
|
|
%s|Next tab
|
|
%s|Go home
|
|
%s|New tab, or if a link is selected,
|
|
|this will open the link in a new tab.
|
|
%s|Close tab. For now, only the right-most tab can be closed.
|
|
%s|Reload a page, discarding the cached version.
|
|
|This can also be used if you resize your terminal.
|
|
%s|View bookmarks
|
|
%s|Add, change, or remove a bookmark for the current page.
|
|
%s|Save the current page to your downloads.
|
|
%s|View subscriptions
|
|
%s|Add or update a subscription
|
|
%s|Quit
|
|
`)
|
|
|
|
var helpTable = cview.NewTable().
|
|
SetSelectable(false, false).
|
|
SetBorders(false).
|
|
SetScrollBarVisibility(cview.ScrollBarNever)
|
|
|
|
// Help displays the help and keybindings.
|
|
func Help() {
|
|
helpTable.ScrollToBeginning()
|
|
tabPages.SwitchToPage("help")
|
|
App.SetFocus(helpTable)
|
|
App.Draw()
|
|
}
|
|
|
|
func helpInit() {
|
|
// Populate help table
|
|
helpTable.SetDoneFunc(func(key tcell.Key) {
|
|
if key == tcell.KeyEsc || key == tcell.KeyEnter {
|
|
tabPages.SwitchToPage(strconv.Itoa(curTab))
|
|
App.SetFocus(tabs[curTab].view)
|
|
App.Draw()
|
|
}
|
|
})
|
|
|
|
tabKeys := fmt.Sprintf("%s to %s", strings.Split(config.GetKeyBinding(config.CmdTab1), ",")[0],
|
|
strings.Split(config.GetKeyBinding(config.CmdTab9), ",")[0])
|
|
linkKeys := fmt.Sprintf("%s to %s", strings.Split(config.GetKeyBinding(config.CmdLink1), ",")[0],
|
|
strings.Split(config.GetKeyBinding(config.CmdLink0), ",")[0])
|
|
|
|
helpCells = fmt.Sprintf(helpCells,
|
|
config.GetKeyBinding(config.CmdPgup),
|
|
config.GetKeyBinding(config.CmdPgdn),
|
|
config.GetKeyBinding(config.CmdBack),
|
|
config.GetKeyBinding(config.CmdForward),
|
|
config.GetKeyBinding(config.CmdBottom),
|
|
linkKeys,
|
|
config.GetKeyBinding(config.CmdEdit),
|
|
tabKeys,
|
|
config.GetKeyBinding(config.CmdTab0),
|
|
config.GetKeyBinding(config.CmdPrevTab),
|
|
config.GetKeyBinding(config.CmdNextTab),
|
|
config.GetKeyBinding(config.CmdHome),
|
|
config.GetKeyBinding(config.CmdNewTab),
|
|
config.GetKeyBinding(config.CmdCloseTab),
|
|
config.GetKeyBinding(config.CmdReload),
|
|
config.GetKeyBinding(config.CmdBookmarks),
|
|
config.GetKeyBinding(config.CmdAddBookmark),
|
|
config.GetKeyBinding(config.CmdSave),
|
|
config.GetKeyBinding(config.CmdSub),
|
|
config.GetKeyBinding(config.CmdAddSub),
|
|
config.GetKeyBinding(config.CmdQuit),
|
|
)
|
|
|
|
rows := strings.Count(helpCells, "\n") + 1
|
|
cells := strings.Split(
|
|
strings.ReplaceAll(helpCells, "\n", "|"),
|
|
"|")
|
|
cell := 0
|
|
extraRows := 0 // Rows continued from the previous, without spacing
|
|
for r := 0; r < rows; r++ {
|
|
for c := 0; c < 2; c++ {
|
|
var tableCell *cview.TableCell
|
|
if c == 0 {
|
|
// First column, the keybinding
|
|
tableCell = cview.NewTableCell(" " + cells[cell]).
|
|
SetAttributes(tcell.AttrBold).
|
|
SetAlign(cview.AlignLeft)
|
|
} else {
|
|
tableCell = cview.NewTableCell(" " + cells[cell])
|
|
}
|
|
if c == 0 && cells[cell] == "" || (cell > 0 && cells[cell-1] == "" && c == 1) {
|
|
// The keybinding column for this row was blank, meaning the explanation
|
|
// column is continued from the previous row.
|
|
// The row should be added without any spacing rows
|
|
helpTable.SetCell(((2*r)-extraRows/2)-1, c, tableCell)
|
|
extraRows++
|
|
} else {
|
|
helpTable.SetCell((2*r)-extraRows/2, c, tableCell) // Every other row, for readability
|
|
}
|
|
cell++
|
|
}
|
|
}
|
|
tabPages.AddPage("help", helpTable, true, false)
|
|
}
|