mirror of https://github.com/Hilbis/Hilbish
feat: make doc command use pager
parent
d196799abf
commit
076118d237
|
@ -1,6 +1,8 @@
|
||||||
local commander = require 'commander'
|
local commander = require 'commander'
|
||||||
local fs = require 'fs'
|
local fs = require 'fs'
|
||||||
local lunacolors = require 'lunacolors'
|
local lunacolors = require 'lunacolors'
|
||||||
|
local Greenhouse = require 'nature.greenhouse'
|
||||||
|
local Page = require 'nature.greenhouse.page'
|
||||||
|
|
||||||
commander.register('doc', function(args, sinks)
|
commander.register('doc', function(args, sinks)
|
||||||
local moddocPath = hilbish.dataDir .. '/docs/'
|
local moddocPath = hilbish.dataDir .. '/docs/'
|
||||||
|
@ -85,8 +87,9 @@ Available sections: ]] .. table.concat(modules, ', ')
|
||||||
f:close()
|
f:close()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local gh = Greenhouse(sinks.out)
|
||||||
local backtickOccurence = 0
|
local backtickOccurence = 0
|
||||||
sinks.out:writeln(lunacolors.format(doc:gsub('`', function()
|
local page = Page(lunacolors.format(doc:gsub('`', function()
|
||||||
backtickOccurence = backtickOccurence + 1
|
backtickOccurence = backtickOccurence + 1
|
||||||
if backtickOccurence % 2 == 0 then
|
if backtickOccurence % 2 == 0 then
|
||||||
return '{reset}'
|
return '{reset}'
|
||||||
|
@ -97,4 +100,6 @@ Available sections: ]] .. table.concat(modules, ', ')
|
||||||
local signature = t:gsub('<.->(.-)</.->', '{underline}%1'):gsub('\\', '<')
|
local signature = t:gsub('<.->(.-)</.->', '{underline}%1'):gsub('\\', '<')
|
||||||
return '{bold}{yellow}' .. signature .. '{reset}'
|
return '{bold}{yellow}' .. signature .. '{reset}'
|
||||||
end)))
|
end)))
|
||||||
|
gh:addPage(page)
|
||||||
|
gh:initUi()
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -8,7 +8,6 @@ local Page = require 'nature.greenhouse.page'
|
||||||
|
|
||||||
commander.register('greenhouse', function(args, sinks)
|
commander.register('greenhouse', function(args, sinks)
|
||||||
local gh = Greenhouse(sinks.out)
|
local gh = Greenhouse(sinks.out)
|
||||||
local done = false
|
|
||||||
|
|
||||||
if sinks['in'].pipe then
|
if sinks['in'].pipe then
|
||||||
local page = Page(sinks['in']:readAll())
|
local page = Page(sinks['in']:readAll())
|
||||||
|
@ -25,71 +24,5 @@ commander.register('greenhouse', function(args, sinks)
|
||||||
gh:addPage(page)
|
gh:addPage(page)
|
||||||
end
|
end
|
||||||
|
|
||||||
bait.catch('signal.sigint', function()
|
gh:initUi()
|
||||||
done = true
|
|
||||||
end)
|
|
||||||
|
|
||||||
bait.catch('signal.resize', function()
|
|
||||||
gh:update()
|
|
||||||
end)
|
|
||||||
|
|
||||||
ansikit.screenAlt()
|
|
||||||
ansikit.clear(true)
|
|
||||||
gh:draw()
|
|
||||||
|
|
||||||
hilbish.goro(function()
|
|
||||||
while not done do
|
|
||||||
local c = read()
|
|
||||||
if c == 3 then
|
|
||||||
done = true
|
|
||||||
end
|
|
||||||
|
|
||||||
if c == 27 then
|
|
||||||
local c1 = read()
|
|
||||||
if c1 == 91 then
|
|
||||||
local c2 = read()
|
|
||||||
if c2 == 66 then -- arrow down
|
|
||||||
gh:scroll 'down'
|
|
||||||
elseif c2 == 65 then -- arrow up
|
|
||||||
gh:scroll 'up'
|
|
||||||
end
|
|
||||||
|
|
||||||
if c2 == 49 then
|
|
||||||
local c3 = read()
|
|
||||||
if c3 == 59 then
|
|
||||||
local c4 = read()
|
|
||||||
if c4 == 53 then
|
|
||||||
local c5 = read()
|
|
||||||
if c5 == 67 then
|
|
||||||
gh:next()
|
|
||||||
elseif c5 == 68 then
|
|
||||||
gh:previous()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
goto continue
|
|
||||||
end
|
|
||||||
print('\nchar:')
|
|
||||||
print(c)
|
|
||||||
|
|
||||||
::continue::
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
while not done do
|
|
||||||
--
|
|
||||||
end
|
|
||||||
ansikit.clear()
|
|
||||||
ansikit.screenMain()
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
function read()
|
|
||||||
terminal.saveState()
|
|
||||||
terminal.setRaw()
|
|
||||||
local c = io.read(1)
|
|
||||||
|
|
||||||
terminal.restoreState()
|
|
||||||
return c:byte()
|
|
||||||
end
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ function Greenhouse:draw()
|
||||||
self.sink:write '\r'
|
self.sink:write '\r'
|
||||||
|
|
||||||
self.sink:write(ansikit.getCSI(self.region.height - self.start.. ';1', 'H'))
|
self.sink:write(ansikit.getCSI(self.region.height - self.start.. ';1', 'H'))
|
||||||
self.sink:writeln(string.format('Page %d', self.curPage))
|
self.sink:writeln(string.format('\27[0mPage %d', self.curPage))
|
||||||
end
|
end
|
||||||
|
|
||||||
function Greenhouse:scroll(direction)
|
function Greenhouse:scroll(direction)
|
||||||
|
@ -85,4 +85,82 @@ function Greenhouse:previous()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Greenhouse:initUi()
|
||||||
|
local ansikit = require 'ansikit'
|
||||||
|
local bait = require 'bait'
|
||||||
|
local commander = require 'commander'
|
||||||
|
local hilbish = require 'hilbish'
|
||||||
|
local terminal = require 'terminal'
|
||||||
|
local Page = require 'nature.greenhouse.page'
|
||||||
|
local done = false
|
||||||
|
|
||||||
|
bait.catch('signal.sigint', function()
|
||||||
|
ansikit.clear()
|
||||||
|
done = true
|
||||||
|
end)
|
||||||
|
|
||||||
|
bait.catch('signal.resize', function()
|
||||||
|
self:update()
|
||||||
|
end)
|
||||||
|
|
||||||
|
ansikit.screenAlt()
|
||||||
|
ansikit.clear(true)
|
||||||
|
self:draw()
|
||||||
|
|
||||||
|
hilbish.goro(function()
|
||||||
|
while not done do
|
||||||
|
local c = read()
|
||||||
|
if c == 3 then
|
||||||
|
done = true
|
||||||
|
end
|
||||||
|
|
||||||
|
if c == 27 then
|
||||||
|
local c1 = read()
|
||||||
|
if c1 == 91 then
|
||||||
|
local c2 = read()
|
||||||
|
if c2 == 66 then -- arrow down
|
||||||
|
self:scroll 'down'
|
||||||
|
elseif c2 == 65 then -- arrow up
|
||||||
|
self:scroll 'up'
|
||||||
|
end
|
||||||
|
|
||||||
|
if c2 == 49 then
|
||||||
|
local c3 = read()
|
||||||
|
if c3 == 59 then
|
||||||
|
local c4 = read()
|
||||||
|
if c4 == 53 then
|
||||||
|
local c5 = read()
|
||||||
|
if c5 == 67 then
|
||||||
|
self:next()
|
||||||
|
elseif c5 == 68 then
|
||||||
|
self:previous()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
goto continue
|
||||||
|
end
|
||||||
|
print('\nchar:')
|
||||||
|
print(c)
|
||||||
|
|
||||||
|
::continue::
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
while not done do
|
||||||
|
--
|
||||||
|
end
|
||||||
|
ansikit.screenMain()
|
||||||
|
end
|
||||||
|
|
||||||
|
function read()
|
||||||
|
terminal.saveState()
|
||||||
|
terminal.setRaw()
|
||||||
|
local c = io.read(1)
|
||||||
|
|
||||||
|
terminal.restoreState()
|
||||||
|
return c:byte()
|
||||||
|
end
|
||||||
|
|
||||||
return Greenhouse
|
return Greenhouse
|
||||||
|
|
Loading…
Reference in New Issue