mirror of https://github.com/Hilbis/Hilbish
feat: add abbreviations
parent
4743222044
commit
800a1184a2
19
editor.go
19
editor.go
|
@ -17,6 +17,7 @@ func editorLoader(rtm *rt.Runtime) *rt.Table {
|
||||||
"getVimRegister": {editorGetRegister, 2, false},
|
"getVimRegister": {editorGetRegister, 2, false},
|
||||||
"getLine": {editorGetLine, 0, false},
|
"getLine": {editorGetLine, 0, false},
|
||||||
"readChar": {editorReadChar, 0, false},
|
"readChar": {editorReadChar, 0, false},
|
||||||
|
"deleteByAmount": {editorDeleteByAmount, 1, false},
|
||||||
}
|
}
|
||||||
|
|
||||||
mod := rt.NewTable()
|
mod := rt.NewTable()
|
||||||
|
@ -106,3 +107,21 @@ func editorReadChar(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
|
|
||||||
return c.PushingNext1(t.Runtime, rt.StringValue(string(buf))), nil
|
return c.PushingNext1(t.Runtime, rt.StringValue(string(buf))), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #interface editor
|
||||||
|
// deleteByAmount() -> string
|
||||||
|
// Reads a keystroke from the user. This is in a format of something like Ctrl-L.
|
||||||
|
func editorDeleteByAmount(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
|
if err := c.Check1Arg(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
amount, err := c.IntArg(0)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
lr.rl.DeleteByAmount(int(amount))
|
||||||
|
|
||||||
|
return c.Next(), nil
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
local bait = require 'bait'
|
||||||
|
local hilbish = require 'hilbish'
|
||||||
|
hilbish.abbr = {
|
||||||
|
_abbrevs = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
function hilbish.abbr.add(opts)
|
||||||
|
hilbish.abbr._abbrevs[opts.abbr] = opts
|
||||||
|
end
|
||||||
|
|
||||||
|
print 'abbr loaded'
|
||||||
|
hilbish.abbr.add {
|
||||||
|
abbr = 'tt',
|
||||||
|
expand = 'echo titties'
|
||||||
|
}
|
||||||
|
|
||||||
|
hilbish.abbr.add {
|
||||||
|
abbr = 'idk',
|
||||||
|
expand = 'i dont know',
|
||||||
|
anywhere = true
|
||||||
|
}
|
||||||
|
|
||||||
|
bait.catch('hilbish.rawInput', function(c)
|
||||||
|
if c == ' ' then -- space
|
||||||
|
-- check if the last "word" was a valid abbreviation
|
||||||
|
local line = hilbish.editor.getLine()
|
||||||
|
local lineSplits = string.split(line, ' ')
|
||||||
|
local thisAbbr = hilbish.abbr._abbrevs[lineSplits[#lineSplits]]
|
||||||
|
|
||||||
|
if thisAbbr and (#lineSplits == 1 or thisAbbr.anywhere == true) then
|
||||||
|
hilbish.editor.deleteByAmount(-lineSplits[#lineSplits]:len())
|
||||||
|
hilbish.editor.insert(thisAbbr.expand)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
|
@ -24,6 +24,7 @@ require 'nature.opts'
|
||||||
require 'nature.vim'
|
require 'nature.vim'
|
||||||
require 'nature.runner'
|
require 'nature.runner'
|
||||||
require 'nature.hummingbird'
|
require 'nature.hummingbird'
|
||||||
|
require 'nature.abbr'
|
||||||
|
|
||||||
local shlvl = tonumber(os.getenv 'SHLVL')
|
local shlvl = tonumber(os.getenv 'SHLVL')
|
||||||
if shlvl ~= nil then
|
if shlvl ~= nil then
|
||||||
|
|
|
@ -142,6 +142,10 @@ func (rl *Instance) viDeleteByAdjust(adjust int) {
|
||||||
rl.updateHelpers()
|
rl.updateHelpers()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rl *Instance) DeleteByAmount(adjust int) {
|
||||||
|
rl.viDeleteByAdjust(adjust)
|
||||||
|
}
|
||||||
|
|
||||||
func (rl *Instance) vimDeleteToken(r rune) bool {
|
func (rl *Instance) vimDeleteToken(r rune) bool {
|
||||||
tokens, _, _ := tokeniseSplitSpaces(rl.line, 0)
|
tokens, _, _ := tokeniseSplitSpaces(rl.line, 0)
|
||||||
pos := int(r) - 48 // convert ASCII to integer
|
pos := int(r) - 48 // convert ASCII to integer
|
||||||
|
|
Loading…
Reference in New Issue