@@ -173,6 +173,10 @@ impl Command {
173173 self.doc
174174 }
175175
176+ pub fn fun(&self) -> fn(&mut Context) {
177+ self.fun
178+ }
179+
176180 #[rustfmt::skip]
177181 commands!(
178182 no_op, "Do nothing",
@@ -603,8 +607,15 @@ fn kill_to_line_end(cx: &mut Context) {
603607
604608 let selection = doc.selection(view.id).clone().transform(|range| {
605609 let line = range.cursor_line(text);
606− let pos = line_end_char_index(&text, line);
607− range.put_cursor(text, pos, true)
610+ let line_end_pos = line_end_char_index(&text, line);
611+ let pos = range.cursor(text);
612+
613+ let mut new_range = range.put_cursor(text, line_end_pos, true);
614+ // don't want to remove the line separator itself if the cursor doesn't reach the end of line.
615+ if pos != line_end_pos {
616+ new_range.head = line_end_pos;
617+ }
618+ new_range
608619 });
609620 delete_selection_insert_mode(doc, view, &selection);
610621}
@@ -3503,12 +3514,12 @@ fn open(cx: &mut Context, open: Open) {
35033514}
35043515
35053516// o inserts a new line after each line with a selection
3506−fn open_below(cx: &mut Context) {
3517+pub(crate) fn open_below(cx: &mut Context) {
35073518 open(cx, Open::Below)
35083519}
35093520
35103521// O inserts a new line before each line with a selection
3511−fn open_above(cx: &mut Context) {
3522+pub(crate) fn open_above(cx: &mut Context) {
35123523 open(cx, Open::Above)
35133524}
35143525