@@ -2,6 +2,7 @@ local Buffer = require("neogit.lib.buffer")
22local config = require (" neogit.config" )
33local input = require (" neogit.lib.input" )
44local util = require (" neogit.lib.util" )
5+ local git = require (" neogit.lib.git" )
56
67local pad = util .pad_right
78
@@ -42,6 +43,25 @@ function M:open(kind)
4243 local mapping = config .get_reversed_commit_editor_maps ()
4344 local aborted = false
4445
46+ local message_index = 1
47+ local message_buffer = { { " " } }
48+ local footer
49+
50+ local function reflog_message (index )
51+ return git .log .reflog_message (index - 2 )
52+ end
53+
54+ local function commit_message ()
55+ return message_buffer [message_index ] or reflog_message (message_index )
56+ end
57+
58+ local function current_message (buffer )
59+ local message = buffer :get_lines (0 , - 1 )
60+ message = util .slice (message , 1 , math.max (1 , # message - # footer ))
61+
62+ return message
63+ end
64+
4565 self .buffer = Buffer .create {
4666 name = self .filename ,
4767 filetype = filetypes [self .filename :match (" [%u_]+$" )] or " NeogitEditor" ,
@@ -64,6 +84,9 @@ function M:open(kind)
6484 string.format (" # %s Close" , pad_mapping (" Close" )),
6585 string.format (" # %s Submit" , pad_mapping (" Submit" )),
6686 string.format (" # %s Abort" , pad_mapping (" Abort" )),
87+ string.format (" # %s Previous Message" , pad_mapping (" PrevMessage" )),
88+ string.format (" # %s Next Message" , pad_mapping (" NextMessage" )),
89+ string.format (" # %s Reset Message" , pad_mapping (" ResetMessage" )),
6790 }
6891
6992 help_lines = util .filter_map (help_lines , function (line )
@@ -77,6 +100,8 @@ function M:open(kind)
77100 buffer :write ()
78101 buffer :move_cursor (1 )
79102
103+ footer = buffer :get_lines (1 , - 1 )
104+
80105 -- Start insert mode if user has configured it
81106 local disable_insert = config .values .disable_insert_on_commit
82107 if
@@ -127,6 +152,31 @@ function M:open(kind)
127152 buffer :write ()
128153 buffer :close (true )
129154 end ,
155+ [mapping [" PrevMessage" ]] = function (buffer )
156+ local message = current_message (buffer )
157+ message_buffer [message_index ] = message
158+
159+ message_index = message_index + 1
160+
161+ buffer :set_lines (0 , # message , false , commit_message ())
162+ buffer :move_cursor (1 )
163+ end ,
164+ [mapping [" NextMessage" ]] = function (buffer )
165+ local message = current_message (buffer )
166+
167+ if message_index > 1 then
168+ message_buffer [message_index ] = message
169+ message_index = message_index - 1
170+ end
171+
172+ buffer :set_lines (0 , # message , false , commit_message ())
173+ buffer :move_cursor (1 )
174+ end ,
175+ [mapping [" ResetMessage" ]] = function (buffer )
176+ local message = current_message (buffer )
177+ buffer :set_lines (0 , # message , false , reflog_message (message_index ))
178+ buffer :move_cursor (1 )
179+ end ,
130180 },
131181 },
132182 }
0 commit comments