From 438106e7b4594987feb351de9f76f94ed9bf5d73 Mon Sep 17 00:00:00 2001 From: mitchell <70453897+667e-11@users.noreply.github.com> Date: Wed, 18 Jun 2008 18:00:40 -0400 Subject: Added modules browser to the Project Manager. --- core/ext/pm/modules_browser.lua | 104 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 core/ext/pm/modules_browser.lua (limited to 'core/ext/pm/modules_browser.lua') diff --git a/core/ext/pm/modules_browser.lua b/core/ext/pm/modules_browser.lua new file mode 100644 index 00000000..ee712916 --- /dev/null +++ b/core/ext/pm/modules_browser.lua @@ -0,0 +1,104 @@ +-- Copyright 2007-2008 Mitchell mitchellcaladbolg.net. See LICENSE. + +--- +-- Modules browser for the Textadept project manager. +-- It is enabled with the prefix 'modules' in the project manager entry field. +module('textadept.pm.browsers.modules', package.seeall) + +function matches(entry_text) + return entry_text:sub(1, 7) == 'modules' +end + +local function modify_path(path) + table.remove(path, 1) -- 'modules' entry_text + table.insert(path, 1, _HOME..'/modules') + return path +end + +function get_contents_for(full_path) + full_path = modify_path(full_path) + local dirpath = table.concat(full_path, '/') + local p = io.popen('ls -1p "'..dirpath..'"') + local out = p:read('*all') + p:close() + if #out == 0 then + error('No such directory: '..dirpath) + return {} + end + local dir = {} + for entry in out:gmatch('[^\n]+') do + if entry:sub(-1, -1) == '/' then + local name = entry:sub(1, -2) + dir[name] = { + parent = true, + display_text = name, + pixbuf = 'gtk-directory' + } + else + dir[entry] = { display_text = entry, pixbuf = '' } + end + end + return dir +end + +function perform_action(selected_item) + selected_item = modify_path(selected_item) + local filepath = table.concat(selected_item, '/') + textadept.io.open(filepath) + view:focus() +end + +function get_context_menu(selected_item) + return { + '_New Module', '_Delete Module', 'separator', + 'Configure _MIME Types', 'Configure _Key Commands', 'separator', + '_Reload Modules' + } +end + +function perform_menu_action(menu_item, selected_item) + if menu_item == 'New Module' then + local status, module_name = cocoa_dialog( 'inputbox', { + ['title'] = 'Module Name', + ['informative-text'] = 'Module name:', + ['button2'] = 'gtk-cancel' + } ):match('^(%d)%s+([^\n]+)%s+$') + if status ~= '1' then return end + local status, lang_name = cocoa_dialog( 'inputbox', { + ['title'] = 'Language Name', + ['informative-text'] = 'Language name:', + ['button2'] = 'gtk-cancel' + } ):match('^(%d)%s+([^\n]+)%s+$') + if status ~= '1' then return end + status = os.execute('cd "'.._HOME..'/modules"; '.. + './new "'..module_name..'" "'..lang_name..'"') + if status ~= 0 then + cocoa_dialog( 'msgbox', { + ['title'] = 'Error', + ['informative-text'] = 'An error occured. It is likely the module '.. + 'already exists.' + } ) + return + end + elseif menu_item == 'Delete Module' then + local module_name = selected_item[2] + if cocoa_dialog( 'yesno-msgbox', { + ['title'] = 'Confirm Delete', + ['informative-text'] = 'Are you sure you want to delete the "'.. + module_name..'" module?', + ['no-cancel'] = true, + ['no-newline'] = true + } ) == '1' then + os.execute('rm -r "'.._HOME..'/modules/'..module_name..'"') + else + return + end + elseif menu_item == 'Configure MIME Types' then + textadept.io.open(_HOME..'/core/ext/mime_types.lua') + elseif menu_item == 'Configure Key Commands' then + textadept.io.open(_HOME..'/core/ext/key_commands.lua') + elseif menu_item == 'Reload Modules' then + textadept.reset() + end + textadept.pm.activate() +end -- cgit v1.2.3