mirror of
https://github.com/zyedidia/micro.git
synced 2026-03-03 03:10:22 +09:00
This adds the `savecursor` option which will remember where the cursor was when the file was closed and put it back when the file is opened again. The option is off by default so that people aren't confused as to why the cursor isn't at the start of a file when they open it. This commit also adds a more general ability to serialize a buffer so various components can be saved (which could also be useful for persistent undo). Fixes #107
65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"strconv"
|
|
)
|
|
|
|
// Statusline represents the information line at the bottom
|
|
// of each view
|
|
// It gives information such as filename, whether the file has been
|
|
// modified, filetype, cursor location
|
|
type Statusline struct {
|
|
view *View
|
|
}
|
|
|
|
// Display draws the statusline to the screen
|
|
func (sline *Statusline) Display() {
|
|
// We'll draw the line at the lowest line in the view
|
|
y := sline.view.height
|
|
|
|
file := sline.view.Buf.Name
|
|
// If the name is empty, use 'No name'
|
|
if file == "" {
|
|
file = "No name"
|
|
}
|
|
|
|
// If the buffer is dirty (has been modified) write a little '+'
|
|
if sline.view.Buf.IsModified {
|
|
file += " +"
|
|
}
|
|
|
|
// Add one to cursor.x and cursor.y because (0,0) is the top left,
|
|
// but users will be used to (1,1) (first line,first column)
|
|
// We use GetVisualX() here because otherwise we get the column number in runes
|
|
// so a '\t' is only 1, when it should be tabSize
|
|
columnNum := strconv.Itoa(sline.view.Cursor.GetVisualX() + 1)
|
|
lineNum := strconv.Itoa(sline.view.Cursor.Y + 1)
|
|
|
|
file += " (" + lineNum + "," + columnNum + ")"
|
|
|
|
// Add the filetype
|
|
file += " " + sline.view.Buf.FileType
|
|
|
|
rightText := helpBinding + " for help "
|
|
if sline.view.helpOpen {
|
|
rightText = helpBinding + " to close help "
|
|
}
|
|
|
|
statusLineStyle := defStyle.Reverse(true)
|
|
if style, ok := colorscheme["statusline"]; ok {
|
|
statusLineStyle = style
|
|
}
|
|
|
|
// Maybe there is a unicode filename?
|
|
fileRunes := []rune(file)
|
|
for x := 0; x < sline.view.width; x++ {
|
|
if x < len(fileRunes) {
|
|
screen.SetContent(x, y, fileRunes[x], nil, statusLineStyle)
|
|
} else if x >= sline.view.width-len(rightText) && x < len(rightText)+sline.view.width-len(rightText) {
|
|
screen.SetContent(x, y, []rune(rightText)[x-sline.view.width+len(rightText)], nil, statusLineStyle)
|
|
} else {
|
|
screen.SetContent(x, y, ' ', nil, statusLineStyle)
|
|
}
|
|
}
|
|
}
|