···2222```lua
2323-- config is absolutely optional, no `.setup()` needed
2424vim.g.jjannotate_opts = {
2525- -- disable any mapping by settings it to `nil`
2525+ view = {
2626+ -- whether to highlight all lines changed by cursor's change id
2727+ highlight_lines = true,
2828+ },
2929+ -- disable any mapping by setting it to `false`
2630 mappings = {
3131+ -- close the annotation window
2732 close = "q",
2833 },
2934}
+11-1
lua/jjannotate.lua
···11---@class jjannotate.Opts
22+---@field view jjannotate.Opts.View
23---@field mappings jjannotate.Opts.Mappings
3455+---@class jjannotate.Opts.View
66+---@field highlight_lines boolean
77+48---@class jjannotate.Opts.Mappings
55----@field close string | nil
99+---@field close string | false
610711---@type jjannotate.Opts
812local defaults = {
1313+ view = {
1414+ -- whether to highlight all lines changed by cursor's change id
1515+ highlight_lines = true,
1616+ },
1717+ -- disable any mapping by setting it to `false`
918 mappings = {
1919+ -- close the annotation window
1020 close = "q",
1121 },
1222}
+36-31
lua/jjannotate/view.lua
···1717---@field original_opts table<string, any>
1818---@field parsed jjannotate.ParseResult?
1919---@field ns integer
2020+---@field ns_hl integer
2121+---@field augroup integer
20222123local View = {}
2224View.__index = View
···139141 )
140142 end
141143142142- self:_autocmds()
144144+ self:_autocmds(opts)
143145144146 if self.original then
145147 vim.api.nvim_win_set_cursor(self.win, { vim.api.nvim_win_get_cursor(self.original.win)[1], 0 })
···148150 vim.cmd.syncbind()
149151end
150152151151-function View:_autocmds()
152152- local function cursor_moved()
153153- local row = vim.api.nvim_win_get_cursor(self.win)[1] - 1
154154- local change_id = self.parsed.row_index[row].change_id
155155- local lines = self.parsed.change_id_index[change_id]
156156- local dim_hl = hl_cache[change_id].dim
153153+---@param opts jjannotate.Opts
154154+function View:_autocmds(opts)
155155+ if opts.view.highlight_lines then
156156+ local function cursor_moved()
157157+ local row = vim.api.nvim_win_get_cursor(self.win)[1] - 1
158158+ local change_id = self.parsed.row_index[row].change_id
159159+ local lines = self.parsed.change_id_index[change_id]
160160+ local dim_hl = hl_cache[change_id].dim
157161158158- vim.api.nvim_buf_clear_namespace(self.buf, self.ns_hl, 0, -1)
159159- vim.api.nvim_buf_clear_namespace(self.original.buf, self.ns_hl, 0, -1)
162162+ vim.api.nvim_buf_clear_namespace(self.buf, self.ns_hl, 0, -1)
163163+ vim.api.nvim_buf_clear_namespace(self.original.buf, self.ns_hl, 0, -1)
160164161161- for _, line in ipairs(lines) do
162162- vim.api.nvim_buf_set_extmark(self.buf, self.ns_hl, line.range.start, 0, {
163163- end_row = line.range._end + 1,
164164- hl_group = dim_hl,
165165- hl_eol = true,
166166- strict = false,
167167- })
168168- vim.api.nvim_buf_set_extmark(self.original.buf, self.ns_hl, line.range.start, 0, {
169169- end_row = line.range._end + 1,
170170- hl_group = dim_hl,
171171- hl_eol = true,
172172- strict = false,
173173- })
165165+ for _, line in ipairs(lines) do
166166+ vim.api.nvim_buf_set_extmark(self.buf, self.ns_hl, line.range.start, 0, {
167167+ end_row = line.range._end + 1,
168168+ hl_group = dim_hl,
169169+ hl_eol = true,
170170+ strict = false,
171171+ })
172172+ vim.api.nvim_buf_set_extmark(self.original.buf, self.ns_hl, line.range.start, 0, {
173173+ end_row = line.range._end + 1,
174174+ hl_group = dim_hl,
175175+ hl_eol = true,
176176+ strict = false,
177177+ })
178178+ end
174179 end
175175- end
176180177177- vim.api.nvim_create_autocmd("CursorMoved", {
178178- group = self.augroup,
179179- buffer = self.buf,
180180- callback = vim.schedule_wrap(cursor_moved),
181181- })
182182-183183- if self.original then
184181 vim.api.nvim_create_autocmd("CursorMoved", {
185182 group = self.augroup,
186186- buffer = self.original.buf,
183183+ buffer = self.buf,
187184 callback = vim.schedule_wrap(cursor_moved),
188185 })
186186+187187+ if self.original then
188188+ vim.api.nvim_create_autocmd("CursorMoved", {
189189+ group = self.augroup,
190190+ buffer = self.original.buf,
191191+ callback = vim.schedule_wrap(cursor_moved),
192192+ })
193193+ end
189194 end
190195191196 vim.api.nvim_create_autocmd({ "BufHidden", "BufUnload" }, {