diff options
| author | Maxime Coste <mawww@kakoune.org> | 2022-01-24 21:48:51 +1100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2022-01-24 21:53:33 +1100 |
| commit | 6f135c0c8e4d4d5b66cd6b56394ad7d690a16252 (patch) | |
| tree | 2077957e3e42d1968277bd17a6a1bb545e117628 /src/normal.cc | |
| parent | 00080f8337cb90aacd3488878ca6d2cb71800a6d (diff) | |
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
Diffstat (limited to 'src/normal.cc')
| -rw-r--r-- | src/normal.cc | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/src/normal.cc b/src/normal.cc index 4e94fe57..ca7063fd 100644 --- a/src/normal.cc +++ b/src/normal.cc @@ -582,10 +582,6 @@ void pipe(Context& context, NormalParams params) const auto end = changes_tracker.get_new_coord_tolerant(sel.max()); 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 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, ShellManager::Flags::WaitForStdout).first; - if (insert_eol) - { - in.resize(in.length()-1, 0); - if (not out.empty() and out.back() == '\n') - out.resize(out.length()-1, 0); - } + if (in.back() != '\n' and not out.empty() and out.back() == '\n') + out.resize(out.length()-1, 0); + auto new_end = apply_diff(buffer, beg, in, out); if (new_end != beg) new_sels.push_back(keep_direction({beg, buffer.char_prev(new_end), std::move(sel.captures())}, sel)); |
