Do not push jumps implicitely in transient contexts
This should improve performance in draft contexts.
This commit is contained in:
parent
095ccfedb4
commit
b204e773d4
|
@ -100,7 +100,7 @@ define-command -hidden d-indent-on-new-line %~
|
||||||
# align to opening paren of previous 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-;>' & }
|
try %{ execute-keys -draft [( <a-k> \A\([^\n]+\n[^\n]*\n?\z <ret> s \A\(\h*.|.\z <ret> '<a-;>' & }
|
||||||
# copy // comments prefix
|
# 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
|
# indent after a switch's case/default statements
|
||||||
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
|
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
|
||||||
# indent after if|else|while|for
|
# indent after if|else|while|for
|
||||||
|
|
|
@ -64,7 +64,7 @@ define-command -hidden go-indent-on-new-line %~
|
||||||
# align to opening paren of previous 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-;>' & }
|
try %{ execute-keys -draft [( <a-k> \A\([^\n]+\n[^\n]*\n?\z <ret> s \A\(\h*.|.\z <ret> '<a-;>' & }
|
||||||
# copy // comments prefix
|
# 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
|
# indent after a switch's case/default statements
|
||||||
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
|
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
|
||||||
# indent after if|else|while|for
|
# indent after if|else|while|for
|
||||||
|
|
|
@ -30,7 +30,7 @@ define-command -hidden java-indent-on-new-line %~
|
||||||
# align to opening paren of previous 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-;>' & }
|
try %{ execute-keys -draft [( <a-k> \A\([^\n]+\n[^\n]*\n?\z <ret> s \A\(\h*.|.\z <ret> '<a-;>' & }
|
||||||
# copy // comments prefix
|
# 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
|
# indent after a switch's case/default statements
|
||||||
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
|
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
|
||||||
# indent after keywords
|
# indent after keywords
|
||||||
|
|
|
@ -81,7 +81,7 @@ define-command -hidden perl-indent-on-new-line %~
|
||||||
# align to opening paren of previous 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-;>' & }
|
try %{ execute-keys -draft [( <a-k> \A\([^\n]+\n[^\n]*\n?\z <ret> s \A\(\h*.|.\z <ret> '<a-;>' & }
|
||||||
# copy // comments prefix
|
# 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
|
# indent after a switch's case/default statements
|
||||||
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
|
try %[ execute-keys -draft k<a-x> <a-k> ^\h*(case|default).*:$ <ret> j<a-gt> ]
|
||||||
# indent after if|else|while|for
|
# indent after if|else|while|for
|
||||||
|
|
|
@ -1650,7 +1650,7 @@ void context_wrap(const ParametersParser& parser, Context& context, Func func)
|
||||||
size_t timestamp = c.buffer().timestamp();
|
size_t timestamp = c.buffer().timestamp();
|
||||||
for (auto& sel : sels)
|
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();
|
c.selections().update();
|
||||||
|
|
||||||
func(parser, c);
|
func(parser, c);
|
||||||
|
@ -1669,19 +1669,20 @@ void context_wrap(const ParametersParser& parser, Context& context, Func func)
|
||||||
|
|
||||||
if (not draft)
|
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();
|
c.selections().sort_and_merge_overlapping();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto original_jump_list = draft ? Optional<JumpList>{} : c.jump_list();
|
const bool transient = c.flags() & Context::Flags::Transient;
|
||||||
auto jump = draft ? Optional<SelectionList>{} : c.selections();
|
auto original_jump_list = transient ? Optional<JumpList>{} : c.jump_list();
|
||||||
|
auto jump = transient ? Optional<SelectionList>{} : c.selections();
|
||||||
|
|
||||||
func(parser, c);
|
func(parser, c);
|
||||||
|
|
||||||
// If the jump list got mutated, collapse all jumps into a single one from original selections
|
// 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));
|
original_jump_list->push(std::move(*jump));
|
||||||
if (c.jump_list() != *original_jump_list)
|
if (c.jump_list() != *original_jump_list)
|
||||||
|
|
|
@ -119,7 +119,11 @@ public:
|
||||||
Flags flags() const { return m_flags; }
|
Flags flags() const { return m_flags; }
|
||||||
|
|
||||||
JumpList& jump_list() { return m_jump_list; }
|
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>
|
template<typename Func>
|
||||||
void set_last_select(Func&& last_select) { m_last_select = std::forward<Func>(last_select); }
|
void set_last_select(Func&& last_select) { m_last_select = std::forward<Func>(last_select); }
|
||||||
|
|
|
@ -1522,7 +1522,7 @@ void jump(Context& context, NormalParams params)
|
||||||
|
|
||||||
void push_selections(Context& context, NormalParams)
|
void push_selections(Context& context, NormalParams)
|
||||||
{
|
{
|
||||||
context.push_jump();
|
context.push_jump(true);
|
||||||
context.print_status({ format("saved {} selections", context.selections().size()),
|
context.print_status({ format("saved {} selections", context.selections().size()),
|
||||||
context.faces()["Information"] });
|
context.faces()["Information"] });
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user