From 60167d9b185d30f73cf6eeafd92d1eb1701240d5 Mon Sep 17 00:00:00 2001 From: Aaron Hallaert Date: Sat, 4 Sep 2021 20:44:40 +0200 Subject: [PATCH 1/3] Add mark functionality per git branch --- lua/harpoon/init.lua | 19 +++++++++++-------- lua/harpoon/utils.lua | 29 +++++++++++++++-------------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/lua/harpoon/init.lua b/lua/harpoon/init.lua index cc9d80f..53f90e9 100644 --- a/lua/harpoon/init.lua +++ b/lua/harpoon/init.lua @@ -58,12 +58,12 @@ end local function ensure_correct_config(config) log.trace("_ensure_correct_config()") local projects = config.projects - if projects[vim.loop.cwd()] == nil then + if projects[utils.mark_config_key()] == nil then log.debug( "ensure_correct_config(): No config found for:", - vim.loop.cwd() + utils.mark_config_key() ) - projects[vim.loop.cwd()] = { + projects[utils.mark_config_key()] = { mark = { marks = {}, }, @@ -73,16 +73,19 @@ local function ensure_correct_config(config) } end - local proj = projects[vim.loop.cwd()] + local proj = projects[utils.mark_config_key()] if proj.mark == nil then - log.debug("ensure_correct_config(): No marks found for", vim.loop.cwd()) + log.debug( + "ensure_correct_config(): No marks found for", + utils.mark_config_key() + ) proj.mark = { marks = {} } end if proj.term == nil then log.debug( "ensure_correct_config(): No terminal commands found for", - vim.loop.cwd() + utils.mark_config_key() ) proj.term = { cmds = {} } end @@ -230,12 +233,12 @@ end function M.get_term_config() log.trace("get_term_config()") - return ensure_correct_config(HarpoonConfig).projects[vim.loop.cwd()].term + return ensure_correct_config(HarpoonConfig).projects[utils.project_key].term end function M.get_mark_config() log.trace("get_mark_config()") - return ensure_correct_config(HarpoonConfig).projects[vim.loop.cwd()].mark + return ensure_correct_config(HarpoonConfig).projects[utils.mark_config_key()].mark end function M.get_menu_config() diff --git a/lua/harpoon/utils.lua b/lua/harpoon/utils.lua index b2a406b..1eab2a9 100644 --- a/lua/harpoon/utils.lua +++ b/lua/harpoon/utils.lua @@ -4,10 +4,15 @@ local Job = require("plenary.job") local M = {} +M.project_key = vim.loop.cwd() M.data_path = data_path +function M.mark_config_key() + return string.gsub(vim.loop.cwd() .. '-' .. vim.fn.system('git branch --show-current'), "\n", "") +end + function M.normalize_path(item) - return Path:new(item):make_relative(vim.loop.cwd()) + return Path:new(item):make_relative(M.project_key) end function M.get_os_command_output(cmd, cwd) @@ -17,24 +22,20 @@ function M.get_os_command_output(cmd, cwd) end local command = table.remove(cmd, 1) local stderr = {} - local stdout, ret = Job - :new({ - command = command, - args = cmd, - cwd = cwd, - on_stderr = function(_, data) - table.insert(stderr, data) - end, - }) - :sync() + local stdout, ret = Job:new({ + command = command, + args = cmd, + cwd = cwd, + on_stderr = function(_, data) + table.insert(stderr, data) + end + }):sync() return stdout, ret, stderr end function M.split_string(str, delimiter) local result = {} - for match in (str .. delimiter):gmatch("(.-)" .. delimiter) do - table.insert(result, match) - end + for match in (str .. delimiter):gmatch("(.-)" .. delimiter) do table.insert(result, match) end return result end From 968b93cf7638083910b221e9d00d6878b87e0728 Mon Sep 17 00:00:00 2001 From: Aaron Hallaert Date: Thu, 28 Oct 2021 18:18:37 +0200 Subject: [PATCH 2/3] Add config to mark git branch --- lua/harpoon/init.lua | 22 +++++++++++++++------- lua/harpoon/utils.lua | 6 ++++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/lua/harpoon/init.lua b/lua/harpoon/init.lua index 53f90e9..b1d7d02 100644 --- a/lua/harpoon/init.lua +++ b/lua/harpoon/init.lua @@ -46,6 +46,14 @@ local function merge_table_impl(t1, t2) end end +local function mark_config_key() + if HarpoonConfig.mark_branch then + return utils.branch_key() + else + return utils.project_key + end +end + local function merge_tables(...) log.trace("_merge_tables()") local out = {} @@ -58,12 +66,12 @@ end local function ensure_correct_config(config) log.trace("_ensure_correct_config()") local projects = config.projects - if projects[utils.mark_config_key()] == nil then + if projects[mark_config_key()] == nil then log.debug( "ensure_correct_config(): No config found for:", - utils.mark_config_key() + mark_config_key() ) - projects[utils.mark_config_key()] = { + projects[mark_config_key()] = { mark = { marks = {}, }, @@ -73,11 +81,11 @@ local function ensure_correct_config(config) } end - local proj = projects[utils.mark_config_key()] + local proj = projects[mark_config_key()] if proj.mark == nil then log.debug( "ensure_correct_config(): No marks found for", - utils.mark_config_key() + mark_config_key() ) proj.mark = { marks = {} } end @@ -85,7 +93,7 @@ local function ensure_correct_config(config) if proj.term == nil then log.debug( "ensure_correct_config(): No terminal commands found for", - utils.mark_config_key() + mark_config_key() ) proj.term = { cmds = {} } end @@ -238,7 +246,7 @@ end function M.get_mark_config() log.trace("get_mark_config()") - return ensure_correct_config(HarpoonConfig).projects[utils.mark_config_key()].mark + return ensure_correct_config(HarpoonConfig).projects[mark_config_key()].mark end function M.get_menu_config() diff --git a/lua/harpoon/utils.lua b/lua/harpoon/utils.lua index 1eab2a9..cd897d8 100644 --- a/lua/harpoon/utils.lua +++ b/lua/harpoon/utils.lua @@ -4,7 +4,9 @@ local Job = require("plenary.job") local M = {} -M.project_key = vim.loop.cwd() +local project_key = vim.loop.cwd() +M.project_key = project_key +M.branch_key = vim.loop.cwd() M.data_path = data_path function M.mark_config_key() @@ -12,7 +14,7 @@ function M.mark_config_key() end function M.normalize_path(item) - return Path:new(item):make_relative(M.project_key) + return Path:new(item):make_relative(M.branch_key) end function M.get_os_command_output(cmd, cwd) From accf7ef4efb405f2ec11408b7781a1619cfcc574 Mon Sep 17 00:00:00 2001 From: Aaron Hallaert Date: Wed, 10 Nov 2021 09:32:47 +0100 Subject: [PATCH 3/3] Change project_key to function --- lua/harpoon/init.lua | 14 +++++--------- lua/harpoon/utils.lua | 39 ++++++++++++++++++++++++--------------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/lua/harpoon/init.lua b/lua/harpoon/init.lua index b1d7d02..172dfa9 100644 --- a/lua/harpoon/init.lua +++ b/lua/harpoon/init.lua @@ -50,7 +50,7 @@ local function mark_config_key() if HarpoonConfig.mark_branch then return utils.branch_key() else - return utils.project_key + return utils.project_key() end end @@ -72,9 +72,7 @@ local function ensure_correct_config(config) mark_config_key() ) projects[mark_config_key()] = { - mark = { - marks = {}, - }, + mark = { marks = {} }, term = { cmds = {}, }, @@ -102,9 +100,7 @@ local function ensure_correct_config(config) for idx, mark in pairs(marks) do if type(mark) == "string" then - mark = { - filename = mark, - } + mark = { filename = mark } marks[idx] = mark end @@ -197,7 +193,7 @@ function M.refresh_projects_b4update() cache_config ) -- save current runtime version of our project config for merging back in later - local cwd = vim.loop.cwd() + local cwd = mark_config_key() local current_p_config = { projects = { [cwd] = ensure_correct_config(HarpoonConfig).projects[cwd], @@ -241,7 +237,7 @@ end function M.get_term_config() log.trace("get_term_config()") - return ensure_correct_config(HarpoonConfig).projects[utils.project_key].term + return ensure_correct_config(HarpoonConfig).projects[utils.project_key()].term end function M.get_mark_config() diff --git a/lua/harpoon/utils.lua b/lua/harpoon/utils.lua index cd897d8..6bf6510 100644 --- a/lua/harpoon/utils.lua +++ b/lua/harpoon/utils.lua @@ -4,17 +4,22 @@ local Job = require("plenary.job") local M = {} -local project_key = vim.loop.cwd() -M.project_key = project_key -M.branch_key = vim.loop.cwd() M.data_path = data_path -function M.mark_config_key() - return string.gsub(vim.loop.cwd() .. '-' .. vim.fn.system('git branch --show-current'), "\n", "") +function M.project_key() + return vim.loop.cwd() +end + +function M.branch_key() + return string.gsub( + vim.loop.cwd() .. "-" .. vim.fn.system("git branch --show-current"), + "\n", + "" + ) end function M.normalize_path(item) - return Path:new(item):make_relative(M.branch_key) + return Path:new(item):make_relative(M.project_key()) end function M.get_os_command_output(cmd, cwd) @@ -24,20 +29,24 @@ function M.get_os_command_output(cmd, cwd) end local command = table.remove(cmd, 1) local stderr = {} - local stdout, ret = Job:new({ - command = command, - args = cmd, - cwd = cwd, - on_stderr = function(_, data) - table.insert(stderr, data) - end - }):sync() + local stdout, ret = Job + :new({ + command = command, + args = cmd, + cwd = cwd, + on_stderr = function(_, data) + table.insert(stderr, data) + end, + }) + :sync() return stdout, ret, stderr end function M.split_string(str, delimiter) local result = {} - for match in (str .. delimiter):gmatch("(.-)" .. delimiter) do table.insert(result, match) end + for match in (str .. delimiter):gmatch("(.-)" .. delimiter) do + table.insert(result, match) + end return result end