mirror of
				https://github.com/sammy-ette/Hilbish
				synced 2025-08-10 02:52:03 +00:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			5b4b055c6c
			...
			19bb05f001
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 19bb05f001 | |||
| b9bb14497f | |||
| 7d0c3f3bf0 | |||
| 48a06f8022 | 
| @ -7,6 +7,7 @@ | ||||
|   - `flush()` and `autoFlush()` related to flushing outputs | ||||
|   - `pipe` property to check if a sink with input is a pipe (like stdin) | ||||
| - Show indexes on cdr list | ||||
| - Fix doc command not displaying correct subdocs when using shorthand api doc access (`doc api hilbish.jobs` as an example) | ||||
| 
 | ||||
| ### Fixed | ||||
| - Replaced `sed` in-place editing with `grep` and `mv` for compatibility with BSD utils | ||||
|  | ||||
| @ -1,3 +1,4 @@ | ||||
| local ansikit = require 'ansikit' | ||||
| local commander = require 'commander' | ||||
| local fs = require 'fs' | ||||
| local lunacolors = require 'lunacolors' | ||||
| @ -11,11 +12,6 @@ commander.register('doc', function(args, sinks) | ||||
| 		-- hilbish git | ||||
| 		moddocPath = './docs/' | ||||
| 	end | ||||
| 	local apidocHeader = [[ | ||||
| # %s | ||||
| {grayBg}  {white}{italic}%s  {reset} | ||||
| 
 | ||||
| ]] | ||||
| 
 | ||||
| 	local modules = table.map(fs.readdir(moddocPath), function(f) | ||||
| 		return lunacolors.underline(lunacolors.blue(string.gsub(f, '.md', ''))) | ||||
| @ -27,6 +23,8 @@ to Hilbish. | ||||
| 
 | ||||
| Usage: doc <section> [subdoc] | ||||
| Available sections: ]] .. table.concat(modules, ', ') | ||||
| 	local vals = {} | ||||
| 
 | ||||
| 	if #args > 0 then | ||||
| 		local mod = args[1] | ||||
| 
 | ||||
| @ -34,18 +32,18 @@ Available sections: ]] .. table.concat(modules, ', ') | ||||
| 		local funcdocs = nil | ||||
| 		local subdocName = args[2] | ||||
| 		if not f then | ||||
| 			-- assume subdir | ||||
| 			-- dataDir/docs/<mod>/<mod>.md | ||||
| 			moddocPath = moddocPath .. mod .. '/' | ||||
| 			if not subdocName then | ||||
| 				subdocName = '_index' | ||||
| 			end | ||||
| 			f = io.open(moddocPath .. subdocName .. '.md', 'rb') | ||||
| 			local oldmoddocPath = moddocPath | ||||
| 			if not f then | ||||
| 				f = io.open(moddocPath .. subdocName:match '%w+' .. '/' .. subdocName .. '.md', 'rb') | ||||
| 				moddocPath = moddocPath .. subdocName:match '%w+' .. '/' | ||||
| 				f = io.open(moddocPath .. subdocName .. '.md', 'rb') | ||||
| 			end | ||||
| 			if not f then | ||||
| 				moddocPath = moddocPath .. subdocName .. '/' | ||||
| 				moddocPath = oldmoddocPath .. subdocName .. '/' | ||||
| 				subdocName = args[3] or '_index' | ||||
| 				f = io.open(moddocPath .. subdocName .. '.md', 'rb') | ||||
| 			end | ||||
| @ -60,11 +58,10 @@ Available sections: ]] .. table.concat(modules, ', ') | ||||
| 			return lunacolors.underline(lunacolors.blue(string.gsub(fname, '.md', ''))) | ||||
| 		end) | ||||
| 		if #moddocs ~= 0 then | ||||
| 			funcdocs = funcdocs .. '\nSubdocs: ' .. table.concat(subdocs, ', ') | ||||
| 			funcdocs = funcdocs .. '\nSubdocs: ' .. table.concat(subdocs, ', ') .. '\n\n' | ||||
| 		end | ||||
| 
 | ||||
| 		local valsStr = funcdocs:match '%-%-%-\n([^%-%-%-]+)\n' | ||||
| 		local vals = {} | ||||
| 		if valsStr then | ||||
| 			local _, endpos = funcdocs:find('---\n' .. valsStr .. '\n---\n\n', 1, true) | ||||
| 			funcdocs = funcdocs:sub(endpos + 1, #funcdocs) | ||||
| @ -80,14 +77,38 @@ Available sections: ]] .. table.concat(modules, ', ') | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 		if mod == 'api' then | ||||
| 			funcdocs = string.format(apidocHeader, vals.title, vals.description or 'no description.') .. funcdocs | ||||
| 		end | ||||
| 		doc = funcdocs:sub(1, #funcdocs - 1) | ||||
| 		f:close() | ||||
| 	end | ||||
| 
 | ||||
| 	local gh = Greenhouse(sinks.out) | ||||
| 	function gh:resize() | ||||
| 		local size = terminal.size() | ||||
| 		self.region = { | ||||
| 			width = size.width, | ||||
| 			height = size.height - 3 | ||||
| 		} | ||||
| 	end | ||||
| 	gh:resize() | ||||
| 
 | ||||
| 	function gh:render() | ||||
| 		local workingPage = self.pages[self.curPage] | ||||
| 		local offset = self.offset | ||||
| 		if self.isSpecial then | ||||
| 			offset = self.specialOffset | ||||
| 			workingPage = self.specialPage | ||||
| 		end | ||||
| 
 | ||||
| 		self.sink:write(ansikit.getCSI(self.region.height + 2 .. ';1', 'H')) | ||||
| 		if not self.isSpecial then | ||||
| 			if args[1] == 'api' then | ||||
| 				self.sink:writeln(lunacolors.reset(string.format('%s', vals.title))) | ||||
| 				self.sink:write(lunacolors.format(string.format('{grayBg} ↳ {white}{italic}%s  {reset}', vals.description))) | ||||
| 			else | ||||
| 				self.sink:write(lunacolors.reset(string.format('Viewing doc page %s', moddocPath))) | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	local backtickOccurence = 0 | ||||
| 	local page = Page(nil, lunacolors.format(doc:gsub('`', function() | ||||
| 		backtickOccurence = backtickOccurence + 1 | ||||
| @ -101,5 +122,6 @@ Available sections: ]] .. table.concat(modules, ', ') | ||||
| 		return '{bold}{yellow}' .. signature .. '{reset}' | ||||
| 	end))) | ||||
| 	gh:addPage(page) | ||||
| 	ansikit.hideCursor() | ||||
| 	gh:initUi() | ||||
| end) | ||||
|  | ||||
| @ -32,9 +32,7 @@ commander.register('greenhouse', function(args, sinks) | ||||
| 		} | ||||
| 	end | ||||
| 
 | ||||
