|
1 | 1 | local config = require("nvim-possession.config") |
2 | 2 | local ui = require("nvim-possession.ui") |
3 | 3 | local utils = require("nvim-possession.utils") |
| 4 | +local sort = require("nvim-possession.sorting") |
4 | 5 |
|
5 | 6 | local M = {} |
6 | 7 |
|
@@ -45,6 +46,7 @@ M.setup = function(user_opts) |
45 | 46 | end |
46 | 47 | end |
47 | 48 | end |
| 49 | + fzf.config.set_action_helpstr(M.new, "new-session") |
48 | 50 |
|
49 | 51 | ---update loaded session with current status |
50 | 52 | M.update = function() |
@@ -125,23 +127,51 @@ M.setup = function(user_opts) |
125 | 127 | return |
126 | 128 | end |
127 | 129 |
|
128 | | - return fzf.files({ |
| 130 | + local function list_sessions(fzf_cb) |
| 131 | + local sessions = {} |
| 132 | + for name, type in vim.fs.dir(user_config.sessions.sessions_path) do |
| 133 | + if type == "file" then |
| 134 | + local stat = vim.uv.fs_stat(user_config.sessions.sessions_path .. name) |
| 135 | + if stat then |
| 136 | + table.insert(sessions, { name = name, mtime = stat.mtime }) |
| 137 | + end |
| 138 | + end |
| 139 | + end |
| 140 | + table.sort(sessions, function(a, b) |
| 141 | + if type(user_config.sort) == "function" then |
| 142 | + return user_config.sort(a, b) |
| 143 | + else |
| 144 | + return sort.alpha_sort(a, b) |
| 145 | + end |
| 146 | + end) |
| 147 | + for _, sess in ipairs(sessions) do |
| 148 | + fzf_cb(sess.name) |
| 149 | + end |
| 150 | + fzf_cb() |
| 151 | + end |
| 152 | + |
| 153 | + local opts = { |
129 | 154 | user_config = user_config, |
130 | 155 | prompt = user_config.sessions.sessions_icon .. user_config.sessions.sessions_prompt, |
131 | 156 | cwd_prompt = false, |
132 | 157 | file_icons = false, |
133 | 158 | git_icons = false, |
134 | 159 | cwd_header = false, |
| 160 | + no_header = true, |
135 | 161 |
|
136 | 162 | previewer = ui.session_previewer, |
137 | 163 | hls = user_config.fzf_hls, |
138 | 164 | winopts = user_config.fzf_winopts, |
139 | 165 | cwd = user_config.sessions.sessions_path, |
140 | 166 | actions = { |
141 | 167 | ["enter"] = M.load, |
142 | | - ["ctrl-x"] = { M.delete_selected, fzf.actions.resume }, |
| 168 | + ["ctrl-x"] = { M.delete_selected, fzf.actions.resume, header = "delete session" }, |
| 169 | + ["ctrl-n"] = { fn = M.new, header = "new session" }, |
143 | 170 | }, |
144 | | - }) |
| 171 | + } |
| 172 | + opts = require("fzf-lua.config").normalize_opts(opts, {}) |
| 173 | + opts = require("fzf-lua.core").set_header(opts, { "actions" }) |
| 174 | + fzf.fzf_exec(list_sessions, opts) |
145 | 175 | end |
146 | 176 |
|
147 | 177 | if user_config.autoload and vim.fn.argc() == 0 then |
|
0 commit comments