Documentation ¶
Index ¶
- Constants
- Variables
- func BufferComplete(b *Buffer) ([]string, []string)
- func ByteOffset(pos Loc, buf *Buffer) int
- func DiffLA(a, b Loc, buf *LineArray) int
- func ExecuteTextEvent(t *TextEvent, buf *SharedBuffer)
- func FileComplete(b *Buffer) ([]string, []string)
- func GetArg(b *Buffer) (string, int)
- func GetWord(b *Buffer) ([]byte, int)
- func InBounds(pos Loc, buf *Buffer) bool
- func UndoTextEvent(t *TextEvent, buf *SharedBuffer)
- func WriteLog(s string)
- type BufType
- type Buffer
- func (b *Buffer) AddCursor(c *Cursor)
- func (b *Buffer) AddMessage(m *Message)
- func (b *Buffer) ApplyBackup(fsize int64) bool
- func (b *Buffer) Autocomplete(c Completer) bool
- func (b *Buffer) Backup(checkTime bool) error
- func (b *Buffer) ClearAllMessages()
- func (b *Buffer) ClearCursors()
- func (b *Buffer) ClearMatches()
- func (b *Buffer) ClearMessages(owner string)
- func (b *Buffer) Close()
- func (b *Buffer) CycleAutocomplete(forward bool)
- func (b *Buffer) ExternallyModified() bool
- func (b *Buffer) FileType() string
- func (b *Buffer) FindMatchingBrace(braceType [2]rune, start Loc) (Loc, bool)
- func (b *Buffer) FindNext(s string, start, end, from Loc, down bool, useRegex bool) ([2]Loc, bool, error)
- func (b *Buffer) Fini()
- func (b *Buffer) GetActiveCursor() *Cursor
- func (b *Buffer) GetCursor(n int) *Cursor
- func (b *Buffer) GetCursors() []*Cursor
- func (b *Buffer) GetName() string
- func (b *Buffer) GetSuggestions()
- func (b *Buffer) IndentString(tabsize int) string
- func (b *Buffer) Insert(start Loc, text string)
- func (b *Buffer) Line(i int) string
- 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) NumCursors() int
- func (b *Buffer) ReOpen() error
- func (b *Buffer) RelocateCursors()
- func (b *Buffer) Remove(start, end Loc)
- func (b *Buffer) RemoveBackup()
- func (b *Buffer) RemoveCursor(i int)
- func (b *Buffer) ReplaceRegex(start, end Loc, search *regexp.Regexp, replace []byte) int
- func (b *Buffer) Retab()
- func (b *Buffer) RuneAt(loc Loc) rune
- func (b *Buffer) Save() error
- func (b *Buffer) SaveAs(filename string) error
- func (b *Buffer) SaveAsWithSudo(filename string) error
- func (b *Buffer) SaveWithSudo() error
- func (b *Buffer) Serialize() error
- func (b *Buffer) SetCurCursor(n int)
- func (b *Buffer) SetCursors(c []*Cursor)
- func (b *Buffer) SetName(s string)
- func (b *Buffer) SetOption(option, value string) error
- func (b *Buffer) SetOptionNative(option string, nativeValue interface{}) error
- func (b *Buffer) Unserialize() error
- func (b *Buffer) UpdateCursors()
- func (b *Buffer) UpdateModTime() (err error)
- func (b *Buffer) UpdateRules()
- type Completer
- type Cursor
- func (c *Cursor) AddLineToSelection()
- func (c *Cursor) AddWordToSelection()
- func (c *Cursor) Buf() *Buffer
- func (c *Cursor) CopySelection(target string)
- func (c *Cursor) DeleteSelection()
- func (c *Cursor) Deselect(start bool)
- func (c *Cursor) Down()
- func (c *Cursor) DownN(amount int)
- func (c *Cursor) End()
- func (c *Cursor) GetCharPosInLine(b []byte, visualPos int) int
- func (c *Cursor) GetSelection() []byte
- 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) 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) SetBuf(b *Buffer)
- 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 FileFormat
- type Line
- type LineArray
- func (la *LineArray) Bytes() []byte
- func (la *LineArray) End() Loc
- func (la *LineArray) LineBytes(n int) []byte
- func (la *LineArray) LinesNum() int
- func (la *LineArray) Match(lineN int) highlight.LineMatch
- func (la *LineArray) Rehighlight(lineN int) bool
- func (la *LineArray) SetMatch(lineN int, m highlight.LineMatch)
- func (la *LineArray) SetRehighlight(lineN int, on bool)
- func (la *LineArray) SetState(lineN int, s highlight.State)
- func (la *LineArray) Start() Loc
- func (la *LineArray) State(lineN int) highlight.State
- func (la *LineArray) Substr(start, end Loc) []byte
- type Loc
- type Message
- type MsgType
- type SerializedBuffer
- type SharedBuffer
- type TEStack
- type TextEvent
Constants ¶
const ( // TextEventInsert represents an insertion event TextEventInsert = 1 // TextEventRemove represents a deletion event TextEventRemove = -1 // TextEventReplace represents a replace event TextEventReplace = 0 )
const ( // Line ending file formats FFAuto = 0 // Autodetect format FFUnix = 1 // LF line endings (unix style '\n') FFDos = 2 // CRLF line endings (dos style '\r\n') )
const ( MTInfo = iota MTWarning MTError )
const LargeFileThreshold = 50000
LargeFileThreshold is the number of bytes when fastdirty is forced because hashing is too slow
Variables ¶
var ( BTDefault = BufType{0, false, false, true} BTHelp = BufType{1, true, true, true} BTLog = BufType{2, true, true, false} BTScratch = BufType{3, false, true, false} BTRaw = BufType{4, false, true, false} BTInfo = BufType{5, false, true, false} ErrFileTooLarge = errors.New("File is too large to hash") )
var BracePairs = [][2]rune{
{'(', ')'},
{'{', '}'},
{'[', ']'},
}
Functions ¶
func BufferComplete ¶
BufferComplete autocompletes based on previous words in the buffer
func ByteOffset ¶
ByteOffset is just like ToCharPos except it counts bytes instead of runes
func ExecuteTextEvent ¶
func ExecuteTextEvent(t *TextEvent, buf *SharedBuffer)
ExecuteTextEvent runs a text event
func FileComplete ¶
FileComplete autocompletes filenames
func GetWord ¶
GetWord gets the most recent word separated by any separator (whitespace, punctuation, any non alphanumeric character)
func InBounds ¶
InBounds returns whether the given location is a valid character position in the given buffer
func UndoTextEvent ¶
func UndoTextEvent(t *TextEvent, buf *SharedBuffer)
UndoTextEvent undoes a text event
Types ¶
type BufType ¶
type BufType struct { Kind int Readonly bool // The buffer cannot be edited Scratch bool // The buffer cannot be saved Syntax bool // Syntax highlighting is enabled }
The BufType defines what kind of buffer this is
type Buffer ¶
type Buffer struct { *EventHandler StartCursor Loc // Path to the file on disk Path string // Absolute path to the file on disk AbsPath string SyntaxDef *highlight.Def Highlighter *highlight.Highlighter // Settings customized by the user Settings map[string]interface{} Suggestions []string Completions []string CurSuggestion int Messages []*Message // contains filtered or unexported fields }
Buffer stores the main information about a currently open file including the actual text (in a LineArray), the undo/redo stack (in an EventHandler) all the cursors, the syntax highlighting info, the settings for the buffer and some misc info about modification time and path location. The syntax highlighting info must be stored with the buffer because the syntax highlighter attaches information to each line of the buffer for optimization purposes so it doesn't have to rehighlight everything on every update.
func NewBuffer ¶
NewBuffer creates a new buffer from a given reader with a given path Ensure that ReadSettings and InitGlobalSettings have been called before creating a new buffer Places the cursor at startcursor. If startcursor is -1, -1 places the cursor at an autodetected location (based on savecursor or :LINE:COL)
func NewBufferFromFile ¶
NewBufferFromFile opens a new buffer using the given path It will also automatically handle `~`, and line/column with filename:l:c It will return an empty buffer if the path does not exist and an error if the file is a directory
func NewBufferFromString ¶
NewBufferFromString creates a new buffer containing the given string
func (*Buffer) AddMessage ¶
func (*Buffer) ApplyBackup ¶
ApplyBackup applies the corresponding backup file to this buffer (if one exists) Returns true if a backup was applied
func (*Buffer) Autocomplete ¶
Autocomplete starts the autocomplete process
func (*Buffer) ClearAllMessages ¶
func (b *Buffer) ClearAllMessages()
func (*Buffer) ClearCursors ¶
func (b *Buffer) ClearCursors()
ClearCursors removes all extra cursors
func (*Buffer) ClearMatches ¶
func (b *Buffer) ClearMatches()
ClearMatches clears all of the syntax highlighting for the buffer
func (*Buffer) ClearMessages ¶
func (*Buffer) Close ¶
func (b *Buffer) Close()
Close removes this buffer from the list of open buffers
func (*Buffer) CycleAutocomplete ¶
CycleAutocomplete moves to the next suggestion
func (*Buffer) ExternallyModified ¶
ExternallyModified returns whether the file being edited has been modified by some external process
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 TODO: maybe can be more efficient with utf8 package returns the location of the matching brace if the boolean returned is true then the original matching brace is one character left of the starting location
func (*Buffer) FindNext ¶
func (b *Buffer) FindNext(s string, start, end, from Loc, down bool, useRegex 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) Fini ¶
func (b *Buffer) Fini()
Fini should be called when a buffer is closed and performs some cleanup
func (*Buffer) GetActiveCursor ¶
GetActiveCursor returns the main cursor in this buffer
func (*Buffer) GetCursors ¶
GetCursors returns the list of cursors in this buffer
func (*Buffer) GetName ¶
GetName returns the name that should be displayed in the statusline for this buffer
func (*Buffer) GetSuggestions ¶
func (b *Buffer) GetSuggestions()
func (*Buffer) IndentString ¶
IndentString returns this buffer's indent method (a tabstop or n spaces depending on the settings)
func (*Buffer) MergeCursors ¶
func (b *Buffer) MergeCursors()
MergeCursors merges any cursors that are at the same position into one cursor
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) NumCursors ¶
NumCursors returns the number of cursors
func (*Buffer) RelocateCursors ¶
func (b *Buffer) RelocateCursors()
func (*Buffer) RemoveBackup ¶
func (b *Buffer) RemoveBackup()
RemoveBackup removes any backup file associated with this buffer
func (*Buffer) RemoveCursor ¶
func (*Buffer) ReplaceRegex ¶
ReplaceRegex replaces all occurrences of 'search' with 'replace' in the given area and returns the number of replacements made
func (*Buffer) SaveAs ¶
SaveAs saves the buffer to a specified path (filename), creating the file if it does not exist
func (*Buffer) SaveAsWithSudo ¶
func (*Buffer) SaveWithSudo ¶
func (*Buffer) SetCurCursor ¶
SetCurCursor sets the current cursor
func (*Buffer) SetCursors ¶
SetCursors resets this buffer's cursors to a new list
func (*Buffer) SetOptionNative ¶
func (*Buffer) Unserialize ¶
func (*Buffer) UpdateCursors ¶
func (b *Buffer) UpdateCursors()
UpdateCursors updates all the cursors indicies
func (*Buffer) UpdateModTime ¶
UpdateModTime updates the modtime of this file
func (*Buffer) UpdateRules ¶
func (b *Buffer) UpdateRules()
UpdateRules updates the syntax rules and filetype for this buffer This is called when the colorscheme changes
type Completer ¶
A Completer is a function that takes a buffer and returns info describing what autocompletions should be inserted at the current cursor location It returns a list of string suggestions which will be inserted at the current cursor location if selected as well as a list of suggestion names which can be displayed in an autocomplete box or other UI element
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 buffer as well as the 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) Deselect ¶
Deselect closes the cursor's current selection Start indicates whether the cursor should be placed at the start or end of the selection
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 or not 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()
type EventHandler ¶
type EventHandler struct { UndoStack *TEStack RedoStack *TEStack // contains filtered or unexported fields }
EventHandler executes text manipulations and allows undoing and redoing
func NewEventHandler ¶
func NewEventHandler(buf *SharedBuffer, cursors []*Cursor) *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 FileFormat ¶
type FileFormat byte
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 { Endings FileFormat // 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 ¶
func NewLineArray(size uint64, endings FileFormat, reader io.Reader) *LineArray
NewLineArray returns a new line array from an array of bytes
func (*LineArray) Bytes ¶
Bytes returns the string that should be written to disk when the line array is saved
func (*LineArray) Rehighlight ¶
func (*LineArray) SetRehighlight ¶
type Loc ¶
type Loc struct {
X, Y int
}
Loc stores a location
func ParseCursorLocation ¶
ParseCursorLocation turns a cursor location like 10:5 (LINE:COL) into a loc
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 Message ¶
func NewMessageAtLine ¶
type SerializedBuffer ¶
type SerializedBuffer struct { EventHandler *EventHandler Cursor Loc ModTime time.Time }
The SerializedBuffer holds the types that get serialized when a buffer is saved These are used for the savecursor and saveundo options