76 lines
1.2 KiB
Go
76 lines
1.2 KiB
Go
package action
|
|
|
|
type RegisterType int
|
|
|
|
const (
|
|
CharwiseRegister RegisterType = iota
|
|
LinewiseRegister
|
|
BlockwiseRegister
|
|
)
|
|
|
|
type Register struct {
|
|
Type RegisterType
|
|
Content []string
|
|
}
|
|
|
|
func DefaultRegisters() map[rune]Register {
|
|
reg := make(map[rune]Register)
|
|
|
|
addSpecialRegisters(reg)
|
|
addNamedRegisters(reg)
|
|
addNumberedRegisters(reg)
|
|
|
|
return reg
|
|
}
|
|
|
|
func addNamedRegisters(reg map[rune]Register) {
|
|
name := 'a'
|
|
|
|
for name <= 'z' {
|
|
reg[name] = emptyRegister()
|
|
name++
|
|
}
|
|
}
|
|
|
|
func addNumberedRegisters(reg map[rune]Register) {
|
|
name := '0'
|
|
|
|
for name <= '9' {
|
|
reg[name] = emptyRegister()
|
|
name++
|
|
}
|
|
|
|
}
|
|
|
|
func addSpecialRegisters(reg map[rune]Register) {
|
|
// Unnamed (default)
|
|
reg['"'] = emptyRegister()
|
|
|
|
// Black hole (readonly)
|
|
reg['_'] = emptyRegister()
|
|
|
|
// System clipboard
|
|
reg['*'] = emptyRegister()
|
|
|
|
// Small delete? Expression?
|
|
|
|
// Last inserted text (readonly)
|
|
reg['.'] = emptyRegister()
|
|
|
|
// Current file name (readonly)
|
|
reg['%'] = emptyRegister()
|
|
|
|
// Last executed command (readonly)
|
|
reg[':'] = emptyRegister()
|
|
|
|
// Alternate (previous) file (readonly)
|
|
reg['#'] = emptyRegister()
|
|
}
|
|
|
|
func emptyRegister() Register {
|
|
return Register{
|
|
Type: CharwiseRegister,
|
|
Content: []string{},
|
|
}
|
|
}
|