aboutsummaryrefslogtreecommitdiff
-- 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" }