Skip to content

Commit 4bb394a

Browse files
authored
Merge pull request #3 from desdic/20240227func
feature: Added function to make it easier to make a UI
2 parents dcdfd28 + a40ab2f commit 4bb394a

File tree

2 files changed

+58
-25
lines changed

2 files changed

+58
-25
lines changed

README.md

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -127,29 +127,33 @@ Correct. I'm not planning on creating a UI but if you really want one you can ea
127127
Example using telescope
128128

129129
```lua
130+
local mindex = 0
131+
local generate_finder = function()
132+
mindex = 0
133+
return require("telescope.finders").new_table({
134+
results = require("marlin").get_indexes(),
135+
entry_maker = function(entry)
136+
mindex = mindex + 1
137+
return {
138+
value = entry,
139+
ordinal = mindex .. ":" .. entry.filename,
140+
lnum = entry.row,
141+
col = entry.col + 1,
142+
filename = entry.filename,
143+
display = mindex .. ":" .. entry.filename .. ":" .. entry.row .. ":" .. entry.col,
144+
}
145+
end,
146+
})
147+
end
148+
130149
vim.keymap.set("n", "<Leader>fx", function()
131150
local conf = require("telescope.config").values
132151
local action_state = require("telescope.actions.state")
133-
local results = require("marlin").get_indexes()
134152

135-
local index = 0
136153
require("telescope.pickers")
137154
.new({}, {
138155
prompt_title = "Marlin",
139-
finder = require("telescope.finders").new_table({
140-
results = results,
141-
entry_maker = function(entry)
142-
index = index + 1
143-
return {
144-
value = entry,
145-
ordinal = index ..":" .. entry.filename,
146-
lnum = entry.row,
147-
col = entry.col + 1,
148-
filename = entry.filename,
149-
display = index .. ":" .. entry.filename .. ":" .. entry.row .. ":" .. entry.col,
150-
}
151-
end,
152-
}),
156+
finder = generate_finder(),
153157
previewer = conf.grep_previewer({}),
154158
sorter = conf.generic_sorter({}),
155159
attach_mappings = function(_, map)
@@ -159,6 +163,18 @@ Example using telescope
159163
require("marlin").remove(selection.filename)
160164
end)
161165
end)
166+
map("i", "+", function(bufnr)
167+
local current_picker = action_state.get_current_picker(bufnr)
168+
local selection = current_picker:get_selection()
169+
require("marlin").move_up(selection.filename)
170+
current_picker:refresh(generate_finder(), {})
171+
end)
172+
map("i", "-", function(bufnr)
173+
local current_picker = action_state.get_current_picker(bufnr)
174+
local selection = current_picker:get_selection()
175+
require("marlin").move_down(selection.filename)
176+
current_picker:refresh(generate_finder(), {})
177+
end)
162178
return true
163179
end,
164180
})

lua/marlin/init.lua

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
---@field add fun(filename?: string): nil -- add file
2929
---@field cur_index fun(): number -- get index of current file
3030
---@field get_indexes fun(): marlin.file[] -- get indexes
31-
---@field move fun(table: marlin.file[], direction: marlin.movefun): nil
32-
---@field move_down fun(): nil -- move index down
33-
---@field move_up fun(): nil -- move index up
31+
---@field move fun(table: marlin.file[], direction: marlin.movefun, filename?: string): nil
32+
---@field move_down fun(filename?: string): nil -- move index down
33+
---@field move_up fun(filename?: string): nil -- move index up
3434
---@field num_indexes fun(): number -- get number of indexes
3535
---@field open fun(index: number, opts: any?): nil -- open index
3636
---@field open_all fun(): nil
@@ -182,17 +182,34 @@ marlin.get_indexes = function()
182182
return marlin.project_files["files"]
183183
end
184184

185+
--- Return index of a filename
186+
---
187+
---@param filename string
188+
---
189+
---@return number|nil returns index of file or nil
190+
---
191+
---@usage `require("marlin").get_fileindex("/full/path/to/filename")`
192+
marlin.get_fileindex = function(filename)
193+
if filename then
194+
for idx, data in ipairs(marlin.project_files["files"]) do
195+
if data["filename"] == filename then
196+
return idx
197+
end
198+
end
199+
end
200+
return nil
201+
end
185202
--- Generic move function for moving indexes
186203
---
187204
---@param table string[] index table
188205
---@param direction marlin.movefun
189-
marlin.move = function(table, direction)
206+
marlin.move = function(table, direction, filename)
190207
local indexes = marlin.num_indexes()
191208
if indexes < 2 then
192209
return
193210
end
194211

195-
local cur_index = marlin.cur_index()
212+
local cur_index = marlin.get_fileindex(filename) or marlin.cur_index()
196213
direction(table, cur_index, indexes)
197214
end
198215

@@ -217,15 +234,15 @@ end
217234
--- Move current index down
218235
---
219236
---@usage `require('marlin').move_down()`
220-
marlin.move_down = function()
221-
marlin.move(marlin.project_files["files"], down)
237+
marlin.move_down = function(filename)
238+
marlin.move(marlin.project_files["files"], down, filename)
222239
end
223240

224241
--- Move current index up
225242
---
226243
---@usage `require('marlin').move_up()`
227-
marlin.move_up = function()
228-
marlin.move(marlin.project_files["files"], up)
244+
marlin.move_up = function(filename)
245+
marlin.move(marlin.project_files["files"], up, filename)
229246
end
230247

231248
--- Return number of indexes for current project

0 commit comments

Comments
 (0)