2019-12-28 12:16:32 +01:00
|
|
|
local core = require "core"
|
|
|
|
local common = require "core.common"
|
|
|
|
local command = require "core.command"
|
|
|
|
local keymap = require "core.keymap"
|
|
|
|
local LogView = require "core.logview"
|
|
|
|
|
|
|
|
|
2020-03-25 23:44:59 +01:00
|
|
|
local fullscreen = false
|
|
|
|
|
2020-12-19 23:53:29 +01:00
|
|
|
local function suggest_directory(text)
|
2020-12-20 00:31:49 +01:00
|
|
|
text = common.home_expand(text)
|
2021-02-16 22:52:55 +01:00
|
|
|
return common.home_encode_list(text == "" and core.recent_projects or common.dir_path_suggest(text))
|
2020-12-19 16:31:42 +01:00
|
|
|
end
|
|
|
|
|
2019-12-28 12:16:32 +01:00
|
|
|
command.add(nil, {
|
|
|
|
["core:quit"] = function()
|
|
|
|
core.quit()
|
|
|
|
end,
|
|
|
|
|
2020-12-10 12:44:01 +01:00
|
|
|
["core:restart"] = function()
|
|
|
|
core.restart()
|
|
|
|
end,
|
|
|
|
|
2019-12-28 12:16:32 +01:00
|
|
|
["core:force-quit"] = function()
|
|
|
|
core.quit(true)
|
|
|
|
end,
|
|
|
|
|
2020-03-25 23:44:59 +01:00
|
|
|
["core:toggle-fullscreen"] = function()
|
|
|
|
fullscreen = not fullscreen
|
2020-04-07 19:48:57 +02:00
|
|
|
system.set_window_mode(fullscreen and "fullscreen" or "normal")
|
2021-04-12 19:05:30 +02:00
|
|
|
core.show_title_bar(not fullscreen)
|
|
|
|
core.title_view:configure_hit_test(not fullscreen)
|
2020-03-25 23:44:59 +01:00
|
|
|
end,
|
|
|
|
|
2019-12-28 12:16:32 +01:00
|
|
|
["core:reload-module"] = function()
|
|
|
|
core.command_view:enter("Reload Module", function(text, item)
|
|
|
|
local text = item and item.text or text
|
|
|
|
core.reload_module(text)
|
|
|
|
core.log("Reloaded module %q", text)
|
|
|
|
end, function(text)
|
|
|
|
local items = {}
|
|
|
|
for name in pairs(package.loaded) do
|
|
|
|
table.insert(items, name)
|
|
|
|
end
|
|
|
|
return common.fuzzy_match(items, text)
|
|
|
|
end)
|
|
|
|
end,
|
|
|
|
|
2020-05-30 10:11:42 +02:00
|
|
|
["core:find-command"] = function()
|
2019-12-28 12:16:32 +01:00
|
|
|
local commands = command.get_all_valid()
|
|
|
|
core.command_view:enter("Do Command", function(text, item)
|
|
|
|
if item then
|
|
|
|
command.perform(item.command)
|
|
|
|
end
|
|
|
|
end, function(text)
|
|
|
|
local res = common.fuzzy_match(commands, text)
|
|
|
|
for i, name in ipairs(res) do
|
|
|
|
res[i] = {
|
|
|
|
text = command.prettify_name(name),
|
|
|
|
info = keymap.get_binding(name),
|
|
|
|
command = name,
|
|
|
|
}
|
|
|
|
end
|
|
|
|
return res
|
|
|
|
end)
|
|
|
|
end,
|
|
|
|
|
2020-05-30 10:11:42 +02:00
|
|
|
["core:find-file"] = function()
|
2021-05-25 23:25:56 +02:00
|
|
|
if core.project_files_limit then
|
|
|
|
return command.perform "core:open-file"
|
|
|
|
end
|
2020-11-16 23:52:39 +01:00
|
|
|
local files = {}
|
2020-12-27 18:28:21 +01:00
|
|
|
for dir, item in core.get_project_files() do
|
2020-11-16 23:52:39 +01:00
|
|
|
if item.type == "file" then
|
2021-05-13 14:57:55 +02:00
|
|
|
table.insert(files, common.home_encode(dir .. PATHSEP .. item.filename))
|
2020-11-16 23:52:39 +01:00
|
|
|
end
|
|
|
|
end
|
2020-05-06 15:46:56 +02:00
|
|
|
core.command_view:enter("Open File From Project", function(text, item)
|
2021-01-03 15:22:47 +01:00
|
|
|
text = item and item.text or text
|
2020-12-27 11:32:52 +01:00
|
|
|
core.root_view:open_doc(core.open_doc(common.home_expand(text)))
|
2019-12-28 12:16:32 +01:00
|
|
|
end, function(text)
|
2021-01-03 15:22:47 +01:00
|
|
|
return common.fuzzy_match_with_recents(files, core.visited_files, text)
|
2019-12-28 12:16:32 +01:00
|
|
|
end)
|
|
|
|
end,
|
|
|
|
|
2020-05-06 15:46:56 +02:00
|
|
|
["core:new-doc"] = function()
|
|
|
|
core.root_view:open_doc(core.open_doc())
|
|
|
|
end,
|
|
|
|
|
2019-12-28 12:16:32 +01:00
|
|
|
["core:open-file"] = function()
|
2021-04-25 20:58:56 +02:00
|
|
|
local view = core.active_view
|
2021-05-13 12:07:56 +02:00
|
|
|
if view.doc and view.doc.filename then
|
|
|
|
core.command_view:set_text(common.home_encode(view.doc.filename))
|
2021-04-25 20:58:56 +02:00
|
|
|
end
|
2021-03-01 14:57:28 +01:00
|
|
|
core.command_view:enter("Open File", function(text, item)
|
|
|
|
local filename = common.home_expand(item and item.text or text)
|
|
|
|
local info = system.get_file_info(filename)
|
|
|
|
print('file', filename, common.serialize(info))
|
|
|
|
if info then
|
|
|
|
if info.type == "file" then
|
|
|
|
core.add_project_file(filename)
|
|
|
|
print('done add_project_file')
|
|
|
|
core.root_view:open_doc(core.open_doc(filename))
|
|
|
|
print('done open_doc')
|
|
|
|
else
|
|
|
|
core.add_project_directory(filename)
|
|
|
|
end
|
|
|
|
end
|
2020-12-20 00:31:49 +01:00
|
|
|
end, function (text)
|
2021-02-16 22:52:55 +01:00
|
|
|
return common.home_encode_list(common.path_suggest(common.home_expand(text)))
|
2021-05-05 08:04:51 +02:00
|
|
|
end, nil, function(text)
|
2021-05-10 15:08:56 +02:00
|
|
|
local filename = common.home_expand(text)
|
|
|
|
local path_stat, err = system.get_file_info(filename)
|
2021-05-05 08:04:51 +02:00
|
|
|
if err then
|
2021-05-10 15:08:56 +02:00
|
|
|
if err:find("No such file", 1, true) then
|
|
|
|
-- check if the containing directory exists
|
|
|
|
local dirname = common.dirname(filename)
|
|
|
|
local dir_stat = dirname and system.get_file_info(dirname)
|
|
|
|
if not dirname or (dir_stat and dir_stat.type == 'dir') then
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
core.error("Cannot open file %s: %s", text, err)
|
2021-05-24 15:57:02 +02:00
|
|
|
elseif path_stat.type == 'dir' then
|
2021-05-10 15:08:56 +02:00
|
|
|
core.error("Cannot open %s, is a folder", text)
|
2021-05-05 08:04:51 +02:00
|
|
|
else
|
|
|
|
return true
|
|
|
|
end
|
2020-12-20 00:31:49 +01:00
|
|
|
end)
|
2019-12-28 12:16:32 +01:00
|
|
|
end,
|
|
|
|
|
|
|
|
["core:open-log"] = function()
|
|
|
|
local node = core.root_view:get_active_node()
|
|
|
|
node:add_view(LogView())
|
|
|
|
end,
|
2020-05-06 15:46:56 +02:00
|
|
|
|
|
|
|
["core:open-user-module"] = function()
|
2020-12-10 17:56:53 +01:00
|
|
|
local user_module_doc = core.open_doc(USERDIR .. "/init.lua")
|
|
|
|
if not user_module_doc then return end
|
|
|
|
core.root_view:open_doc(user_module_doc)
|
2020-05-06 15:46:56 +02:00
|
|
|
end,
|
|
|
|
|
|
|
|
["core:open-project-module"] = function()
|
2020-05-17 17:59:19 +02:00
|
|
|
local filename = ".lite_project.lua"
|
2020-05-06 15:46:56 +02:00
|
|
|
if system.get_file_info(filename) then
|
|
|
|
core.root_view:open_doc(core.open_doc(filename))
|
|
|
|
else
|
|
|
|
local doc = core.open_doc()
|
|
|
|
core.root_view:open_doc(doc)
|
|
|
|
doc:save(filename)
|
|
|
|
end
|
|
|
|
end,
|
2020-12-08 16:57:24 +01:00
|
|
|
|
2020-12-10 17:56:53 +01:00
|
|
|
["core:change-project-folder"] = function()
|
2021-01-03 15:22:47 +01:00
|
|
|
core.command_view:enter("Change Project Folder", function(text, item)
|
|
|
|
text = system.absolute_path(common.home_expand(item and item.text or text))
|
|
|
|
if text == core.project_dir then return end
|
2020-12-08 16:57:24 +01:00
|
|
|
local path_stat = system.get_file_info(text)
|
|
|
|
if not path_stat or path_stat.type ~= 'dir' then
|
|
|
|
core.error("Cannot open folder %q", text)
|
|
|
|
return
|
|
|
|
end
|
2021-03-18 15:46:44 +01:00
|
|
|
core.confirm_close_all(core.open_folder_project, text)
|
2020-12-19 16:31:42 +01:00
|
|
|
end, suggest_directory)
|
2020-12-08 16:57:24 +01:00
|
|
|
end,
|
2020-12-10 17:56:53 +01:00
|
|
|
|
|
|
|
["core:open-project-folder"] = function()
|
2021-01-03 15:22:47 +01:00
|
|
|
core.command_view:enter("Open Project", function(text, item)
|
|
|
|
text = common.home_expand(item and item.text or text)
|
2020-12-10 17:56:53 +01:00
|
|
|
local path_stat = system.get_file_info(text)
|
|
|
|
if not path_stat or path_stat.type ~= 'dir' then
|
|
|
|
core.error("Cannot open folder %q", text)
|
|
|
|
return
|
|
|
|
end
|
|
|
|
system.exec(string.format("%q %q", EXEFILE, text))
|
2020-12-19 16:31:42 +01:00
|
|
|
end, suggest_directory)
|
2020-12-10 17:56:53 +01:00
|
|
|
end,
|
2020-12-27 11:32:52 +01:00
|
|
|
|
|
|
|
["core:add-directory"] = function()
|
2021-03-01 14:57:28 +01:00
|
|
|
core.command_view:enter("Add Directory", function(text, item)
|
|
|
|
text = common.home_expand(item and item.text or text)
|
2020-12-27 11:32:52 +01:00
|
|
|
local path_stat, err = system.get_file_info(text)
|
|
|
|
if not path_stat then
|
|
|
|
core.error("cannot open %q: %s", text, err)
|
|
|
|
return
|
|
|
|
elseif path_stat.type ~= 'dir' then
|
|
|
|
core.error("%q is not a directory", text)
|
|
|
|
return
|
|
|
|
end
|
|
|
|
core.add_project_directory(system.absolute_path(text))
|
2020-12-27 18:33:03 +01:00
|
|
|
-- TODO: add the name of directory to prioritize
|
2020-12-30 14:31:36 +01:00
|
|
|
core.reschedule_project_scan()
|
2020-12-27 11:32:52 +01:00
|
|
|
end, suggest_directory)
|
|
|
|
end,
|
|
|
|
|
2020-12-28 15:51:16 +01:00
|
|
|
["core:remove-directory"] = function()
|
|
|
|
local dir_list = {}
|
|
|
|
local n = #core.project_directories
|
2021-01-03 12:02:07 +01:00
|
|
|
for i = n, 2, -1 do
|
2020-12-28 15:51:16 +01:00
|
|
|
dir_list[n - i + 1] = core.project_directories[i].name
|
|
|
|
end
|
2021-01-03 15:22:47 +01:00
|
|
|
core.command_view:enter("Remove Directory", function(text, item)
|
2021-01-03 23:52:02 +01:00
|
|
|
text = common.home_expand(item and item.text or text)
|
2020-12-28 15:51:16 +01:00
|
|
|
if not core.remove_project_directory(text) then
|
2021-01-03 15:22:47 +01:00
|
|
|
core.error("No directory %q to be removed", text)
|
2020-12-28 15:51:16 +01:00
|
|
|
end
|
|
|
|
end, function(text)
|
|
|
|
text = common.home_expand(text)
|
2021-02-16 22:52:55 +01:00
|
|
|
return common.home_encode_list(common.dir_list_suggest(text, dir_list))
|
2020-12-28 15:51:16 +01:00
|
|
|
end)
|
|
|
|
end,
|
2019-12-28 12:16:32 +01:00
|
|
|
})
|