aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/smartopenselected.lua48
1 files changed, 48 insertions, 0 deletions
diff --git a/plugins/smartopenselected.lua b/plugins/smartopenselected.lua
new file mode 100644
index 0000000..dfdb96d
--- /dev/null
+++ b/plugins/smartopenselected.lua
@@ -0,0 +1,48 @@
+-- mod-version:3
+local core = require "core"
+local command = require "core.command"
+local keymap = require "core.keymap"
+local common = require "core.common"
+local contextmenu = require "plugins.contextmenu"
+
+
+command.add("core.docview!", {
+ ["smart-open-selected:smart-open-selected"] = function(dv)
+ local doc = dv.doc
+ if not doc:has_selection() then
+ core.error("No text selected")
+ return
+ end
+
+ local text_orig = doc:get_text(doc:get_selection())
+ text_orig = text_orig:match( "^%s*(.-)%s*$" )
+
+ -- transform java/python imports to paths
+ local text_path, num = text_orig:gsub("[.]", PATHSEP)
+
+ -- keep the last . in case the path contains a file extension
+ local text_keep_extension, num = text_orig:gsub("[.]", PATHSEP, num - 1)
+
+ -- trim whitespace from the ends
+
+ for dir, item in core.get_project_files() do
+ if item.type == "file" and (
+ string.find(item.filename, text_orig)
+ or string.find(item.filename, text_path)
+ or string.find(item.filename, text_keep_extension)
+ ) then
+ local path = (dir == core.project_dir and "" or dir .. PATHSEP)
+ local filepath = common.home_encode(path .. item.filename)
+ core.root_view:open_doc(core.open_doc(common.home_expand(filepath)))
+ end
+ end
+ end,
+})
+
+
+contextmenu:register("core.docview", {
+ { text = "Smart Open Selection", command = "smart-open-selected:smart-open-selected" }
+})
+
+
+keymap.add { ["ctrl+shift+alt+p"] = "smart-open-selected:smart-open-selected" }