Improve help text and move to its own file

This commit is contained in:
Zachary Yedidia 2016-04-24 08:31:42 -04:00
parent d088b7c2df
commit 1f62ff9d80
4 changed files with 232 additions and 202 deletions

View file

@ -1,117 +1,13 @@
package main
import (
"github.com/gdamore/tcell"
"strings"
)
var helpTxt string
const helpTxt = `Press Ctrl-g to close help
Micro keybindings:
Ctrl-q: Quit
Ctrl-s: Save
Ctrl-o: Open file
Ctrl-z: Undo
Ctrl-y: Redo
Ctrl-f: Find
Ctrl-n: Find next
Ctrl-p: Find previous
Ctrl-a: Select all
Ctrl-c: Copy
Ctrl-x: Cut
Ctrl-v: Paste
Ctrl-g: Open this help screen
Ctrl-u: Half page up
Ctrl-d: Half page down
PageUp: Page up
PageDown: Page down
Home: Go to beginning
End: Go to end
Ctrl-e: Execute a command
Possible commands:
'quit': Quits micro
'save': saves the current buffer
'replace "search" "value"': This will replace 'search' with 'value'.
Note that 'search' must be a valid regex. If one of the arguments
does not have any spaces in it, you may omit the quotes.
'set option value': sets the option to value. Please see the next section for a list of options you can set
Micro options:
Configuration directory:
Micro uses the $XDG_CONFIG_HOME/micro as the configuration directory. As per the XDG spec,
if $XDG_CONFIG_HOME is not set, ~/.config/micro is used as the config directory.
colorscheme: loads the colorscheme stored in $(configDir)/colorschemes/'option'.micro
default value: 'default'
Note that the default colorschemes (default, solarized, and solarized-tc) are not located in configDir,
because they are embedded in the micro binary
tabsize: sets the tab size to 'option'
default value: '4'
syntax: turns syntax on or off
default value: 'on'
tabsToSpaces: use spaces instead of tabs
default value: 'off'
`
// DisplayHelp displays the help txt
// It blocks the main loop
func DisplayHelp() {
topline := 0
_, height := screen.Size()
screen.HideCursor()
totalLines := strings.Split(helpTxt, "\n")
for {
screen.Clear()
lineEnd := topline + height
if lineEnd > len(totalLines) {
lineEnd = len(totalLines)
}
lines := totalLines[topline:lineEnd]
for y, line := range lines {
for x, ch := range line {
st := defStyle
screen.SetContent(x, y, ch, nil, st)
}
}
screen.Show()
event := screen.PollEvent()
switch e := event.(type) {
case *tcell.EventResize:
_, height = e.Size()
case *tcell.EventKey:
switch e.Key() {
case tcell.KeyUp:
if topline > 0 {
topline--
}
case tcell.KeyDown:
if topline < len(totalLines)-height {
topline++
}
case tcell.KeyCtrlQ, tcell.KeyCtrlW, tcell.KeyEscape, tcell.KeyCtrlC:
// LoadHelp loads the help text from inside the binary
func LoadHelp() {
data, err := Asset("runtime/help/help.md")
if err != nil {
TermMessage("Unable to load help text")
return
}
}
}
helpTxt = string(data)
}

View file

@ -185,6 +185,8 @@ func main() {
InitBindings()
// Load the syntax files, including the colorscheme
LoadSyntaxFiles()
// Load the help files
LoadHelp()
buf := NewBuffer(string(input), filename)
@ -242,7 +244,7 @@ func main() {
}
case tcell.KeyCtrlG:
if !helpOpen {
helpBuffer := NewBuffer(helpTxt, "")
helpBuffer := NewBuffer(helpTxt, "help.md")
helpBuffer.name = "Help"
helpOpen = true
view.OpenBuffer(helpBuffer)

File diff suppressed because one or more lines are too long

107
runtime/help/help.md Normal file
View file

@ -0,0 +1,107 @@
# Micro help text
### Keybindings
These are the default keybindings, along with their actions.
#### Editor bindings
* Ctrl-q: Quit
* Ctrl-e: Execute a command
* Ctrl-g: Toggle help text
* Ctrl-b: Run a shell command
#### Buffer bindings
* Ctrl-s: Save
* Ctrl-o: Open file
* Ctrl-z: Undo
* Ctrl-y: Redo
* Ctrl-f: Find
* Ctrl-n: Find next
* Ctrl-p: Find previous
* Ctrl-a: Select all
* Ctrl-c: Copy
* Ctrl-x: Cut
* Ctrl-k: Cut line
* Ctrl-v: Paste
* Ctrl-u: Half page up
* Ctrl-d: Half page down
* PageUp: Page up
* PageDown: Page down
* Home: Go to beginning of file
* End: Go to end of file
* Ctrl-r: Toggle line numbers
The buffer bindings may be rebound using the `~/.config/micro/bindings.json` file. Each key is bound to an action.
For example, to bind `Ctrl-y` to undo and `Ctrl-z` to redo, you could put the following in the `bindings.json` file.
```json
{
"CtrlY": "Undo",
"CtrlZ": "Redo"
}
```
### Possible commands
You can execute an editor command by pressing `Ctrl-e` followed by the command.
Here are the possible commands that you can use.
* `quit`: Quits micro.
* `save`: Saves the current buffer.
`replace "search" "value"`: This will replace `search` with `value`.
Note that `search` must be a valid regex. If one of the arguments
does not have any spaces in it, you may omit the quotes.
`set option value`: sets the option to value. Please see the next section for a list of options you can set.
`run sh-command`: runs the given shell command in the background. The command's output will be displayed
in one line when it finishes running.
### Options
Micro stores all of the user configuration in its configuration directory.
Micro uses the `$XDG_CONFIG_HOME/micro` as the configuration directory. As per the XDG spec,
if `$XDG_CONFIG_HOME` is not set, `~/.config/micro` is used as the config directory.
Here are the options that you can set:
`colorscheme`: loads the colorscheme stored in $(configDir)/colorschemes/`option`.micro
default value: `default`
Note that the default colorschemes (default, solarized, and solarized-tc) are not located in configDir,
because they are embedded in the micro binary
`tabsize`: sets the tab size to `option`
default value: `4`
`syntax`: turns syntax on or off
default value: `on`
`tabsToSpaces`: use spaces instead of tabs
default value: `off`
`autoindent`: when creating a new line use the same indentation as the previous line
default value: `on`
`ruler`: display line numbers
default value: `on`
`gofmt`: Run `gofmt` whenever the file is saved (this only applies to `.go` files)
default value: `off`
`goimports`: run `goimports` whenever the file is saved (this only applies to `.go` files)
default value: `off`
In the future, the `gofmt` and `goimports` will be refactored using a plugin system. However,
currently they just make it easier to program micro in micro.