Do not push jumps implicitely in transient contexts

This should improve performance in draft contexts.
This commit is contained in:
Maxime Coste 2018-05-13 17:24:37 +10:00
parent 095ccfedb4
commit b204e773d4
7 changed files with 16 additions and 11 deletions

View File

@ -100,7 +100,7 @@ define-command -hidden d-indent-on-new-line %~
# align to opening paren of previous line
try %{ execute-keys -draft [( <a-k> \A\([^\n]+\n[^\n]*\n?\z <ret> s \A\(\h*.|.\z <ret> '<a-;>' & }
# copy // comments prefix
try %{ execute-keys -draft \;<c-s>k<a-x> s ^\h*\K/{2,} <ret> y<c-o><c-o>P<esc> }
try %{ execute-keys -draft \;<c-s>k<a-x> s ^\h*\K/{2,} <ret> y<c-o>P<esc> }
# indent after a switch's case/default statements
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
# indent after if|else|while|for

View File

@ -64,7 +64,7 @@ define-command -hidden go-indent-on-new-line %~
# align to opening paren of previous line
try %{ execute-keys -draft [( <a-k> \A\([^\n]+\n[^\n]*\n?\z <ret> s \A\(\h*.|.\z <ret> '<a-;>' & }
# copy // comments prefix
try %{ execute-keys -draft \;<c-s>k<a-x> s ^\h*\K/{2,} <ret> y<c-o><c-o>P<esc> }
try %{ execute-keys -draft \;<c-s>k<a-x> s ^\h*\K/{2,} <ret> y<c-o>P<esc> }
# indent after a switch's case/default statements
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
# indent after if|else|while|for

View File

@ -30,7 +30,7 @@ define-command -hidden java-indent-on-new-line %~
# align to opening paren of previous line
try %{ execute-keys -draft [( <a-k> \A\([^\n]+\n[^\n]*\n?\z <ret> s \A\(\h*.|.\z <ret> '<a-;>' & }
# copy // comments prefix
try %{ execute-keys -draft \;<c-s>k<a-x> s ^\h*\K/{2,} <ret> y<c-o><c-o>P<esc> }
try %{ execute-keys -draft \;<c-s>k<a-x> s ^\h*\K/{2,} <ret> y<c-o>P<esc> }
# indent after a switch's case/default statements
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
# indent after keywords

View File

@ -81,7 +81,7 @@ define-command -hidden perl-indent-on-new-line %~
# align to opening paren of previous line
try %{ execute-keys -draft [( <a-k> \A\([^\n]+\n[^\n]*\n?\z <ret> s \A\(\h*.|.\z <ret> '<a-;>' & }
# copy // comments prefix
try %{ execute-keys -draft \;<c-s>k<a-x> s ^\h*\K/{2,} <ret> y<c-o><c-o>P<esc> }
try %{ execute-keys -draft \;<c-s>k<a-x> s ^\h*\K/{2,} <ret> y<c-o>P<esc> }
# indent after a switch's case/default statements
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
# indent after if|else|while|for

View File

@ -1650,7 +1650,7 @@ void context_wrap(const ParametersParser& parser, Context& context, Func func)
size_t timestamp = c.buffer().timestamp();
for (auto& sel : sels)
{
c.selections_write_only() = SelectionList{ sels.buffer(), sel, sels.timestamp() };
c.selections_write_only() = SelectionList{sels.buffer(), sel, sels.timestamp()};
c.selections().update();
func(parser, c);
@ -1669,19 +1669,20 @@ void context_wrap(const ParametersParser& parser, Context& context, Func func)
if (not draft)
{
c.selections_write_only() = SelectionList(c.buffer(), new_sels);
c.selections_write_only() = SelectionList(c.buffer(), std::move(new_sels));
c.selections().sort_and_merge_overlapping();
}
}
else
{
auto original_jump_list = draft ? Optional<JumpList>{} : c.jump_list();
auto jump = draft ? Optional<SelectionList>{} : c.selections();
const bool transient = c.flags() & Context::Flags::Transient;
auto original_jump_list = transient ? Optional<JumpList>{} : c.jump_list();
auto jump = transient ? Optional<SelectionList>{} : c.selections();
func(parser, c);
// If the jump list got mutated, collapse all jumps into a single one from original selections
if (not draft and c.jump_list() != *original_jump_list)
if (not transient and c.jump_list() != *original_jump_list)
{
original_jump_list->push(std::move(*jump));
if (c.jump_list() != *original_jump_list)

View File

@ -119,7 +119,11 @@ public:
Flags flags() const { return m_flags; }
JumpList& jump_list() { return m_jump_list; }
void push_jump() { m_jump_list.push(selections()); }
void push_jump(bool force = false)
{
if (force or not (m_flags & Flags::Transient))
m_jump_list.push(selections());
}
template<typename Func>
void set_last_select(Func&& last_select) { m_last_select = std::forward<Func>(last_select); }

View File

@ -1522,7 +1522,7 @@ void jump(Context& context, NormalParams params)
void push_selections(Context& context, NormalParams)
{
context.push_jump();
context.push_jump(true);
context.print_status({ format("saved {} selections", context.selections().size()),
context.faces()["Information"] });
}