Documentation
¶
Overview ¶
Package editor is a text editor widget for Go terminal applications.
It provides the parts an editor is made of — a line-array Buffer, locating Cursors, syntax-highlighted cells, an undo history, key bindings and an autocomplete popup — behind a View that renders itself onto a Screen and consumes tcell events. The editing core descends from the femto/micro line of Go text editors; the README carries the full attribution.
Hosting a View ¶
A View is not tied to a toolkit. It draws onto the Screen interface, a five-method subset of tcell.Screen that a tcell screen satisfies as it is, and it takes tcell events:
view := editor.NewView(editor.NewBufferFromString(src, "main.go"))
view.SetRuntimeFiles(runtime.Files) // syntax highlighting, colorschemes
view.SetRect(1, 1, width-2, height-2)
view.Draw(screen)
for event := range screen.EventQ() {
switch event.(type) {
case *tcell.EventKey, *tcell.EventMouse:
view.HandleEvent(event)
case *tcell.EventResize:
screen.Sync()
view.SetRect(1, 1, newWidth-2, newHeight-2)
}
view.Draw(screen)
screen.Show()
}
Everything the host has to decide is where the view goes (SetRect), when it is drawn (Draw) and whether it holds the focus (Focus, Blur, SetFocus). The demo directory contains a complete host built exactly this way.
Buffers, cursors and views ¶
Buffer stores the text — as a line array — together with the file's path, its local settings and its syntax highlighter. NewBufferFromString creates one from a string, NewBuffer from a reader plus an optional cursor position to restore.
Cursor holds a Loc, a rune-based {X, Y} position, its visual X offset and an optional selection. The editor keeps a list of them alive at once, which is how multiple cursors work: every cursor in the list replays an action and gets its own selection highlighted.
View owns the viewport around a buffer: Topline and the horizontal scroll offset, the colorscheme, the key bindings, the runtime files used for highlighting, and the autocomplete popup. OpenBuffer swaps the buffer under a view, ResetSelection and Relocate keep the cursor in sight.
Sorting out coordinates ¶
Loc is a rune position, not a byte offset: Loc{X: 2, Y: 1} is the third rune of the second line, and ASCII, combining marks and emoji all count as one. Visual columns — what a tab or a wide character occupies on screen — are separate; GetVisualX, StringWidth and CellView are how the editor converts between the two.
Highlighting and colorschemes ¶
The highlight subpackage implements micro-compatible syntax grammars: YAML files with a file-type header and a rule per syntax group. The runtime subpackage embeds a collection of those grammars along with the colorschemes that style them, and a view picks up both through SetRuntimeFiles. The grammar is chosen from the buffer's path, or from the buffer's "filetype" setting when there is no path to go by.
A Colorscheme maps a syntax group name to a tcell.Style, and ParseColorscheme reads micro's "color-link" statements, so existing schemes work unchanged.
Autocomplete ¶
Completion is a two-step affair. An AutocompleteProvider turns the editing context — the word under the cursor, the buffer, the view — into CompletionItems, and the view renders them, either in a popup or as inline ghost text when CompletionItem.InlineText is set. DefaultAutocompleteProvider suggests words already present in the buffer; SetAutocompleteProvider replaces it and TriggerAutocomplete opens the popup programmatically.
Settings ¶
Every buffer carries its own map of settings with the defaults from DefaultLocalSettings: tabsize, tabstospaces, softwrap, cursorline, ruler, showwhitespace, colorcolumn, scrollbar, scrollmargin, autoindent, smartpaste, syntax, filetype and friends. They are read and written through the map (buf.Settings["ruler"] = false), and a missing or wrongly typed value is treated as unset rather than fatal.
Events, keys and the mouse ¶
HandleEvent is the single entry point: it routes key events to the input capture, then to the autocomplete popup, then to the key bindings, and it classifies mouse events into MouseActions before handing them to the same editing code. Hosts that already know which action a mouse event means can call HandleMouseAction directly, and hosts that need to see keys first install a function with SetInputCapture.
Key bindings map KeyDescs — a key code, optional modifiers and an optional rune — to a list of actions, which are plain methods on View. NewKeyBindings parses the familiar "Ctrl-S" style strings to build a custom set for SetKeybindings.
Undo, search and the clipboard ¶
Edits go through an EventHandler that records them as text deltas, so Undo and Redo are exact. A single Undo keeps unwinding edits that were recorded within 500ms of each other, so a burst of typing is undone in one step, and the history is trimmed to the "maxundohistory" setting (10 000 by default). Search and ReplaceAll work on either literal text or regular expressions, with optional case sensitivity, through Buffer.FindNext.
Copy, cut and paste use github.com/atotto/clipboard, and fall back to an in-process clipboard when the platform has none (or when there is no X11 or Wayland session to talk to).
Thread safety ¶
A View and its Buffer belong to the goroutine that owns the event loop; they are not safe for concurrent use. Rendering is no exception — Draw and HandleEvent should both run on that goroutine, which is also where the screen should be flushed.
Index ¶
- Constants
- Variables
- func Abs(n int) int
- func ByteOffset(pos Loc, buf *Buffer) int
- func CommonSubstring(arr ...string) string
- func Contains(list []string, a string) bool
- func Count(s string) int
- func DefaultLocalSettings() map[string]interface{}
- func Diff(a, b Loc, buf *Buffer) int
- func EscapePath(path string) string
- func ExecuteTextEvent(t *TextEvent, buf *Buffer)
- func FSize(f *os.File) int64
- func FuncName(i interface{}) string
- func GetColor(color string) tcell.Style
- func GetColor256(c int) tcell.Color
- func GetLeadingWhitespace(str string) string
- func GetModTime(path string) (time.Time, bool)
- func GetPathAndCursorPosition(path string) (string, []string)
- func InBounds(pos Loc, buf *Buffer) bool
- func Insert(str string, pos int, value string) string
- func IsSpaces(str []byte) bool
- func IsSpacesOrTabs(str string) bool
- func IsStrWhitespace(str string) bool
- func IsWhitespace(c rune) bool
- func IsWordChar(str string) bool
- func MakeRelative(path, base string) (string, error)
- func Max(a, b int) int
- func Min(a, b int) int
- func NumOccurrences(s string, c byte) int
- func ParseBool(str string) (bool, error)
- func SetDefaultColorscheme(scheme Colorscheme)
- func ShortFuncName(i interface{}) string
- func Spaces(n int) string
- func StringToColor(str string) tcell.Color
- func StringToStyle(str string, defaultStyle tcell.Style) tcell.Style
- func StringWidth(str string, tabsize int) int
- func ToCharPos(start Loc, buf *Buffer) int
- func UndoTextEvent(t *TextEvent, buf *Buffer)
- func WidthOfLargeRunes(str string, tabsize int) int
- type AutocompleteProvider
- type Buffer
- func (b *Buffer) ClearMatches()
- func (b *Buffer) End() Loc
- func (b *Buffer) FileType() string
- func (b *Buffer) FindMatchingBrace(braceType [2]rune, start Loc) Loc
- func (b *Buffer) FindNext(s string, start, end, from Loc, down bool, useRegex bool, caseSensitive bool) ([2]Loc, bool, error)
- func (b *Buffer) GetName() string
- func (b *Buffer) IndentString() string
- func (b *Buffer) Len() (n int)
- func (b *Buffer) Line(n int) string
- func (b *Buffer) LineBytes(n int) []byte
- func (b *Buffer) LineRunes(n int) []rune
- func (b *Buffer) Lines(start, end int) []string
- func (b *Buffer) LinesNum() int
- func (b *Buffer) MarkDirty(lineN int)
- func (b *Buffer) MergeCursors()
- func (b *Buffer) Modified() bool
- func (b *Buffer) MoveLinesDown(start int, end int)
- func (b *Buffer) MoveLinesUp(start int, end int)
- func (b *Buffer) ReplaceRegex(start, end Loc, search *regexp.Regexp, replace []byte, captureGroups bool) (int, int)
- func (b *Buffer) RuneAt(loc Loc) rune
- func (b *Buffer) Start() Loc
- func (b *Buffer) UpdateCursors()
- type CellView
- type Char
- type Colorscheme
- type CompletionContext
- type CompletionItem
- type Cursor
- func (c *Cursor) AddLineToSelection()
- func (c *Cursor) AddWordToSelection()
- func (c *Cursor) CopySelection(target string)
- func (c *Cursor) DeleteSelection()
- func (c *Cursor) Down()
- func (c *Cursor) DownN(amount int)
- func (c *Cursor) End()
- func (c *Cursor) GetCharPosInLine(lineNum, visualPos int) int
- func (c *Cursor) GetSelection() string
- func (c *Cursor) GetVisualX() int
- func (c *Cursor) Goto(b Cursor)
- func (c *Cursor) GotoLoc(l Loc)
- func (c *Cursor) HasSelection() bool
- func (c *Cursor) Left()
- func (c *Cursor) MoveTo(loc Loc)
- func (c *Cursor) Relocate()
- func (c *Cursor) ResetSelection()
- func (c *Cursor) Right()
- func (c *Cursor) RuneUnder(x int) rune
- func (c *Cursor) SelectLine()
- func (c *Cursor) SelectTo(loc Loc)
- func (c *Cursor) SelectWord()
- func (c *Cursor) SetSelectionEnd(pos Loc)
- func (c *Cursor) SetSelectionStart(pos Loc)
- func (c *Cursor) Start()
- func (c *Cursor) StartOfText()
- func (c *Cursor) StoreVisualX()
- func (c *Cursor) Up()
- func (c *Cursor) UpN(amount int)
- func (c *Cursor) WordLeft()
- func (c *Cursor) WordRight()
- type Delta
- type Element
- type EventHandler
- func (eh *EventHandler) ApplyDiff(new string)
- func (eh *EventHandler) Execute(t *TextEvent)
- func (eh *EventHandler) Insert(start Loc, textStr string)
- func (eh *EventHandler) MultipleReplace(deltas []Delta)
- func (eh *EventHandler) Redo()
- func (eh *EventHandler) RedoOneEvent()
- func (eh *EventHandler) Remove(start, end Loc)
- func (eh *EventHandler) Replace(start, end Loc, replace string)
- func (eh *EventHandler) Undo()
- func (eh *EventHandler) UndoOneEvent()
- type KeyBindings
- type KeyDesc
- type Line
- type LineArray
- func (la *LineArray) Bytes(useCrlf bool) []byte
- func (la *LineArray) DeleteByte(pos Loc)
- func (la *LineArray) DeleteFromStart(pos Loc)
- func (la *LineArray) DeleteLine(y int)
- func (la *LineArray) DeleteToEnd(pos Loc)
- func (la *LineArray) JoinLines(a, b int)
- func (la *LineArray) Match(lineN int) highlight.LineMatch
- func (la *LineArray) NewlineBelow(y int)
- func (la *LineArray) SaveString(useCrlf bool) string
- func (la *LineArray) SetMatch(lineN int, m highlight.LineMatch)
- func (la *LineArray) SetState(lineN int, s highlight.State)
- func (la *LineArray) Split(pos Loc)
- func (la *LineArray) State(lineN int) highlight.State
- func (la *LineArray) String() string
- func (la *LineArray) Substr(start, end Loc) []byte
- type Loc
- type MouseAction
- type RuntimeFile
- type RuntimeFiles
- func (rfs *RuntimeFiles) AddFile(fileType string, file RuntimeFile)
- func (rfs *RuntimeFiles) AddFilesFromDirectory(fs http.FileSystem, fileType, directory, pattern string)
- func (rfs RuntimeFiles) FindFile(fileType, name string) RuntimeFile
- func (rfs RuntimeFiles) ListRuntimeFiles(fileType string) []RuntimeFile
- type Screen
- type ScrollBar
- type Stack
- type TextEvent
- type View
- func (v *View) Backspace() bool
- func (v *View) Blur()
- func (v *View) Bottomline() int
- func (v *View) Center() bool
- func (v *View) Copy() bool
- func (v *View) CursorDown() bool
- func (v *View) CursorEnd() bool
- func (v *View) CursorLeft() bool
- func (v *View) CursorPageDown() bool
- func (v *View) CursorPageUp() bool
- func (v *View) CursorRight() bool
- func (v *View) CursorStart() bool
- func (v *View) CursorUp() bool
- func (v *View) Cut() bool
- func (v *View) CutLine() bool
- func (v *View) Delete() bool
- func (v *View) DeleteLine() bool
- func (v *View) DeleteWordLeft() bool
- func (v *View) DeleteWordRight() bool
- func (v *View) Draw(screen Screen)
- func (v *View) DuplicateLine() bool
- func (v *View) End() bool
- func (v *View) EndOfLine() bool
- func (v *View) Escape() bool
- func (v *View) ExecuteActions(actions []func(*View) bool) bool
- func (v *View) Focus()
- func (v *View) GetInputCapture() func(event *tcell.EventKey) *tcell.EventKey
- func (v *View) GetKeybindings() KeyBindings
- func (v *View) HalfPageDown() bool
- func (v *View) HalfPageUp() bool
- func (v *View) HandleEvent(event tcell.Event) bool
- func (v *View) HandleMouse(event *tcell.EventMouse) bool
- func (v *View) HandleMouseAction(action MouseAction, event *tcell.EventMouse) bool
- func (v *View) HasFocus() bool
- func (v *View) IndentSelection() bool
- func (v *View) InsertNewline() bool
- func (v *View) InsertSpace() bool
- func (v *View) InsertTab() bool
- func (v *View) IsOverwriteMode() bool
- func (v *View) JumpToMatchingBrace() bool
- func (v *View) MouseLeftDown(e *tcell.EventMouse)
- func (v *View) MouseLeftUp(e *tcell.EventMouse)
- func (v *View) MouseMove(e *tcell.EventMouse)
- func (v *View) MoveLinesDown() bool
- func (v *View) MoveLinesUp() bool
- func (v *View) OpenBuffer(buf *Buffer)
- func (v *View) OutdentLine() bool
- func (v *View) OutdentSelection() bool
- func (v *View) PageDown() bool
- func (v *View) PageUp() bool
- func (v *View) ParagraphNext() bool
- func (v *View) ParagraphPrevious() bool
- func (v *View) Paste() bool
- func (v *View) Rect() (x, y, width, height int)
- func (v *View) Redo() bool
- func (v *View) Relocate() bool
- func (v *View) RemoveAllMultiCursors() bool
- func (v *View) RemoveMultiCursor() bool
- func (v *View) ReplaceAll(str string, useRegex bool, caseSensitive bool, replaceText string) (int, error)
- func (v *View) Retab() bool
- func (v *View) ScrollDown(n int)
- func (v *View) ScrollDownAction() bool
- func (v *View) ScrollUp(n int)
- func (v *View) ScrollUpAction() bool
- func (v *View) Search(str string, useRegex bool, caseSensitive bool, searchDown bool) (bool, error)
- func (v *View) SelectAll() bool
- func (v *View) SelectDown() bool
- func (v *View) SelectLeft() bool
- func (v *View) SelectLine() bool
- func (v *View) SelectPageDown() bool
- func (v *View) SelectPageUp() bool
- func (v *View) SelectRight() bool
- func (v *View) SelectToEnd() bool
- func (v *View) SelectToEndOfLine() bool
- func (v *View) SelectToStart() bool
- func (v *View) SelectToStartOfLine() bool
- func (v *View) SelectUp() bool
- func (v *View) SelectWordLeft() bool
- func (v *View) SelectWordRight() bool
- func (v *View) SetAutocompleteProvider(provider AutocompleteProvider)
- func (v *View) SetColorscheme(colorscheme Colorscheme)
- func (v *View) SetCursor(c *Cursor) bool
- func (v *View) SetFocus(focus bool)
- func (v *View) SetInputCapture(capture func(event *tcell.EventKey) *tcell.EventKey) *View
- func (v *View) SetKeybindings(bindings KeyBindings)
- func (v *View) SetRect(x, y, width, height int)
- func (v *View) SetRuntimeFiles(runtimeFiles *RuntimeFiles)
- func (v *View) SkipMultiCursor() bool
- func (v *View) SpawnMultiCursor() bool
- func (v *View) SpawnMultiCursorSelect() bool
- func (v *View) Start() bool
- func (v *View) StartOfLine() bool
- func (v *View) ToggleOverwriteMode() bool
- func (v *View) ToggleRuler() bool
- func (v *View) TriggerAutocomplete() bool
- func (v *View) Undo() bool
- func (v *View) WordLeft() bool
- func (v *View) WordRight() bool
Constants ¶
const ( ActionCursorUp = "CursorUp" ActionCursorDown = "CursorDown" ActionCursorPageUp = "CursorPageUp" ActionCursorPageDown = "CursorPageDown" ActionCursorLeft = "CursorLeft" ActionCursorRight = "CursorRight" ActionCursorStart = "CursorStart" ActionCursorEnd = "CursorEnd" ActionSelectToStart = "SelectToStart" ActionSelectToEnd = "SelectToEnd" ActionSelectUp = "SelectUp" ActionSelectDown = "SelectDown" ActionSelectLeft = "SelectLeft" ActionSelectRight = "SelectRight" ActionWordRight = "WordRight" ActionWordLeft = "WordLeft" ActionSelectWordRight = "SelectWordRight" ActionSelectWordLeft = "SelectWordLeft" ActionDeleteWordRight = "DeleteWordRight" ActionDeleteWordLeft = "DeleteWordLeft" ActionSelectLine = "SelectLine" ActionSelectToStartOfLine = "SelectToStartOfLine" ActionSelectToEndOfLine = "SelectToEndOfLine" ActionParagraphPrevious = "ParagraphPrevious" ActionParagraphNext = "ParagraphNext" ActionInsertNewline = "InsertNewline" ActionInsertSpace = "InsertSpace" ActionBackspace = "Backspace" ActionDelete = "Delete" ActionInsertTab = "InsertTab" ActionCenter = "Center" ActionUndo = "Undo" ActionRedo = "Redo" ActionCopy = "Copy" ActionCut = "Cut" ActionCutLine = "CutLine" ActionDuplicateLine = "DuplicateLine" ActionDeleteLine = "DeleteLine" ActionMoveLinesUp = "MoveLinesUp" ActionMoveLinesDown = "MoveLinesDown" ActionIndentSelection = "IndentSelection" ActionOutdentSelection = "OutdentSelection" ActionOutdentLine = "OutdentLine" ActionPaste = "Paste" ActionSelectAll = "SelectAll" ActionStart = "Start" ActionEnd = "End" ActionPageUp = "PageUp" ActionPageDown = "PageDown" ActionSelectPageUp = "SelectPageUp" ActionSelectPageDown = "SelectPageDown" ActionHalfPageUp = "HalfPageUp" ActionHalfPageDown = "HalfPageDown" ActionStartOfLine = "StartOfLine" ActionEndOfLine = "EndOfLine" ActionToggleRuler = "ToggleRuler" ActionToggleOverwriteMode = "ToggleOverwriteMode" ActionEscape = "Escape" ActionScrollUp = "ScrollUp" ActionScrollDown = "ScrollDown" ActionSpawnMultiCursor = "SpawnMultiCursor" ActionSpawnMultiCursorSelect = "SpawnMultiCursorSelect" ActionRemoveMultiCursor = "RemoveMultiCursor" ActionRemoveAllMultiCursors = "RemoveAllMultiCursors" ActionSkipMultiCursor = "SkipMultiCursor" ActionJumpToMatchingBrace = "JumpToMatchingBrace" ActionInsertEnter = "InsertEnter" ActionUnbindKey = "UnbindKey" )
Actions
const ( // TextEventInsert represents an insertion event TextEventInsert = 1 // TextEventRemove represents a deletion event TextEventRemove = -1 // TextEventReplace represents a replace event TextEventReplace = 0 )
const ( RTColorscheme = "colorscheme" RTSyntax = "syntax" )
const ( MOUSE_BUTTON_MODE_SINGLE = iota MOUSE_BUTTON_MODE_DOUBLE MOUSE_BUTTON_MODE_TRIPLE )
const DOUBLE_CLICK_INTERVAL = 500 * time.Millisecond
const LargeFileThreshold = 50000
Variables ¶
var BindingActionsMapping = map[string]func(*View) bool{ ActionCursorUp: (*View).CursorUp, ActionCursorDown: (*View).CursorDown, ActionCursorPageUp: (*View).CursorPageUp, ActionCursorPageDown: (*View).CursorPageDown, ActionCursorLeft: (*View).CursorLeft, ActionCursorRight: (*View).CursorRight, ActionCursorStart: (*View).CursorStart, ActionCursorEnd: (*View).CursorEnd, ActionSelectToStart: (*View).SelectToStart, ActionSelectToEnd: (*View).SelectToEnd, ActionSelectUp: (*View).SelectUp, ActionSelectDown: (*View).SelectDown, ActionSelectLeft: (*View).SelectLeft, ActionSelectRight: (*View).SelectRight, ActionWordRight: (*View).WordRight, ActionWordLeft: (*View).WordLeft, ActionSelectWordRight: (*View).SelectWordRight, ActionSelectWordLeft: (*View).SelectWordLeft, ActionDeleteWordRight: (*View).DeleteWordRight, ActionDeleteWordLeft: (*View).DeleteWordLeft, ActionSelectLine: (*View).SelectLine, ActionSelectToStartOfLine: (*View).SelectToStartOfLine, ActionSelectToEndOfLine: (*View).SelectToEndOfLine, ActionParagraphPrevious: (*View).ParagraphPrevious, ActionParagraphNext: (*View).ParagraphNext, ActionInsertNewline: (*View).InsertNewline, ActionInsertSpace: (*View).InsertSpace, ActionBackspace: (*View).Backspace, ActionDelete: (*View).Delete, ActionInsertTab: (*View).InsertTab, ActionCenter: (*View).Center, ActionUndo: (*View).Undo, ActionRedo: (*View).Redo, ActionCopy: (*View).Copy, ActionCut: (*View).Cut, ActionCutLine: (*View).CutLine, ActionDuplicateLine: (*View).DuplicateLine, ActionDeleteLine: (*View).DeleteLine, ActionMoveLinesUp: (*View).MoveLinesUp, ActionMoveLinesDown: (*View).MoveLinesDown, ActionIndentSelection: (*View).IndentSelection, ActionOutdentSelection: (*View).OutdentSelection, ActionOutdentLine: (*View).OutdentLine, ActionPaste: (*View).Paste, ActionSelectAll: (*View).SelectAll, ActionStart: (*View).Start, ActionEnd: (*View).End, ActionPageUp: (*View).PageUp, ActionPageDown: (*View).PageDown, ActionSelectPageUp: (*View).SelectPageUp, ActionSelectPageDown: (*View).SelectPageDown, ActionHalfPageUp: (*View).HalfPageUp, ActionHalfPageDown: (*View).HalfPageDown, ActionStartOfLine: (*View).StartOfLine, ActionEndOfLine: (*View).EndOfLine, ActionToggleRuler: (*View).ToggleRuler, ActionToggleOverwriteMode: (*View).ToggleOverwriteMode, ActionEscape: (*View).Escape, ActionScrollUp: (*View).ScrollUpAction, ActionScrollDown: (*View).ScrollDownAction, ActionSpawnMultiCursor: (*View).SpawnMultiCursor, ActionSpawnMultiCursorSelect: (*View).SpawnMultiCursorSelect, ActionRemoveMultiCursor: (*View).RemoveMultiCursor, ActionRemoveAllMultiCursors: (*View).RemoveAllMultiCursors, ActionSkipMultiCursor: (*View).SkipMultiCursor, ActionJumpToMatchingBrace: (*View).JumpToMatchingBrace, ActionInsertEnter: (*View).InsertNewline, }
var BindingKeysToTcellMapping = map[string]tcell.Key{}/* 120 elements not displayed */
Functions ¶
func ByteOffset ¶
ByteOffset is just like ToCharPos except it counts bytes instead of runes
func CommonSubstring ¶
CommonSubstring gets a common substring among the inputs
func Count ¶
Count returns the length of a string in runes This is exactly equivalent to utf8.RuneCountInString(), just less characters
func DefaultLocalSettings ¶
func DefaultLocalSettings() map[string]interface{}
DefaultLocalSettings returns the default local settings Note that filetype is a local only option
func EscapePath ¶
EscapePath replaces every path separator in a given path with a %
func ExecuteTextEvent ¶
ExecuteTextEvent runs a text event
func FuncName ¶
func FuncName(i interface{}) string
FuncName returns the full name of a given function object
func GetColor256 ¶
GetColor256 returns the tcell color for a number between 0 and 255
func GetLeadingWhitespace ¶
GetLeadingWhitespace returns the leading whitespace of the given string
func GetModTime ¶
GetModTime returns the last modification time for a given file It also returns a boolean if there was a problem accessing the file
func GetPathAndCursorPosition ¶
GetPathAndCursorPosition returns a filename without everything following a `:` This is used for opening files like util.go:10:5 to specify a line and column Special cases like Windows Absolute path (C:\myfile.txt:10:5) are handled correctly.
func InBounds ¶
InBounds returns whether the given location is a valid character position in the given buffer
func IsSpacesOrTabs ¶
IsSpacesOrTabs checks if a given string contains only spaces and tabs
func IsStrWhitespace ¶
IsStrWhitespace returns true if the given string is all whitespace
func IsWhitespace ¶
IsWhitespace returns true if the given rune is a space, tab, or newline
func IsWordChar ¶
IsWordChar returns whether the string is a 'word character' If it is a unicode character, then it does not match Word characters are defined as [A-Za-z0-9_]
func MakeRelative ¶
MakeRelative will attempt to make a relative path between path and base
func NumOccurrences ¶
NumOccurrences counts the number of occurrences of a byte in a string
func ParseBool ¶
ParseBool is almost exactly like strconv.ParseBool, except it also accepts 'on' and 'off' as 'true' and 'false' respectively
func SetDefaultColorscheme ¶
func SetDefaultColorscheme(scheme Colorscheme)
SetDefaultColorscheme sets the current default colorscheme for new Views.
func ShortFuncName ¶
func ShortFuncName(i interface{}) string
ShortFuncName returns the name only of a given function object
func StringToColor ¶
StringToColor returns a tcell color from a string representation of a color We accept either bright... or light... to mean the brighter version of a color
func StringToStyle ¶
StringToStyle returns a style from a string The strings must be in the format "extra foregroundcolor,backgroundcolor" The 'extra' can be bold, reverse, or underline
func StringWidth ¶
StringWidth returns the width of a string where tabs count as `tabsize` width
func UndoTextEvent ¶
UndoTextEvent undoes a text event
func WidthOfLargeRunes ¶
WidthOfLargeRunes searches all the runes in a string and counts up all the widths of runes that have a width larger than 1 (this also counts tabs as `tabsize` width)
Types ¶
type AutocompleteProvider ¶
type AutocompleteProvider func(ctx CompletionContext) []CompletionItem
AutocompleteProvider returns completion candidates for the current context.
type Buffer ¶
type Buffer struct {
// The eventhandler for undo/redo
*EventHandler
// This stores all the text in the buffer as an array of lines
*LineArray
// The path to the loaded file, if any
Path string
Cursor Cursor
// Whether the buffer has been modified since it was opened
IsModified bool
// NumLines is the number of lines in the buffer
NumLines int
// Buffer local settings
Settings map[string]interface{}
// contains filtered or unexported fields
}
Buffer stores the text for files that are loaded into the text editor It uses a rope to efficiently store the string and contains some simple functions for saving and wrapper functions for modifying the rope
func NewBufferFromString ¶
NewBufferFromString creates a new buffer containing the given string
func (*Buffer) ClearMatches ¶
func (b *Buffer) ClearMatches()
ClearMatches clears all of the syntax highlighting for this buffer
func (*Buffer) FindMatchingBrace ¶
FindMatchingBrace returns the location in the buffer of the matching bracket It is given a brace type containing the open and closing character, (for example '{' and '}') as well as the location to match from
func (*Buffer) FindNext ¶
func (b *Buffer) FindNext(s string, start, end, from Loc, down bool, useRegex bool, caseSensitive bool) ([2]Loc, bool, error)
FindNext finds the next occurrence of a given string in the buffer It returns the start and end location of the match (if found) and a boolean indicating if it was found May also return an error if the search regex is invalid
func (*Buffer) GetName ¶
GetName returns the name that should be displayed in the statusline for this buffer
func (*Buffer) IndentString ¶
IndentString returns a string representing one level of indentation
func (*Buffer) MergeCursors ¶
func (b *Buffer) MergeCursors()
MergeCursors merges any cursors that are at the same position into one cursor. Uses sort + single-pass scan (O(k log k)) instead of the previous O(k²) nested loop.
func (*Buffer) MoveLinesDown ¶
MoveLinesDown moves the range of lines down one row
func (*Buffer) MoveLinesUp ¶
MoveLinesUp moves the range of lines up one row
func (*Buffer) ReplaceRegex ¶
func (b *Buffer) ReplaceRegex(start, end Loc, search *regexp.Regexp, replace []byte, captureGroups bool) (int, int)
ReplaceRegex replaces all occurrences of 'search' with 'replace' in the given area and returns the number of replacements made and the number of characters added or removed on the last line of the range
func (*Buffer) UpdateCursors ¶
func (b *Buffer) UpdateCursors()
UpdateCursors updates all the cursors indicies
type Colorscheme ¶
Colorscheme is a map from string to style -- it represents a colorscheme
func ParseColorscheme ¶
func ParseColorscheme(text string) Colorscheme
ParseColorscheme parses the text definition for a colorscheme and returns the corresponding object Colorschemes are made up of color-link statements linking a color group to a list of colors For example, color-link keyword (blue,red) makes all keywords have a blue foreground and red background
func (Colorscheme) GetColor ¶
func (colorscheme Colorscheme) GetColor(color string) tcell.Style
GetColor takes in a syntax group and returns the colorscheme's style for that group
func (Colorscheme) GetDefault ¶
func (colorscheme Colorscheme) GetDefault() tcell.Style
type CompletionContext ¶
type CompletionContext struct {
Buffer *Buffer
View *View
Cursor Loc
WordStart Loc
WordEnd Loc
Prefix string
Word string
Line string
}
CompletionContext describes the editor state for autocomplete providers.
type CompletionItem ¶
type CompletionItem struct {
Label string
InsertText string
InlineText string
Detail string
ReplaceStart *Loc
ReplaceEnd *Loc
}
CompletionItem represents one autocomplete candidate.
func DefaultAutocompleteProvider ¶
func DefaultAutocompleteProvider(ctx CompletionContext) []CompletionItem
DefaultAutocompleteProvider suggests distinct words from the current buffer.
type Cursor ¶
type Cursor struct {
Loc
// Last cursor x position
LastVisualX int
// The current selection as a range of character numbers (inclusive)
CurSelection [2]Loc
// The original selection as a range of character numbers
// This is used for line and word selection where it is necessary
// to know what the original selection was
OrigSelection [2]Loc
// Which cursor index is this (for multiple cursors)
Num int
// contains filtered or unexported fields
}
The Cursor struct stores the location of the cursor in the view The complicated part about the cursor is storing its location. The cursor must be displayed at an x, y location, but since the buffer uses a rope to store text, to insert text we must have an index. It is also simpler to use character indicies for other tasks such as selection.
func (*Cursor) AddLineToSelection ¶
func (c *Cursor) AddLineToSelection()
AddLineToSelection adds the current line to the selection
func (*Cursor) AddWordToSelection ¶
func (c *Cursor) AddWordToSelection()
AddWordToSelection adds the word the cursor is currently on to the selection
func (*Cursor) CopySelection ¶
CopySelection copies the user's selection to either "primary" or "clipboard"
func (*Cursor) DeleteSelection ¶
func (c *Cursor) DeleteSelection()
DeleteSelection deletes the currently selected text
func (*Cursor) GetCharPosInLine ¶
GetCharPosInLine gets the char position of a visual x y coordinate (this is necessary because tabs are 1 char but 4 visual spaces)
func (*Cursor) GetSelection ¶
GetSelection returns the cursor's selection
func (*Cursor) GetVisualX ¶
GetVisualX returns the x value of the cursor in visual spaces
func (*Cursor) Goto ¶
Goto puts the cursor at the given cursor's location and gives the current cursor its selection too
func (*Cursor) GotoLoc ¶
GotoLoc puts the cursor at the given cursor's location and gives the current cursor its selection too
func (*Cursor) HasSelection ¶
HasSelection returns whether the user has selected anything
func (*Cursor) Left ¶
func (c *Cursor) Left()
Left moves the cursor left one cell (if possible) or to the previous line if it is at the beginning
func (*Cursor) Relocate ¶
func (c *Cursor) Relocate()
Relocate makes sure that the cursor is inside the bounds of the buffer If it isn't, it moves it to be within the buffer's lines
func (*Cursor) ResetSelection ¶
func (c *Cursor) ResetSelection()
ResetSelection resets the user's selection
func (*Cursor) Right ¶
func (c *Cursor) Right()
Right moves the cursor right one cell (if possible) or to the next line if it is at the end
func (*Cursor) SelectWord ¶
func (c *Cursor) SelectWord()
SelectWord selects the word the cursor is currently on
func (*Cursor) SetSelectionEnd ¶
SetSelectionEnd sets the end of the selection
func (*Cursor) SetSelectionStart ¶
SetSelectionStart sets the start of the selection
func (*Cursor) Start ¶
func (c *Cursor) Start()
Start moves the cursor to the start of the line it is on
func (*Cursor) StartOfText ¶
func (c *Cursor) StartOfText()
StartOfText moves the cursor to the first non-whitespace rune of the line it is on
func (*Cursor) StoreVisualX ¶
func (c *Cursor) StoreVisualX()
StoreVisualX stores the current visual x value in the cursor
type EventHandler ¶
type EventHandler struct {
UndoStack *Stack
RedoStack *Stack
// contains filtered or unexported fields
}
EventHandler executes text manipulations and allows undoing and redoing
func NewEventHandler ¶
func NewEventHandler(buf *Buffer) *EventHandler
NewEventHandler returns a new EventHandler
func (*EventHandler) ApplyDiff ¶
func (eh *EventHandler) ApplyDiff(new string)
ApplyDiff takes a string and runs the necessary insertion and deletion events to make the buffer equal to that string This means that we can transform the buffer into any string and still preserve undo/redo through insert and delete events
func (*EventHandler) Execute ¶
func (eh *EventHandler) Execute(t *TextEvent)
Execute a textevent and add it to the undo stack
func (*EventHandler) Insert ¶
func (eh *EventHandler) Insert(start Loc, textStr string)
Insert creates an insert text event and executes it
func (*EventHandler) MultipleReplace ¶
func (eh *EventHandler) MultipleReplace(deltas []Delta)
MultipleReplace creates an multiple insertions executes them
func (*EventHandler) RedoOneEvent ¶
func (eh *EventHandler) RedoOneEvent()
RedoOneEvent redoes one event
func (*EventHandler) Remove ¶
func (eh *EventHandler) Remove(start, end Loc)
Remove creates a remove text event and executes it
func (*EventHandler) Replace ¶
func (eh *EventHandler) Replace(start, end Loc, replace string)
Replace deletes from start to end and replaces it with the given string
func (*EventHandler) UndoOneEvent ¶
func (eh *EventHandler) UndoOneEvent()
UndoOneEvent undoes one event
type KeyBindings ¶
KeyBindings associates key presses with view actions.
var DefaultKeyBindings KeyBindings
func NewKeyBindings ¶
func NewKeyBindings(bindings map[string]string) KeyBindings
NewKeyBindings returns a new set of keybindings from the given set of binding descriptions.
func (KeyBindings) BindKey ¶
func (bindings KeyBindings) BindKey(key string, actions string) KeyBindings
BindKey binds a key to a list of actions. If the key is not found or if any action is not found, this function has no effect.
func (KeyBindings) BindKeys ¶
func (bindings KeyBindings) BindKeys(keys map[string]string) KeyBindings
BindKeys binds a set of keys to actions.
type KeyDesc ¶
KeyDesc holds the data for a keypress (keycode + modifiers)
func NewKeyDesc ¶
NewKeyDesc will find binding Key 'b' using string 'k'
type Line ¶
type Line struct {
// contains filtered or unexported fields
}
A Line contains the data in bytes as well as a highlight state, match and a flag for whether the highlighting needs to be updated
type LineArray ¶
type LineArray struct {
// contains filtered or unexported fields
}
A LineArray simply stores and array of lines and makes it easy to insert and delete in it
func NewLineArray ¶
NewLineArray returns a new line array from an array of bytes and the detected line ending format.
func (*LineArray) Bytes ¶
Bytes returns the string that should be written to disk when the line array is saved
func (*LineArray) DeleteByte ¶
DeleteByte deletes the byte at a position
func (*LineArray) DeleteFromStart ¶
DeleteFromStart deletes from the start of a line to the position
func (*LineArray) DeleteLine ¶
DeleteLine deletes the line number
func (*LineArray) DeleteToEnd ¶
DeleteToEnd deletes from the end of a line to the position
func (*LineArray) NewlineBelow ¶
NewlineBelow adds a newline below the given line number
func (*LineArray) SaveString ¶
SaveString returns the string that should be written to disk when the line array is saved It is the same as string but uses crlf or lf line endings depending
type Loc ¶
type Loc struct {
X, Y int
}
Loc stores a location
func FromCharPos ¶
FromCharPos converts from a character position to an x, y position
func (Loc) GreaterEqual ¶
GreaterEqual returns true if b is greater than or equal to b
func (Loc) GreaterThan ¶
GreaterThan returns true if b is bigger
type MouseAction ¶
type MouseAction int16
MouseAction is the logical action a mouse event represents.
View derives these actions from raw tcell mouse events (see View.HandleMouse); a host that keeps its own input layer may instead call View.HandleMouseAction directly with the action it already knows.
const ( MouseMove MouseAction = iota MouseLeftDown MouseLeftUp MouseMiddleDown MouseMiddleUp MouseRightDown MouseRightUp MouseScrollUp MouseScrollDown MouseScrollLeft MouseScrollRight )
Mouse actions recognized by the editor.
There are no click or double click actions: the editor tells consecutive clicks apart itself, from the time between the down and the up events (see DOUBLE_CLICK_INTERVAL).
type RuntimeFile ¶
type RuntimeFile interface {
// Name returns a name of the file without paths or extensions
Name() string
// Data returns the content of the file.
Data() ([]byte, error)
}
RuntimeFile allows the program to read runtime data like colorschemes or syntax files
type RuntimeFiles ¶
type RuntimeFiles struct {
// contains filtered or unexported fields
}
RuntimeFiles tracks a set of runtime files.
func NewRuntimeFiles ¶
func NewRuntimeFiles(fs http.FileSystem) *RuntimeFiles
NewRuntimeFiles creates a new set of runtime files from the colorscheme and syntax files present in the given http.Filesystme. Colorschemes should be located under "/colorschemes" and must end with a "micro" extension. Syntax files should be located under "/syntax" and must end with a "yaml" extension.
func (*RuntimeFiles) AddFile ¶
func (rfs *RuntimeFiles) AddFile(fileType string, file RuntimeFile)
AddRuntimeFile registers a file for the given filetype
func (*RuntimeFiles) AddFilesFromDirectory ¶
func (rfs *RuntimeFiles) AddFilesFromDirectory(fs http.FileSystem, fileType, directory, pattern string)
AddFilesFromDirectory registers each file from the given directory for the filetype which matches the file-pattern
func (RuntimeFiles) FindFile ¶
func (rfs RuntimeFiles) FindFile(fileType, name string) RuntimeFile
FindFile finds a runtime file of the given filetype and name will return nil if no file was found
func (RuntimeFiles) ListRuntimeFiles ¶
func (rfs RuntimeFiles) ListRuntimeFiles(fileType string) []RuntimeFile
ListRuntimeFiles lists all known runtime files for the given filetype
type Screen ¶
type Screen interface {
// SetContent writes ch with the combining runes comb and the given style
// to the cell at x, y. Coordinates outside the surface are ignored.
SetContent(x, y int, ch rune, comb []rune, style tcell.Style)
// Get returns the contents of the cell at x, y: its string, its style and
// its width in cells. The editor uses it to read back the character that
// sits under an additional cursor, and the style of the cell just before
// the cursor, which the ghost text of the autocomplete blends into.
Get(x, y int) (str string, style tcell.Style, width int)
// Size returns the width and height of the surface in cells.
Size() (width, height int)
// ShowCursor places the terminal cursor at x, y.
ShowCursor(x, y int)
// HideCursor hides the terminal cursor.
HideCursor()
}
Screen is the rendering surface the editor draws onto.
It is a deliberately small subset of tcell.Screen, so a tcell screen — or the tcell.Screen interface value itself — satisfies it as it is. A host that renders somewhere else (an in-memory grid, a network client, an image) can implement these five methods and get the same output as a terminal.
type ScrollBar ¶
type ScrollBar struct {
// contains filtered or unexported fields
}
ScrollBar represents an optional scrollbar that can be used
type Stack ¶
Stack is a simple implementation of a LIFO stack for text events
type View ¶
type View struct {
// A pointer to the buffer's cursor for ease of access
Cursor *Cursor
// The topmost line, used for vertical scrolling
Topline int
// Specifies whether this view is readonly
Readonly bool
// The buffer
Buf *Buffer
// contains filtered or unexported fields
}
View is a window onto a Buffer. It owns the viewport (scrolling, soft wrap, line numbers), the cursor set, the key bindings, the colorscheme and the optional autocomplete popup.
A View draws itself onto a Screen, which is a small subset of tcell.Screen — a tcell screen satisfies it as it is — and consumes tcell events. It has no opinion on how it is hosted: the same View can be the only thing on a tcell screen (see the demo), a pane of a larger application, or the source of a buffer that is rendered to an image.
func NewView ¶
NewView returns a new view with the specified buffer.
The view is focused from the start; call Blur to take the focus away. Its rectangle is empty until SetRect is called, which makes Draw fall back to filling the whole screen.
func (*View) Bottomline ¶
Bottomline returns the line number of the lowest line in the view You might think that this is obviously just v.Topline + v.height but if softwrap is enabled things get complicated since one buffer line can take up multiple lines in the view
func (*View) CursorPageDown ¶
CursorPageDown places the cursor a page up
func (*View) CursorPageUp ¶
CursorPageUp places the cursor a page up
func (*View) CursorStart ¶
CursorStart moves the cursor to the start of the buffer
func (*View) DeleteWordLeft ¶
DeleteWordLeft deletes the word to the left of the cursor
func (*View) DeleteWordRight ¶
DeleteWordRight deletes the word to the right of the cursor
func (*View) Draw ¶
Draw renders the view and the cursor onto the screen.
If SetRect was never called, the view expands to fill the whole screen.
func (*View) DuplicateLine ¶
DuplicateLine duplicates the current line or selection
func (*View) ExecuteActions ¶
Execute actions executes the supplied actions
func (*View) Focus ¶
func (v *View) Focus()
Focus gives the view focus, which makes it place the terminal cursor.
func (*View) GetInputCapture ¶
GetInputCapture returns the function installed with SetInputCapture, or nil.
func (*View) GetKeybindings ¶
func (v *View) GetKeybindings() KeyBindings
GetKeyBindings gets the keybindings for this view.
func (*View) HalfPageDown ¶
HalfPageDown scrolls the view down half a page
func (*View) HalfPageUp ¶
HalfPageUp scrolls the view up half a page
func (*View) HandleEvent ¶
HandleEvent handles an event passed by the main loop. It reports whether the editor consumed the event.
Key events go through the input capture (see SetInputCapture), then the autocomplete popup and finally the key bindings. Mouse events are classified into actions and offered to HandleMouseAction. Any other event is ignored.
func (*View) HandleMouse ¶
func (v *View) HandleMouse(event *tcell.EventMouse) bool
HandleMouse derives the logical mouse actions (move, button and wheel events) from a raw tcell mouse event and applies them to the view. It reports whether the view consumed the event.
func (*View) HandleMouseAction ¶
func (v *View) HandleMouseAction(action MouseAction, event *tcell.EventMouse) bool
HandleMouseAction handles one already-classified mouse action. It reports whether the view consumed the action.
Actions whose position falls outside the view's rectangle are ignored.
func (*View) IndentSelection ¶
IndentSelection indents the current selection
func (*View) InsertNewline ¶
InsertNewline inserts a newline plus possible some whitespace if autoindent is on
func (*View) IsOverwriteMode ¶
True if the view is in overwrite mode, false if in insert mode.
func (*View) JumpToMatchingBrace ¶
JumpToMatchingBrace moves the cursor to the matching brace if it is currently on a brace
func (*View) MouseLeftDown ¶
func (v *View) MouseLeftDown(e *tcell.EventMouse)
MouseLeftDown handles a press of the primary button: it moves the cursor to the position the event points at, and turns a second or third press in quick succession into a word or line selection. It also arms dragging, which MouseMove then extends.
Most hosts do not call this directly; HandleMouse derives the action and calls it.
func (*View) MouseLeftUp ¶
func (v *View) MouseLeftUp(e *tcell.EventMouse)
MouseLeftUp handles the release of the primary button, ending a drag and remembering the time so that the next press can be recognized as a double click.
func (*View) MouseMove ¶
func (v *View) MouseMove(e *tcell.EventMouse)
MouseMove handles a pointer movement: while the primary button is held down it extends the selection the press started, and it does nothing otherwise.
func (*View) MoveLinesDown ¶
MoveLinesDown moves down the current line or selected lines if any
func (*View) MoveLinesUp ¶
MoveLinesUp moves up the current line or selected lines if any
func (*View) OpenBuffer ¶
OpenBuffer opens a new buffer in this view. This resets the topline, event handler and cursor.
func (*View) OutdentLine ¶
OutdentLine moves the current line back one indentation
func (*View) OutdentSelection ¶
OutdentSelection takes the current selection and moves it back one indent level
func (*View) ParagraphNext ¶
ParagraphNext moves the cursor to the next empty line, or end of the buffer if there's none
func (*View) ParagraphPrevious ¶
ParagraphPrevious moves the cursor to the previous empty line, or beginning of the buffer if there's none
func (*View) Paste ¶
Paste whatever is in the system clipboard into the buffer Delete and paste if the user has a selection
func (*View) Relocate ¶
Relocate moves the view window so that the cursor is in view This is useful if the user has scrolled far away, and then starts typing
func (*View) RemoveAllMultiCursors ¶
RemoveAllMultiCursors removes all cursors except the base cursor
func (*View) RemoveMultiCursor ¶
RemoveMultiCursor removes the latest multiple cursor
func (*View) ReplaceAll ¶
func (v *View) ReplaceAll(str string, useRegex bool, caseSensitive bool, replaceText string) (int, error)
Replace all occurrences of str with replaceText in the entire buffer
Returns the number of replacements made and an error if the regex is invalid
func (*View) Retab ¶
Retab changes all tabs to spaces or all spaces to tabs depending on the user's settings. Changes go through the EventHandler so they are undoable and cursor positions are updated correctly.
func (*View) ScrollDown ¶
ScrollDown scrolls the view down n lines (if possible)
func (*View) ScrollDownAction ¶
ScrollDownAction scrolls the view up
func (*View) ScrollUpAction ¶
ScrollUpAction scrolls the view up
func (*View) Search ¶
Search for a string/regex and select it
Returns true,nil if the string was found, false,nil if not found, and false,error on error.
func (*View) SelectLeft ¶
SelectLeft selects the character to the left of the cursor
func (*View) SelectLine ¶
SelectLine selects the entire current line
func (*View) SelectPageDown ¶
SelectPageDown selects down one page
func (*View) SelectRight ¶
SelectRight selects the character to the right of the cursor
func (*View) SelectToEnd ¶
SelectToEnd selects the text from the cursor to the end of the buffer
func (*View) SelectToEndOfLine ¶
SelectToEndOfLine selects to the end of the current line
func (*View) SelectToStart ¶
SelectToStart selects the text from the cursor to the start of the buffer
func (*View) SelectToStartOfLine ¶
SelectToStartOfLine selects to the start of the current line
func (*View) SelectWordLeft ¶
SelectWordLeft selects the word to the left of the cursor
func (*View) SelectWordRight ¶
SelectWordRight selects the word to the right of the cursor
func (*View) SetAutocompleteProvider ¶
func (v *View) SetAutocompleteProvider(provider AutocompleteProvider)
SetAutocompleteProvider configures how this view produces completion items. Passing nil disables autocomplete.
func (*View) SetColorscheme ¶
func (v *View) SetColorscheme(colorscheme Colorscheme)
SetColorscheme sets the colorscheme for this view.
func (*View) SetInputCapture ¶
SetInputCapture installs a function which receives key events before the view handles them. The function can forward the event (or a different one) by returning it; returning nil swallows the event.
Providing a nil function removes a previously installed capture.
func (*View) SetKeybindings ¶
func (v *View) SetKeybindings(bindings KeyBindings)
SetKeybindings sets the keybindings for this view.
func (*View) SetRuntimeFiles ¶
func (v *View) SetRuntimeFiles(runtimeFiles *RuntimeFiles)
SetRuntimeFiles sets the runtime files for this view.
func (*View) SkipMultiCursor ¶
SkipMultiCursor moves the current multiple cursor to the next available position
func (*View) SpawnMultiCursor ¶
SpawnMultiCursor creates a new multiple cursor at the next occurrence of the current selection or current word
func (*View) SpawnMultiCursorSelect ¶
SpawnMultiCursorSelect adds a cursor at the beginning of each line of a selection
func (*View) StartOfLine ¶
StartOfLine moves the cursor to the start of the line
func (*View) ToggleOverwriteMode ¶
ToggleOverwriteMode lets the user toggle the text overwrite mode
func (*View) ToggleRuler ¶
ToggleRuler turns line numbers off and on
func (*View) TriggerAutocomplete ¶
TriggerAutocomplete opens or refreshes the autocomplete popup at the current cursor.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package main is a showcase of github.com/malivvan/editor hosted by tcell directly: no widget toolkit, no application framework, no layout engine.
|
Package main is a showcase of github.com/malivvan/editor hosted by tcell directly: no widget toolkit, no application framework, no layout engine. |
|
Package highlight is the syntax highlighter behind the editor.
|
Package highlight is the syntax highlighter behind the editor. |
|
Package runtime embeds the syntax definitions and colorschemes the editor ships with, and hands them to a view as a ready-made set of runtime files:
|
Package runtime embeds the syntax definitions and colorschemes the editor ships with, and hands them to a view as a ready-made set of runtime files: |
|
files/syntax
command
|
|
|
Package util holds the small helpers the editor shares between its files: clamping, converting between byte indices and rune indices, and — in unicode.go — everything that has to do with characters built from more than one code point.
|
Package util holds the small helpers the editor shares between its files: clamping, converting between byte indices and rune indices, and — in unicode.go — everything that has to do with characters built from more than one code point. |