mirror of
https://github.com/jiriks74/presence.nvim
synced 2024-12-28 11:02:34 +01:00
parent
84bf65287f
commit
11adcec0db
2 changed files with 28 additions and 21 deletions
14
README.md
14
README.md
|
@ -44,13 +44,13 @@ require("presence"):setup({
|
|||
buttons = true, -- Configure Rich Presence button(s), either a boolean to enable/disable, a static table (`{{ label = "<label>", url = "<url>" }, ...}`, or a function(buffer: string, repo_url: string|nil): table)
|
||||
|
||||
-- Rich Presence text options
|
||||
editing_text = "Editing %s", -- Format string rendered when an editable file is loaded in the buffer
|
||||
file_explorer_text = "Browsing %s", -- Format string rendered when browsing a file explorer
|
||||
git_commit_text = "Committing changes", -- Format string rendered when commiting changes in git
|
||||
plugin_manager_text = "Managing plugins", -- Format string rendered when managing plugins
|
||||
reading_text = "Reading %s", -- Format string rendered when a read-only or unmodifiable file is loaded in the buffer
|
||||
workspace_text = "Working on %s", -- Workspace format string (either string or function(git_project_name: string|nil, buffer: string): string)
|
||||
line_number_text = "Line %s out of %s", -- Line number format string (for when enable_line_number is set to true)
|
||||
editing_text = "Editing %s", -- Format string rendered when an editable file is loaded in the buffer (either string or function(filename: string): string)
|
||||
file_explorer_text = "Browsing %s", -- Format string rendered when browsing a file explorer (either string or function(file_explorer_name: string): string)
|
||||
git_commit_text = "Committing changes", -- Format string rendered when committing changes in git (either string or function(filename: string): string)
|
||||
plugin_manager_text = "Managing plugins", -- Format string rendered when managing plugins (either string or function(plugin_manager_name: string): string)
|
||||
reading_text = "Reading %s", -- Format string rendered when a read-only or unmodifiable file is loaded in the buffer (either string or function(filename: string): string)
|
||||
workspace_text = "Working on %s", -- Format string rendered when in a git repository (either string or function(project_name: string|nil, filename: string): string)
|
||||
line_number_text = "Line %s out of %s", -- Format string rendered when `enable_line_number` is set to true (either string or function(line_number: number, line_count: number): string)
|
||||
})
|
||||
```
|
||||
|
||||
|
|
|
@ -442,6 +442,17 @@ function Presence.get_file_extension(path)
|
|||
return path:match("^.+%.(.+)$")
|
||||
end
|
||||
|
||||
-- Format any status text via options and support custom formatter functions
|
||||
function Presence:format_status_text(status_type, ...)
|
||||
local option_name = string.format("%s_text", status_type)
|
||||
local text_option = self.options[option_name]
|
||||
if type(text_option) == "function" then
|
||||
return text_option(...)
|
||||
else
|
||||
return string.format(text_option, ...)
|
||||
end
|
||||
end
|
||||
|
||||
-- Get the status text for the current buffer
|
||||
function Presence:get_status_text(filename)
|
||||
local file_explorer = file_explorers[vim.bo.filetype:match "[^%d]+"]
|
||||
|
@ -449,21 +460,21 @@ function Presence:get_status_text(filename)
|
|||
local plugin_manager = plugin_managers[vim.bo.filetype]
|
||||
|
||||
if file_explorer then
|
||||
return string.format(self.options.file_explorer_text, file_explorer)
|
||||
return self:format_status_text("file_explorer", file_explorer)
|
||||
elseif plugin_manager then
|
||||
return string.format(self.options.plugin_manager_text, plugin_manager)
|
||||
return self:format_status_text("plugin_manager", plugin_manager)
|
||||
end
|
||||
|
||||
if not filename or filename == "" then return nil end
|
||||
|
||||
if vim.bo.modifiable and not vim.bo.readonly then
|
||||
if vim.bo.filetype == "gitcommit" then
|
||||
return string.format(self.options.git_commit_text, filename)
|
||||
return self:format_status_text("git_commit", filename)
|
||||
elseif filename then
|
||||
return string.format(self.options.editing_text, filename)
|
||||
return self:format_status_text("editing", filename)
|
||||
end
|
||||
elseif filename then
|
||||
return string.format(self.options.reading_text, filename)
|
||||
return self:format_status_text("reading", filename)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -819,11 +830,9 @@ function Presence:update_for_buffer(buffer, should_debounce)
|
|||
|
||||
local line_number = vim.api.nvim_win_get_cursor(0)[1]
|
||||
local line_count = vim.api.nvim_buf_line_count(0)
|
||||
local line_number_text = self.options.line_number_text
|
||||
local line_number_text = self:format_status_text("line_number", line_number, line_count)
|
||||
|
||||
activity.details = type(line_number_text) == "function"
|
||||
and line_number_text(line_number, line_count)
|
||||
or string.format(line_number_text, line_number, line_count)
|
||||
activity.details = line_number_text
|
||||
|
||||
self.workspace = nil
|
||||
self.last_activity = {
|
||||
|
@ -835,14 +844,10 @@ function Presence:update_for_buffer(buffer, should_debounce)
|
|||
}
|
||||
else
|
||||
-- Include project details if available and if the user hasn't set the enable_line_number option
|
||||
local workspace_text = self.options.workspace_text
|
||||
|
||||
if project_name then
|
||||
self.log:debug(string.format("Detected project: %s", project_name))
|
||||
|
||||
activity.details = type(workspace_text) == "function"
|
||||
and workspace_text(project_name, buffer)
|
||||
or string.format(workspace_text, project_name)
|
||||
activity.details = self:format_status_text("workspace", project_name, buffer)
|
||||
|
||||
self.workspace = project_path
|
||||
self.last_activity = {
|
||||
|
@ -879,6 +884,8 @@ function Presence:update_for_buffer(buffer, should_debounce)
|
|||
-- When no project is detected, set custom workspace text if:
|
||||
-- * The custom function returns custom workspace text
|
||||
-- * The configured workspace text does not contain a directive
|
||||
-- (can't use the `format_status_text` method here)
|
||||
local workspace_text = self.options.workspace_text
|
||||
if type(workspace_text) == "function" then
|
||||
local custom_workspace_text = workspace_text(nil, buffer)
|
||||
if custom_workspace_text then
|
||||
|
|
Loading…
Reference in a new issue