|
11 | 11 | -- highlight: The highlight group to apply to this text. |
12 | 12 |
|
13 | 13 | local highlights = require("neo-tree.ui.highlights") |
| 14 | +local utils = require("neo-tree.utils") |
14 | 15 |
|
15 | 16 | local M = {} |
16 | 17 |
|
@@ -86,25 +87,83 @@ M.git_status = function(config, node, state) |
86 | 87 | end |
87 | 88 | end |
88 | 89 |
|
89 | | - local highlight = highlights.FILE_NAME |
| 90 | + local symbols = config.symbols or {} |
| 91 | + local status_symbol |
| 92 | + local status_highlt = highlights.FILE_NAME |
| 93 | + local staged_symbol = symbols.unstaged |
| 94 | + local staged_highlt = highlights.GIT_CONFLICT |
| 95 | + |
| 96 | + if git_status:sub(2, 2) == " " then |
| 97 | + staged_symbol = symbols.staged |
| 98 | + staged_highlt = highlights.GIT_ADDED |
| 99 | + end |
| 100 | + |
90 | 101 | if git_status:match("?$") then |
91 | | - highlight = highlights.GIT_UNTRACKED |
92 | | - elseif git_status:match("U") then |
93 | | - highlight = highlights.GIT_CONFLICT |
| 102 | + staged_symbol = nil |
| 103 | + staged_highlt = highlights.GIT_UNTRACKED |
| 104 | + status_symbol = symbols.untracked |
| 105 | + status_highlt = highlights.GIT_UNTRACKED |
| 106 | + -- all variations of merge conflicts |
| 107 | + elseif git_status == "DD" then |
| 108 | + staged_symbol = symbols.conflict |
| 109 | + staged_highlt = highlights.GIT_CONFLICT |
| 110 | + status_symbol = symbols.deleted |
| 111 | + status_highlt = highlights.GIT_CONFLICT |
| 112 | + elseif git_status == "UU" then |
| 113 | + staged_symbol = symbols.conflict |
| 114 | + staged_highlt = highlights.GIT_CONFLICT |
| 115 | + status_symbol = symbols.modified |
| 116 | + status_highlt = highlights.GIT_CONFLICT |
94 | 117 | elseif git_status == "AA" then |
95 | | - highlight = highlights.GIT_CONFLICT |
| 118 | + staged_symbol = symbols.conflict |
| 119 | + staged_highlt = highlights.GIT_CONFLICT |
| 120 | + status_symbol = symbols.added |
| 121 | + status_highlt = highlights.GIT_CONFLICT |
| 122 | + elseif git_status:match("U") then |
| 123 | + staged_symbol = symbols.conflict |
| 124 | + staged_highlt = highlights.GIT_CONFLICT |
| 125 | + if git_status:match("A") then |
| 126 | + status_symbol = symbols.added |
| 127 | + elseif git_status:match("D") then |
| 128 | + status_symbol = symbols.deleted |
| 129 | + end |
| 130 | + status_highlt = highlights.GIT_CONFLICT |
| 131 | + -- end merge conflict section |
96 | 132 | elseif git_status:match("M") then |
97 | | - highlight = highlights.GIT_MODIFIED |
98 | | - elseif git_status:match("[ACRT]") then |
99 | | - highlight = highlights.GIT_ADDED |
| 133 | + status_symbol = symbols.modified |
| 134 | + status_highlt = highlights.GIT_MODIFIED |
| 135 | + elseif git_status:match("R") then |
| 136 | + status_symbol = symbols.renamed |
| 137 | + status_highlt = highlights.GIT_MODIFIED |
| 138 | + elseif git_status:match("[ACT]") then |
| 139 | + status_symbol = symbols.added |
| 140 | + status_highlt = highlights.GIT_ADDED |
100 | 141 | elseif git_status:match("!") then |
101 | | - highlight = highlights.GIT_IGNORED |
| 142 | + staged_symbol = nil |
| 143 | + status_symbol = symbols.ignored |
| 144 | + status_highlt = highlights.GIT_IGNORED |
| 145 | + end |
| 146 | + |
| 147 | + if status_symbol then |
| 148 | + local components = {} |
| 149 | + components[1] = { |
| 150 | + text = " " .. status_symbol, |
| 151 | + highlight = status_highlt, |
| 152 | + } |
| 153 | + if staged_symbol then |
| 154 | + components[2] = { |
| 155 | + text = " " .. staged_symbol, |
| 156 | + highlight = staged_highlt, |
| 157 | + } |
| 158 | + end |
| 159 | + return components |
| 160 | + else |
| 161 | + return { |
| 162 | + text = " [" .. git_status .. "]", |
| 163 | + highlight = config.highlight or status_highlt, |
| 164 | + } |
102 | 165 | end |
103 | 166 |
|
104 | | - return { |
105 | | - text = " [" .. git_status .. "]", |
106 | | - highlight = config.highlight or highlight, |
107 | | - } |
108 | 167 | end |
109 | 168 |
|
110 | 169 | M.filtered_by = function(config, node, state) |
|
0 commit comments