From bfaf52f8c0ff6ab5e25944484be8014e855dd410 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Tue, 13 Mar 2018 14:00:57 +1100 Subject: [PATCH] Do not jump to buffer start on `g.` with no previous modifications --- src/buffer.cc | 2 +- src/buffer.hh | 5 +++-- src/normal.cc | 6 ++++-- 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 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 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(buffer, pos, context.selections()); + select_coord(buffer, *pos, context.selections()); break; } }