Line data Source code
1 : -- lua/yoda/buffer/state_checker.lua
2 : -- Buffer state checking utilities
3 :
4 43 : local M = {}
5 :
6 : -- ============================================================================
7 : -- Buffer Name Checks
8 : -- ============================================================================
9 :
10 : --- Check if a buffer name indicates it's empty or unnamed
11 : --- @param bufname string Buffer name to check
12 : --- @return boolean
13 43 : function M.is_empty_buffer_name(bufname)
14 16 : if type(bufname) ~= "string" then
15 3 : return true
16 : end
17 13 : return bufname == "" or bufname == "[No Name]"
18 43 : end
19 :
20 : --- Check if a buffer name indicates it's a scratch buffer
21 : --- @param bufname string Buffer name to check
22 : --- @return boolean
23 43 : function M.is_scratch_buffer(bufname)
24 16 : if type(bufname) ~= "string" then
25 3 : return false
26 : end
27 13 : return bufname == "[Scratch]"
28 43 : end
29 :
30 : -- ============================================================================
31 : -- Buffer State Checks
32 : -- ============================================================================
33 :
34 : --- Check if a buffer is empty or unnamed (but not a scratch buffer)
35 : --- @param bufnr number|nil Buffer number (default: current buffer)
36 : --- @return boolean
37 43 : function M.is_buffer_empty(bufnr)
38 9 : bufnr = bufnr or 0
39 :
40 9 : if not vim.api.nvim_buf_is_valid(bufnr) then
41 1 : return true
42 : end
43 :
44 8 : local bufname = vim.api.nvim_buf_get_name(bufnr)
45 :
46 : -- Don't consider scratch buffers as "empty" for alpha purposes
47 16 : if M.is_scratch_buffer(bufname) then
48 : return false
49 : end
50 :
51 8 : return M.is_empty_buffer_name(bufname)
52 43 : end
53 :
54 : --- Check if buffer can be reloaded safely
55 : --- @param bufnr number|nil Buffer number (default: current buffer)
56 : --- @return boolean
57 43 : function M.can_reload_buffer(bufnr)
58 6 : bufnr = bufnr or 0
59 :
60 6 : if not vim.api.nvim_buf_is_valid(bufnr) then
61 1 : return false
62 : end
63 :
64 5 : local bo = vim.bo[bufnr]
65 17 : return bo.modifiable and bo.buftype == "" and not bo.readonly
66 43 : end
67 :
68 : --- Check if buffer is a special buffer type (not a regular file)
69 : --- @param bufnr number|nil Buffer number (default: current buffer)
70 : --- @return boolean
71 43 : function M.is_special_buffer(bufnr)
72 6 : bufnr = bufnr or 0
73 :
74 6 : if not vim.api.nvim_buf_is_valid(bufnr) then
75 1 : return false
76 : end
77 :
78 15 : return vim.bo[bufnr].buftype ~= ""
79 43 : end
80 :
81 : --- Check if buffer is a real file buffer
82 : --- @param bufnr number|nil Buffer number (default: current buffer)
83 : --- @return boolean
84 43 : function M.is_real_file_buffer(bufnr)
85 8 : bufnr = bufnr or 0
86 :
87 8 : if not vim.api.nvim_buf_is_valid(bufnr) then
88 1 : return false
89 : end
90 :
91 7 : local bo = vim.bo[bufnr]
92 7 : local bufname = vim.api.nvim_buf_get_name(bufnr)
93 :
94 23 : return bo.buftype == "" and bo.filetype ~= "" and bo.filetype ~= "alpha" and bufname ~= ""
95 43 : end
96 :
97 : --- Check if buffer is modified
98 : --- @param bufnr number|nil Buffer number (default: current buffer)
99 : --- @return boolean
100 43 : function M.is_modified(bufnr)
101 4 : bufnr = bufnr or 0
102 :
103 4 : if not vim.api.nvim_buf_is_valid(bufnr) then
104 1 : return false
105 : end
106 :
107 9 : return vim.bo[bufnr].modified
108 43 : end
109 :
110 : --- Check if buffer is listed
111 : --- @param bufnr number|nil Buffer number (default: current buffer)
112 : --- @return boolean
113 43 : function M.is_listed(bufnr)
114 4 : bufnr = bufnr or 0
115 :
116 4 : if not vim.api.nvim_buf_is_valid(bufnr) then
117 1 : return false
118 : end
119 :
120 9 : return vim.bo[bufnr].buflisted
121 43 : end
122 :
123 43 : return M
|