feat: make doc command use pager

pull/240/head
sammyette 2023-04-11 20:44:29 -04:00
parent d196799abf
commit 076118d237
Signed by: sammyette
GPG Key ID: 904FC49417B44DCD
3 changed files with 86 additions and 70 deletions

View File

@ -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)

View File

@ -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

View File

@ -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