Fix pipe logic in the case where the selections were accessed in the cmdline
When using an env var that needed the selections in the pipe command line, say $kak_selection, the selection update code would run, modifying the selections to adapt to eventual changes. But the rest of the pipe logic was assuming the selections would not change, leading to bugs.
This commit is contained in:
parent
d45f16b6c8
commit
04993de687
|
@ -512,9 +512,11 @@ void pipe(Context& context, NormalParams)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Buffer& buffer = context.buffer();
|
Buffer& buffer = context.buffer();
|
||||||
SelectionList& selections = context.selections();
|
SelectionList selections = context.selections();
|
||||||
const int old_main = selections.main_index();
|
auto restore_sels = on_scope_end([&, old_main = selections.main_index()] {
|
||||||
auto restore_main = on_scope_end([&] { selections.set_main_index(old_main); });
|
selections.set_main_index(old_main);
|
||||||
|
context.selections() = std::move(selections);
|
||||||
|
});
|
||||||
if (replace)
|
if (replace)
|
||||||
{
|
{
|
||||||
ScopedEdition edition(context);
|
ScopedEdition edition(context);
|
||||||
|
@ -531,6 +533,10 @@ void pipe(Context& context, NormalParams)
|
||||||
const bool insert_eol = in.back() != '\n';
|
const bool insert_eol = in.back() != '\n';
|
||||||
if (insert_eol)
|
if (insert_eol)
|
||||||
in += '\n';
|
in += '\n';
|
||||||
|
|
||||||
|
// Needed in case we read selections inside the cmdline
|
||||||
|
context.selections_write_only() = selections;
|
||||||
|
|
||||||
String out = ShellManager::instance().eval(
|
String out = ShellManager::instance().eval(
|
||||||
cmdline, context, in,
|
cmdline, context, in,
|
||||||
ShellManager::Flags::WaitForStdout).first;
|
ShellManager::Flags::WaitForStdout).first;
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
%<a-s>|[ $kak_selection = "bar" ] && echo "yes"<ret>
|
3
test/regression/0-crash-on-pipe-with-selection-access/in
Normal file
3
test/regression/0-crash-on-pipe-with-selection-access/in
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
foo
|
||||||
|
bar
|
||||||
|
baz
|
|
@ -0,0 +1 @@
|
||||||
|
yes
|
Loading…
Reference in New Issue
Block a user