2023-01-15 00:17:41 +07:00
|
|
|
local active = true
|
2024-07-09 17:09:04 +07:00
|
|
|
local icons = pcode.icons
|
2023-01-15 00:17:41 +07:00
|
|
|
local excludes = function()
|
2024-05-22 06:39:38 +07:00
|
|
|
return vim.tbl_contains({
|
|
|
|
"help",
|
|
|
|
"startify",
|
|
|
|
"dashboard",
|
|
|
|
"packer",
|
|
|
|
"neo-tree",
|
|
|
|
"neogitstatus",
|
|
|
|
"NvimTree",
|
|
|
|
"Trouble",
|
|
|
|
"alpha",
|
|
|
|
"lir",
|
|
|
|
"Outline",
|
|
|
|
"spectre_panel",
|
|
|
|
"toggleterm",
|
|
|
|
"DressingSelect",
|
|
|
|
"Jaq",
|
|
|
|
"harpoon",
|
|
|
|
"dap-repl",
|
|
|
|
"dap-terminal",
|
|
|
|
"dapui_console",
|
|
|
|
"dapui_hover",
|
|
|
|
"lab",
|
|
|
|
"notify",
|
|
|
|
"noice",
|
|
|
|
"",
|
|
|
|
} or {}, vim.bo.filetype)
|
2023-01-15 00:17:41 +07:00
|
|
|
end
|
|
|
|
|
|
|
|
local get_filename = function()
|
2024-06-14 08:40:35 +07:00
|
|
|
local filename = vim.fn.expand("%:t")
|
|
|
|
local extension = vim.fn.expand("%:e")
|
|
|
|
local f = require("user.functions")
|
2024-05-22 06:39:38 +07:00
|
|
|
|
|
|
|
if not f.isempty(filename) then
|
|
|
|
local file_icon, hl_group = require("nvim-web-devicons").get_icon(filename, extension, { default = true })
|
|
|
|
|
|
|
|
if f.isempty(file_icon) then
|
|
|
|
file_icon = icons.kind.File
|
|
|
|
end
|
|
|
|
|
|
|
|
local buf_ft = vim.bo.filetype
|
|
|
|
|
|
|
|
if buf_ft == "dapui_breakpoints" then
|
|
|
|
file_icon = icons.ui.Bug
|
|
|
|
end
|
|
|
|
|
|
|
|
if buf_ft == "dapui_stacks" then
|
|
|
|
file_icon = icons.ui.Stacks
|
|
|
|
end
|
|
|
|
|
|
|
|
if buf_ft == "dapui_scopes" then
|
|
|
|
file_icon = icons.ui.Scopes
|
|
|
|
end
|
|
|
|
|
|
|
|
if buf_ft == "dapui_watches" then
|
|
|
|
file_icon = icons.ui.Watches
|
|
|
|
end
|
|
|
|
|
|
|
|
-- if buf_ft == "dapui_console" then
|
|
|
|
-- file_icon = lvim.icons.ui.DebugConsole
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local navic_text = vim.api.nvim_get_hl_by_name("Normal", true)
|
|
|
|
-- vim.api.nvim_set_hl(0, "Winbar", { fg = navic_text.foreground })
|
|
|
|
-- Dapatkan definisi highlight group "Normal"
|
|
|
|
local normal_hl = vim.fn.getcompletion("Normal", "highlight")[1]
|
|
|
|
-- Dapatkan warna foreground dan background
|
|
|
|
local fg_color = vim.fn.synIDattr(vim.fn.hlID(normal_hl), "fg")
|
|
|
|
local bg_color = vim.fn.synIDattr(vim.fn.hlID(normal_hl), "bg")
|
|
|
|
vim.api.nvim_set_hl(0, "Winbar", { fg = fg_color, bg = bg_color })
|
|
|
|
|
|
|
|
return " " .. "%#" .. hl_group .. "#" .. file_icon .. "%*" .. " " .. "%#Winbar#" .. filename .. "%*"
|
|
|
|
end
|
2023-01-15 00:17:41 +07:00
|
|
|
end
|
|
|
|
|
|
|
|
local get_gps = function()
|
2024-05-22 06:39:38 +07:00
|
|
|
local status_gps_ok, gps = pcall(require, "nvim-navic")
|
|
|
|
if not status_gps_ok then
|
|
|
|
return ""
|
|
|
|
end
|
|
|
|
|
|
|
|
local status_ok, gps_location = pcall(gps.get_location, {})
|
|
|
|
if not status_ok then
|
|
|
|
return ""
|
|
|
|
end
|
|
|
|
|
|
|
|
if not gps.is_available() or gps_location == "error" then
|
|
|
|
return ""
|
|
|
|
end
|
|
|
|
|
|
|
|
if not require("user.functions").isempty(gps_location) then
|
|
|
|
return "%#NavicSeparator#" .. icons.ui.ChevronRight .. "%* " .. gps_location
|
|
|
|
else
|
|
|
|
return ""
|
|
|
|
end
|
2023-01-15 00:17:41 +07:00
|
|
|
end
|
|
|
|
|
|
|
|
local get_winbar = function()
|
2024-05-22 06:39:38 +07:00
|
|
|
if excludes() then
|
|
|
|
return
|
|
|
|
end
|
2024-06-14 08:40:35 +07:00
|
|
|
local f = require("user.functions")
|
2024-05-22 06:39:38 +07:00
|
|
|
local value = get_filename()
|
|
|
|
|
|
|
|
local gps_added = false
|
|
|
|
if not f.isempty(value) then
|
|
|
|
local gps_value = get_gps()
|
|
|
|
value = value .. " " .. gps_value
|
|
|
|
if not f.isempty(gps_value) then
|
|
|
|
gps_added = true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2024-06-14 08:40:35 +07:00
|
|
|
if not f.isempty(value) and f.get_buf_option("mod") then
|
2024-05-22 06:39:38 +07:00
|
|
|
-- TODO: replace with circle
|
|
|
|
local mod = "%#LspCodeLens#" .. icons.ui.Circle .. "%*"
|
|
|
|
if gps_added then
|
|
|
|
value = value .. " " .. mod
|
|
|
|
else
|
|
|
|
value = value .. mod
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
local num_tabs = #vim.api.nvim_list_tabpages()
|
|
|
|
|
|
|
|
if num_tabs > 1 and not f.isempty(value) then
|
|
|
|
local tabpage_number = tostring(vim.api.nvim_tabpage_get_number(0))
|
|
|
|
value = value .. "%=" .. tabpage_number .. "/" .. tostring(num_tabs)
|
|
|
|
end
|
|
|
|
|
|
|
|
local status_ok, _ = pcall(vim.api.nvim_set_option_value, "winbar", value, { scope = "local" })
|
|
|
|
if not status_ok then
|
|
|
|
return
|
|
|
|
end
|
2023-01-15 00:17:41 +07:00
|
|
|
end
|
|
|
|
|
|
|
|
vim.api.nvim_create_augroup("_winbar", {})
|
2024-07-09 17:09:04 +07:00
|
|
|
vim.api.nvim_create_autocmd(
|
|
|
|
{ "CursorHoldI", "CursorHold", "BufWinEnter", "BufFilePost", "InsertEnter", "BufWritePost", "TabClosed" },
|
|
|
|
{
|
|
|
|
group = "_winbar",
|
|
|
|
callback = function()
|
|
|
|
if active then
|
|
|
|
local status_ok, _ = pcall(vim.api.nvim_buf_get_var, 0, "lsp_floating_window")
|
|
|
|
if not status_ok then
|
|
|
|
-- TODO:
|
|
|
|
get_winbar()
|
2024-05-22 06:39:38 +07:00
|
|
|
end
|
2024-07-09 17:09:04 +07:00
|
|
|
end
|
|
|
|
end,
|
|
|
|
}
|
|
|
|
)
|