summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-03-13 14:00:57 +1100
committerMaxime Coste <mawww@kakoune.org>2018-03-13 14:00:57 +1100
commitbfaf52f8c0ff6ab5e25944484be8014e855dd410 (patch)
treecc17ddad0961def8d8c86c188371a269566edd76 /src
parent1f4ad0f25e82023c5982dbbcb5a1a5aa835e1014 (diff)
Do not jump to buffer start on `g.` with no previous modifications
Diffstat (limited to 'src')
-rw-r--r--src/buffer.cc2
-rw-r--r--src/buffer.hh5
-rw-r--r--src/normal.cc6
3 files changed, 8 insertions, 5 deletions
diff --git a/src/buffer.cc b/src/buffer.cc
index 7a476264..f36944e4 100644
--- a/src/buffer.cc
+++ b/src/buffer.cc
@@ -726,7 +726,7 @@ void Buffer::run_hook_in_own_context(StringView hook_name, StringView param, Str
hooks().run_hook(hook_name, param, hook_handler.context());
}
-BufferCoord Buffer::last_modification_coord() const
+Optional<BufferCoord> Buffer::last_modification_coord() const
{
if (m_history_cursor.get() == &m_history)
return {};
diff --git a/src/buffer.hh b/src/buffer.hh
index d8f18015..7ff5bab7 100644
--- a/src/buffer.hh
+++ b/src/buffer.hh
@@ -5,6 +5,7 @@
#include "coord.hh"
#include "constexpr_utils.hh"
#include "enum.hh"
+#include "optional.hh"
#include "safe_ptr.hh"
#include "scope.hh"
#include "shared_string.hh"
@@ -163,12 +164,12 @@ public:
bool is_valid(BufferCoord c) const;
bool is_end(BufferCoord c) const;
- BufferCoord last_modification_coord() const;
-
BufferIterator begin() const;
BufferIterator end() const;
LineCount line_count() const;
+ Optional<BufferCoord> last_modification_coord() const;
+
StringView operator[](LineCount line) const
{ return m_lines[line]; }
diff --git a/src/normal.cc b/src/normal.cc
index 21609090..aef3f79a 100644
--- a/src/normal.cc
+++ b/src/normal.cc
@@ -306,9 +306,11 @@ void goto_commands(Context& context, NormalParams params)
{
context.push_jump();
auto pos = buffer.last_modification_coord();
- if (pos >= buffer.back_coord())
+ if (not pos)
+ throw runtime_error("no last modification position");
+ if (*pos >= buffer.back_coord())
pos = buffer.back_coord();
- select_coord<mode>(buffer, pos, context.selections());
+ select_coord<mode>(buffer, *pos, context.selections());
break;
}
}