mirror of
				https://github.com/kepler155c/opus
				synced 2025-10-31 07:33:00 +00:00 
			
		
		
		
	remove preferred apps/alternates - same can be accomplished using aliases
This commit is contained in:
		| @@ -1,4 +1,3 @@ | ||||
| local Alt    = require('opus.alternate') | ||||
| local Config = require('opus.config') | ||||
| local Event  = require('opus.event') | ||||
| local pastebin = require('opus.http.pastebin') | ||||
| @@ -351,7 +350,7 @@ function Browser:eventHandler(event) | ||||
| 		self:setStatus('Started cloud edit') | ||||
|  | ||||
| 	elseif event.type == 'shell' then | ||||
| 		self:run(Alt.get('shell')) | ||||
| 		self:run('shell') | ||||
|  | ||||
| 	elseif event.type == 'refresh' then | ||||
| 		self:updateDirectory(self.dir) | ||||
|   | ||||
| @@ -1,4 +1,3 @@ | ||||
| local Alt      = require('opus.alternate') | ||||
| local Array    = require('opus.array') | ||||
| local class    = require('opus.class') | ||||
| local Config   = require('opus.config') | ||||
| @@ -469,13 +468,13 @@ function page:eventHandler(event) | ||||
| 		shell.switchTab(shell.openTab(event.button.app.run)) | ||||
|  | ||||
| 	elseif event.type == 'shell' then | ||||
| 		shell.switchTab(shell.openTab(Alt.get('shell'))) | ||||
| 		shell.switchTab(shell.openTab('shell')) | ||||
|  | ||||
| 	elseif event.type == 'lua' then | ||||
| 		shell.switchTab(shell.openTab(Alt.get('lua'))) | ||||
| 		shell.switchTab(shell.openTab('Lua')) | ||||
|  | ||||
| 	elseif event.type == 'files' then | ||||
| 		shell.switchTab(shell.openTab(Alt.get('files'))) | ||||
| 		shell.switchTab(shell.openTab('Files')) | ||||
|  | ||||
| 	elseif event.type == 'network' then | ||||
| 		shell.switchTab(shell.openTab('Network')) | ||||
|   | ||||
| @@ -1,5 +1,3 @@ | ||||
| local Alt = require('opus.alternate') | ||||
|  | ||||
| local kernel = _G.kernel | ||||
| local os     = _G.os | ||||
| local shell  = _ENV.shell | ||||
| @@ -20,7 +18,7 @@ kernel.hook('kernel_focus', function(_, eventData) | ||||
| 			end | ||||
| 		end | ||||
| 		if nextTab == launcherTab then | ||||
| 			shell.switchTab(shell.openTab(Alt.get('shell'))) | ||||
| 			shell.switchTab(shell.openTab('shell')) | ||||
| 		else | ||||
| 			shell.switchTab(nextTab.uid) | ||||
| 		end | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| local Alt    = require('opus.alternate') | ||||
| local Event  = require('opus.event') | ||||
| local Socket = require('opus.socket') | ||||
| local Util   = require('opus.util') | ||||
|  | ||||
| local kernel = _G.kernel | ||||
| local shell  = _ENV.shell | ||||
| local term   = _G.term | ||||
| local window = _G.window | ||||
|  | ||||
| @@ -46,7 +46,7 @@ local function telnetHost(socket, mode) | ||||
| 		title = mode .. ' client', | ||||
| 		hidden = true, | ||||
| 		fn = function() | ||||
| 			Util.run(kernel.makeEnv(_ENV), Alt.get('shell'), table.unpack(termInfo.program)) | ||||
| 			Util.run(kernel.makeEnv(_ENV), shell.resolveProgram('shell'), table.unpack(termInfo.program)) | ||||
| 			if socket.queue then | ||||
| 				socket:write(socket.queue) | ||||
| 			end | ||||
|   | ||||
| @@ -131,7 +131,14 @@ function shell.exit() | ||||
| end | ||||
|  | ||||
| function shell.dir() return DIR end | ||||
| function shell.setDir(d) DIR = d end | ||||
| function shell.setDir(d) | ||||
| 	d = fs.combine(d, '') | ||||
| 	if not fs.isDir(d) then | ||||
| 		error("Not a directory", 2) | ||||
| 	end | ||||
| 	DIR = d | ||||
| end | ||||
|  | ||||
| function shell.path() return PATH end | ||||
| function shell.setPath(p) PATH = p end | ||||
|  | ||||
| @@ -155,24 +162,29 @@ function shell.resolveProgram(_sCommand) | ||||
|  | ||||
| 	local function inPath() | ||||
| 		-- Otherwise, look on the path variable | ||||
| 		if not _sCommand:find('/') then | ||||
| 			for sPath in string.gmatch(PATH or '', "[^:]+") do | ||||
| 				sPath = fs.combine(sPath, _sCommand ) | ||||
| 				if fs.exists(sPath) and not fs.isDir(sPath) then | ||||
| 					return sPath | ||||
| 				end | ||||
| 				if fs.exists(sPath .. '.lua') then | ||||
| 					return sPath .. '.lua' | ||||
| 				end | ||||
| 		for sPath in string.gmatch(PATH or '', "[^:]+") do | ||||
| 			sPath = fs.combine(sPath, _sCommand ) | ||||
| 			if check(sPath) then | ||||
| 				return sPath | ||||
| 			end | ||||
| 			if check(sPath .. '.lua') then | ||||
| 				return sPath .. '.lua' | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	return check(_sCommand) | ||||
| 		or check(_sCommand .. '.lua') | ||||
| 		or check(shell.resolve(_sCommand)) | ||||
| 	if not _sCommand:find('/') then | ||||
| 		return inPath() | ||||
| 	end | ||||
|  | ||||
| 	-- so... even if you are in the rom directory and you run: | ||||
| 	-- 'packages/common/edit.lua', allow this even though it | ||||
| 	-- does not use a leading slash. Ideally, fs.combine would | ||||
| 	-- provide the leading slash... but it does not. | ||||
| 	return check(shell.resolve(_sCommand)) | ||||
| 		or check(shell.resolve(_sCommand) .. '.lua') | ||||
| 		or inPath() | ||||
| 		or check(_sCommand) | ||||
| 		or check(_sCommand .. '.lua') | ||||
| end | ||||
|  | ||||
| function shell.programs(_bIncludeHidden) | ||||
|   | ||||
| @@ -1,77 +0,0 @@ | ||||
| local Array  = require('opus.array') | ||||
| local Config = require('opus.config') | ||||
| local UI     = require('opus.ui') | ||||
|  | ||||
| local tab = UI.Tab { | ||||
| 	title = 'Preferred', | ||||
| 	description = 'Select preferred applications', | ||||
| 	apps = UI.ScrollingGrid { | ||||
| 		x = 2, y = 2, | ||||
| 		ex = 12, ey = -3, | ||||
| 		columns = { | ||||
| 			{ key = 'name' }, | ||||
| 		}, | ||||
| 		sortColumn = 'name', | ||||
| 		disableHeader = true, | ||||
| 	}, | ||||
| 	choices = UI.Grid { | ||||
| 		x = 14, y = 2, | ||||
| 		ex = -2, ey = -3, | ||||
| 		disableHeader = true, | ||||
| 		columns = { | ||||
| 			{ key = 'file' }, | ||||
| 		}, | ||||
| 		getRowTextColor = function(self, row) | ||||
| 			if row == self.values[1] then | ||||
| 				return 'yellow' | ||||
| 			end | ||||
| 			return UI.Grid.getRowTextColor(self, row) | ||||
| 		end, | ||||
| 	}, | ||||
| 	statusBar = UI.StatusBar { | ||||
| 		values = 'Double-click to set as preferred' | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| function tab:updateChoices() | ||||
| 	local app = self.apps:getSelected().name | ||||
| 	local choices = { } | ||||
| 	for _, v in pairs(self.config[app]) do | ||||
| 		table.insert(choices, { file = v }) | ||||
| 	end | ||||
| 	self.choices:setValues(choices) | ||||
| 	self.choices:draw() | ||||
| end | ||||
|  | ||||
| function tab:enable() | ||||
| 	self.config = Config.load('alternate') | ||||
|  | ||||
| 	local apps = { } | ||||
| 	for k, _ in pairs(self.config) do | ||||
| 		table.insert(apps, { name = k }) | ||||
| 	end | ||||
| 	self.apps:setValues(apps) | ||||
|  | ||||
| 	self:updateChoices() | ||||
|  | ||||
| 	UI.Tab.enable(self) | ||||
| end | ||||
|  | ||||
| function tab:eventHandler(event) | ||||
| 	if event.type == 'grid_focus_row' and event.element == self.apps then | ||||
| 		self:updateChoices() | ||||
|  | ||||
| 	elseif event.type == 'grid_select' and event.element == self.choices then | ||||
| 		local app = self.apps:getSelected().name | ||||
| 		Array.removeByValue(self.config[app], event.selected.file) | ||||
| 		table.insert(self.config[app], 1, event.selected.file) | ||||
| 		self:updateChoices() | ||||
| 		Config.update('alternate', self.config) | ||||
|  | ||||
| 	else | ||||
| 		return UI.Tab.eventHandler(self, event) | ||||
| 	end | ||||
| 	return true | ||||
| end | ||||
|  | ||||
| return tab | ||||
| @@ -1,48 +0,0 @@ | ||||
| local Array  = require('opus.array') | ||||
| local Config = require('opus.config') | ||||
| local Util   = require('opus.util') | ||||
|  | ||||
| local function getConfig() | ||||
| 	return Config.load('alternate', { | ||||
| 		shell = { | ||||
| 			'sys/apps/shell.lua', | ||||
| 			'rom/programs/shell.lua', | ||||
| 		}, | ||||
| 		lua = { | ||||
| 			'sys/apps/Lua.lua', | ||||
| 			'rom/programs/lua.lua', | ||||
| 		}, | ||||
| 		files = { | ||||
| 			'sys/apps/Files.lua', | ||||
| 		} | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| local Alt = { } | ||||
|  | ||||
| function Alt.get(key) | ||||
| 	return getConfig()[key][1] | ||||
| end | ||||
|  | ||||
| function Alt.set(key, value) | ||||
| 	local config = getConfig() | ||||
| 	Array.removeByValue(config[key], value) | ||||
| 	table.insert(config[key], 1, value) | ||||
| 	Config.update('alternate', config) | ||||
| end | ||||
|  | ||||
| function Alt.remove(key, value) | ||||
| 	local config = getConfig() | ||||
| 	Array.removeByValue(config[key], value) | ||||
| 	Config.update('alternate', config) | ||||
| end | ||||
|  | ||||
| function Alt.add(key, value) | ||||
| 	local config = getConfig() | ||||
| 	if not Util.contains(config[key], value) then | ||||
| 		table.insert(config[key], value) | ||||
| 		Config.update('alternate', config) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| return Alt | ||||
| @@ -79,10 +79,40 @@ function ramfs.list(node, dir) | ||||
| end | ||||
|  | ||||
| function ramfs.open(node, fn, fl) | ||||
| 	if fl ~= 'r' and fl ~= 'w' and fl ~= 'rb' and fl ~= 'wb' then | ||||
| 	local modes = Util.transpose { 'r', 'w', 'rb', 'wb', 'a' } | ||||
| 	if not modes[fl] then | ||||
| 		error('Unsupported mode') | ||||
| 	end | ||||
|  | ||||
| 	if fl == 'a' then | ||||
| 		if node.mountPoint ~= fn then | ||||
| 			fl = 'w' | ||||
| 		else | ||||
| 			local c = type(node.contents) == 'table' | ||||
| 				and string.char(table.unpack(node.contents)) | ||||
| 				or node.contents | ||||
| 				or '' | ||||
|  | ||||
| 			return { | ||||
| 				write = function(str) | ||||
| 					c = c .. str | ||||
| 				end, | ||||
| 				writeLine = function(str) | ||||
| 					c = c .. str .. '\n' | ||||
| 				end, | ||||
| 				flush = function() | ||||
| 					node.contents = c | ||||
| 					node.size = #c | ||||
| 				end, | ||||
| 				close = function() | ||||
| 					node.contents = c | ||||
| 					node.size = #c | ||||
| 					c = nil | ||||
| 				end, | ||||
| 			} | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	if fl == 'r' then | ||||
| 		if node.mountPoint ~= fn then | ||||
| 			return | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 kepler155c@gmail.com
					kepler155c@gmail.com