Do not insert any end-of-line when piping data out
This will unfortunately break some use case which will require using wrapper scripts to add the necessary newline. It is however harder to do the contrary, and it makes a lot of other use case possible, such as checksuming. Fixes #3669
This commit is contained in:
parent
00080f8337
commit
6f135c0c8e
|
@ -44,6 +44,9 @@ struct {
|
||||||
unsigned int version;
|
unsigned int version;
|
||||||
StringView notes;
|
StringView notes;
|
||||||
} constexpr version_notes[] = { {
|
} constexpr version_notes[] = { {
|
||||||
|
0,
|
||||||
|
"» pipe commands do not append final end-of-lines anymore\n"
|
||||||
|
}, {
|
||||||
20211107,
|
20211107,
|
||||||
"» colored and curly underlines support (undocumented in 20210828)\n"
|
"» colored and curly underlines support (undocumented in 20210828)\n"
|
||||||
}, {
|
}, {
|
||||||
|
|
|
@ -582,10 +582,6 @@ void pipe(Context& context, NormalParams params)
|
||||||
const auto end = changes_tracker.get_new_coord_tolerant(sel.max());
|
const auto end = changes_tracker.get_new_coord_tolerant(sel.max());
|
||||||
|
|
||||||
String in = buffer.string(beg, buffer.char_next(end));
|
String in = buffer.string(beg, buffer.char_next(end));
|
||||||
const bool insert_eol = in.back() != '\n';
|
|
||||||
if (insert_eol)
|
|
||||||
in += '\n';
|
|
||||||
|
|
||||||
// Needed in case we read selections inside the cmdline
|
// Needed in case we read selections inside the cmdline
|
||||||
context.selections_write_only().set({keep_direction(Selection{beg, end}, sel)}, 0);
|
context.selections_write_only().set({keep_direction(Selection{beg, end}, sel)}, 0);
|
||||||
|
|
||||||
|
@ -593,12 +589,9 @@ void pipe(Context& context, NormalParams params)
|
||||||
cmdline, context, in,
|
cmdline, context, in,
|
||||||
ShellManager::Flags::WaitForStdout).first;
|
ShellManager::Flags::WaitForStdout).first;
|
||||||
|
|
||||||
if (insert_eol)
|
if (in.back() != '\n' and not out.empty() and out.back() == '\n')
|
||||||
{
|
out.resize(out.length()-1, 0);
|
||||||
in.resize(in.length()-1, 0);
|
|
||||||
if (not out.empty() and out.back() == '\n')
|
|
||||||
out.resize(out.length()-1, 0);
|
|
||||||
}
|
|
||||||
auto new_end = apply_diff(buffer, beg, in, out);
|
auto new_end = apply_diff(buffer, beg, in, out);
|
||||||
if (new_end != beg)
|
if (new_end != beg)
|
||||||
new_sels.push_back(keep_direction({beg, buffer.char_prev(new_end), std::move(sel.captures())}, sel));
|
new_sels.push_back(keep_direction({beg, buffer.char_prev(new_end), std::move(sel.captures())}, sel));
|
||||||
|
|
1
test/regression/3669-pipe-adds-extra-newline/cmd
Normal file
1
test/regression/3669-pipe-adds-extra-newline/cmd
Normal file
|
@ -0,0 +1 @@
|
||||||
|
|cksum<ret>
|
1
test/regression/3669-pipe-adds-extra-newline/in
Normal file
1
test/regression/3669-pipe-adds-extra-newline/in
Normal file
|
@ -0,0 +1 @@
|
||||||
|
%(foo)
|
1
test/regression/3669-pipe-adds-extra-newline/out
Normal file
1
test/regression/3669-pipe-adds-extra-newline/out
Normal file
|
@ -0,0 +1 @@
|
||||||
|
2470157969 3
|
Loading…
Reference in New Issue
Block a user