Always collapse jumps in exec/eval, remove -collapse-jumps switch
There does not seem to be any reasonable use cases of not collapsing jumps when the input is not comming from the user. Always collapse them. It could make sense to move jump collapsing out of context_wrap as in general any action not comming directly from the user should collapse them, at the moment a comment or mapping will not collapse jumps, which is unfortunate.
This commit is contained in:
parent
933ac4d3d5
commit
4d11bb20c3
|
@ -54,6 +54,3 @@ when the commands have been executed: */*, *"*, *|*, *^*, *@*.
|
||||||
*-save-regs* <regs>::
|
*-save-regs* <regs>::
|
||||||
regs is a string of registers to be restored after execution (overwrites
|
regs is a string of registers to be restored after execution (overwrites
|
||||||
the list of registers saved by default, c.f. description)
|
the list of registers saved by default, c.f. description)
|
||||||
|
|
||||||
*-collapse-jumps*::
|
|
||||||
collapse all jumps into a single one from initial selection
|
|
||||||
|
|
|
@ -37,9 +37,9 @@ If no symbol is passed then the current selection is used as symbol name} \
|
||||||
re=$0;
|
re=$0;
|
||||||
sub(".*\t/\\^", "", re); sub("\\$?/$", "", re); gsub("(\\{|\\}|\\\\E).*$", "", re);
|
sub(".*\t/\\^", "", re); sub("\\$?/$", "", re); gsub("(\\{|\\}|\\\\E).*$", "", re);
|
||||||
keys=re; gsub(/</, "<lt>", keys); gsub(/\t/, "<c-v><c-i>", keys);
|
keys=re; gsub(/</, "<lt>", keys); gsub(/\t/, "<c-v><c-i>", keys);
|
||||||
out = out " %{" $2 " {MenuInfo}" re "} %{evaluate-commands -collapse-jumps %{ try %{ edit %{" tagroot $2 "}; execute-keys %{/\\Q" keys "<ret>vc} } catch %{ echo %{unable to find tag} } } }"
|
out = out " %{" $2 " {MenuInfo}" re "} %{evaluate-commands %{ try %{ edit %{" tagroot $2 "}; execute-keys %{/\\Q" keys "<ret>vc} } catch %{ echo %{unable to find tag} } } }"
|
||||||
}
|
}
|
||||||
/[^\t]+\t[^\t]+\t[0-9]+/ { out = out " %{" $2 ":" $3 "} %{evaluate-commands -collapse-jumps %{ edit %{" tagroot $2 "} %{" $3 "}}}" }
|
/[^\t]+\t[^\t]+\t[0-9]+/ { out = out " %{" $2 ":" $3 "} %{evaluate-commands %{ edit %{" tagroot $2 "} %{" $3 "}}}" }
|
||||||
END { print ( length(out) == 0 ? "echo -markup %{{Error}no such tag " ENVIRON["tagname"] "}" : "menu -markup -auto-single " out ) }'
|
END { print ( length(out) == 0 ? "echo -markup %{{Error}no such tag " ENVIRON["tagname"] "}" : "menu -markup -auto-single " out ) }'
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ declare-option -docstring "name of the client in which all source code jumps wil
|
||||||
str jumpclient
|
str jumpclient
|
||||||
|
|
||||||
define-command -hidden grep-jump %{
|
define-command -hidden grep-jump %{
|
||||||
evaluate-commands -collapse-jumps %{
|
evaluate-commands %{ # use evaluate-commands to ensure jumps are collapsed
|
||||||
try %{
|
try %{
|
||||||
execute-keys '<a-x>s^((?:\w:)?[^:]+):(\d+):(\d+)?<ret>'
|
execute-keys '<a-x>s^((?:\w:)?[^:]+):(\d+):(\d+)?<ret>'
|
||||||
set-option buffer grep_current_line %val{cursor_line}
|
set-option buffer grep_current_line %val{cursor_line}
|
||||||
|
@ -58,7 +58,7 @@ define-command -hidden grep-jump %{
|
||||||
}
|
}
|
||||||
|
|
||||||
define-command grep-next-match -docstring 'Jump to the next grep match' %{
|
define-command grep-next-match -docstring 'Jump to the next grep match' %{
|
||||||
evaluate-commands -collapse-jumps -try-client %opt{jumpclient} %{
|
evaluate-commands -try-client %opt{jumpclient} %{
|
||||||
buffer '*grep*'
|
buffer '*grep*'
|
||||||
# First jump to enf of buffer so that if grep_current_line == 0
|
# First jump to enf of buffer so that if grep_current_line == 0
|
||||||
# 0g<a-l> will be a no-op and we'll jump to the first result.
|
# 0g<a-l> will be a no-op and we'll jump to the first result.
|
||||||
|
@ -70,7 +70,7 @@ define-command grep-next-match -docstring 'Jump to the next grep match' %{
|
||||||
}
|
}
|
||||||
|
|
||||||
define-command grep-previous-match -docstring 'Jump to the previous grep match' %{
|
define-command grep-previous-match -docstring 'Jump to the previous grep match' %{
|
||||||
evaluate-commands -collapse-jumps -try-client %opt{jumpclient} %{
|
evaluate-commands -try-client %opt{jumpclient} %{
|
||||||
buffer '*grep*'
|
buffer '*grep*'
|
||||||
# See comment in grep-next-match
|
# See comment in grep-next-match
|
||||||
execute-keys "ge %opt{grep_current_line}g<a-h> <a-/>^[^:]+:\d+:<ret>"
|
execute-keys "ge %opt{grep_current_line}g<a-h> <a-/>^[^:]+:\d+:<ret>"
|
||||||
|
|
|
@ -55,7 +55,7 @@ define-command -hidden make-open-error -params 4 %{
|
||||||
}
|
}
|
||||||
|
|
||||||
define-command -hidden make-jump %{
|
define-command -hidden make-jump %{
|
||||||
evaluate-commands -collapse-jumps %{
|
evaluate-commands %{
|
||||||
try %{
|
try %{
|
||||||
execute-keys gl<a-?> "Entering directory" <ret><a-:>
|
execute-keys gl<a-?> "Entering directory" <ret><a-:>
|
||||||
# Try to parse the error into capture groups, failing on absolute paths
|
# Try to parse the error into capture groups, failing on absolute paths
|
||||||
|
@ -71,7 +71,7 @@ define-command -hidden make-jump %{
|
||||||
}
|
}
|
||||||
|
|
||||||
define-command make-next-error -docstring 'Jump to the next make error' %{
|
define-command make-next-error -docstring 'Jump to the next make error' %{
|
||||||
evaluate-commands -collapse-jumps -try-client %opt{jumpclient} %{
|
evaluate-commands -try-client %opt{jumpclient} %{
|
||||||
buffer '*make*'
|
buffer '*make*'
|
||||||
execute-keys "%opt{make_current_error_line}ggl" "/^(?:\w:)?[^:\n]+:\d+:(?:\d+:)?%opt{make_error_pattern}<ret>"
|
execute-keys "%opt{make_current_error_line}ggl" "/^(?:\w:)?[^:\n]+:\d+:(?:\d+:)?%opt{make_error_pattern}<ret>"
|
||||||
make-jump
|
make-jump
|
||||||
|
@ -80,7 +80,7 @@ define-command make-next-error -docstring 'Jump to the next make error' %{
|
||||||
}
|
}
|
||||||
|
|
||||||
define-command make-previous-error -docstring 'Jump to the previous make error' %{
|
define-command make-previous-error -docstring 'Jump to the previous make error' %{
|
||||||
evaluate-commands -collapse-jumps -try-client %opt{jumpclient} %{
|
evaluate-commands -try-client %opt{jumpclient} %{
|
||||||
buffer '*make*'
|
buffer '*make*'
|
||||||
execute-keys "%opt{make_current_error_line}g" "<a-/>^(?:\w:)?[^:\n]+:\d+:(?:\d+:)?%opt{make_error_pattern}<ret>"
|
execute-keys "%opt{make_current_error_line}g" "<a-/>^(?:\w:)?[^:\n]+:\d+:(?:\d+:)?%opt{make_error_pattern}<ret>"
|
||||||
make-jump
|
make-jump
|
||||||
|
|
|
@ -69,5 +69,5 @@ The page can be a word, or a word directly followed by a section number between
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
printf %s\\n "evaluate-commands -collapse-jumps -try-client %opt{docsclient} man-impl *man* $pagenum $subject"
|
printf %s\\n "evaluate-commands -try-client %opt{docsclient} man-impl *man* $pagenum $subject"
|
||||||
} }
|
} }
|
||||||
|
|
|
@ -1522,8 +1522,7 @@ const ParameterDesc context_wrap_params = {
|
||||||
{ "no-hooks", { false, "disable hooks" } },
|
{ "no-hooks", { false, "disable hooks" } },
|
||||||
{ "with-maps", { false, "use user defined key mapping when executing keys" } },
|
{ "with-maps", { false, "use user defined key mapping when executing keys" } },
|
||||||
{ "itersel", { false, "run once for each selection with that selection as the only one" } },
|
{ "itersel", { false, "run once for each selection with that selection as the only one" } },
|
||||||
{ "save-regs", { true, "restore all given registers after execution (defaults to '/\"|^@')" } },
|
{ "save-regs", { true, "restore all given registers after execution (defaults to '/\"|^@')" } } },
|
||||||
{ "collapse-jumps", { false, "collapse all jumps into a single one from initial selection" } } },
|
|
||||||
ParameterDesc::Flags::SwitchesOnlyAtStart, 1
|
ParameterDesc::Flags::SwitchesOnlyAtStart, 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1675,17 +1674,17 @@ void context_wrap(const ParametersParser& parser, Context& context, Func func)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Optional<JumpList> original_jump_list;
|
auto original_jump_list = draft ? Optional<JumpList>{} : c.jump_list();
|
||||||
if (not draft and (bool)parser.get_switch("collapse-jumps"))
|
auto jump = draft ? Optional<SelectionList>{} : c.selections();
|
||||||
original_jump_list = c.jump_list();
|
|
||||||
|
|
||||||
SelectionList jump = c.selections();
|
|
||||||
func(parser, c);
|
func(parser, c);
|
||||||
|
|
||||||
if (original_jump_list and c.jump_list() != *original_jump_list)
|
// 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)
|
||||||
{
|
{
|
||||||
c.jump_list() = std::move(*original_jump_list);
|
original_jump_list->push(std::move(*jump));
|
||||||
c.jump_list().push(std::move(jump));
|
if (c.jump_list() != *original_jump_list)
|
||||||
|
c.jump_list() = std::move(*original_jump_list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user