| 	local oldDraw = gh.draw | ||||
| 	function gh:draw() | ||||
| 		oldDraw(self) | ||||
| 	function gh:render() | ||||
| 		local workingPage = self.pages[self.curPage] | ||||
| 		local offset = self.offset | ||||
| 		if self.isSpecial then | ||||
| @ -42,7 +40,7 @@ commander.register('greenhouse', function(args, sinks) | ||||
| 			workingPage = self.specialPage | ||||
| 		end | ||||
| 
 | ||||
| 		self.sink:write(ansikit.getCSI((self.region.height + 2) - self.start.. ';1', 'H')) | ||||
| 		self.sink:write(ansikit.getCSI(self.region.height + 1 .. ';1', 'H')) | ||||
| 		if not self.isSpecial then | ||||
| 			self.sink:write(string.format('\27[0mPage %d', self.curPage)) | ||||
| 			if workingPage.title ~= '' then | ||||
|  | ||||
| @ -15,7 +15,8 @@ local Greenhouse = Object:extend() | ||||
| function Greenhouse:new(sink) | ||||
| 	local size = terminal.size() | ||||
| 	self.region = size | ||||
| 	self.start = 1 | ||||
| 	self.contents = nil -- or can be a table | ||||
| 	self.start = 1 -- where to start drawing from (should replace with self.region.y) | ||||
| 	self.offset = 1 -- vertical text offset | ||||
| 	self.sink = sink | ||||
| 	self.pages = {} | ||||
| @ -71,11 +72,14 @@ function Greenhouse:draw() | ||||
| 	self.sink:write(ansikit.getCSI(self.start .. ';1', 'H')) | ||||
| 	self.sink:write(ansikit.getCSI(2, 'J')) | ||||
| 
 | ||||
| 	for i = offset, offset + (self.region.height - 1) do | ||||
| 	for i = offset, offset + self.region.height - 1 do | ||||
| 		if i > #lines then break end | ||||
| 		self.sink:writeln('\r' .. sub(lines[i]:gsub('\t', '        '), self.region.width - 2)) | ||||
| 
 | ||||
| 		local writer = self.sink.writeln | ||||
| 		if i == offset + self.region.height - 1 then writer = self.sink.write end | ||||
| 
 | ||||
| 		writer(self.sink, sub(lines[i]:gsub('\t', '        '), self.region.width)) | ||||
| 	end | ||||
| 	self.sink:write '\r' | ||||
| 	self:render() | ||||
| end | ||||
| 
 | ||||
| @ -96,7 +100,7 @@ function Greenhouse:scroll(direction) | ||||
| 
 | ||||
| 	local oldOffset = self.offset | ||||
| 	if direction == 'down' then | ||||
| 		self.offset = math.min(self.offset + 1, math.max(1, #lines - self.region.height + 1)) | ||||
| 		self.offset = math.min(self.offset + 1, math.max(1, #lines - self.region.height)) | ||||
| 	elseif direction == 'up' then | ||||
| 		self.offset = math.max(self.offset - 1, 1) | ||||
| 	end | ||||
| @ -128,6 +132,9 @@ end | ||||
| function Greenhouse:updateSpecial() | ||||
| end | ||||
| 
 | ||||
| function Greenhouse:contents() | ||||
| end | ||||
| 
 | ||||
| function Greenhouse:toc(toggle) | ||||
| 	if not self.isSpecial then | ||||
| 		self.specialPageIdx = self.curPage | ||||
| @ -140,6 +147,17 @@ function Greenhouse:toc(toggle) | ||||
| ]], lunacolors.cyan(lunacolors.bold '―― Table of Contents ――')) | ||||
| 
 | ||||
| 	local genericPageCount = 1 | ||||
| 	local contents = self:contents() | ||||
| 	if contents then | ||||
| 		for i, c in ipairs(contents) do | ||||
| 			local title = c.title | ||||
| 			if c.active then | ||||
| 				title = lunacolors.invert(title) | ||||
| 			end | ||||
| 
 | ||||
| 			tocText = tocText .. title .. '\n' | ||||
| 		end | ||||
| 	else | ||||
| 		for i, page in ipairs(self.pages) do | ||||
| 			local title = page.title | ||||
| 			if title == 'Page' then | ||||
| @ -152,6 +170,7 @@ function Greenhouse:toc(toggle) | ||||
| 
 | ||||
| 			tocText = tocText .. title .. '\n' | ||||
| 		end | ||||
| 	end | ||||
| 	self.specialPage = Page('TOC', tocText) | ||||
| 	function self:updateSpecial() | ||||
| 		self:toc() | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user