@@ -1281,18 +1281,19 @@ fn append_mode(cx: &mut Context) {
12811281 let (view, doc) = current!(cx.editor);
12821282 enter_insert_mode(doc);
12831283 doc.restore_cursor = true;
1284+ let text = doc.text().slice(..);
12841285
1285− let selection = doc.selection(view.id).clone().transform(|range| {
1286− let to = if range.to() == range.from() {
1287− // For 1-width cursor semantics.
1288− graphemes::next_grapheme_boundary(doc.text().slice(..), range.to())
1289− } else {
1290− range.to()
1291− };
1292− Range::new(range.from(), to)
1293− });
1286+ // TODO: preserve selections, like in `Insert` mode. Probably we'll want
1287+ // an explicit separate `Append` mode or something similar, so that we
1288+ // don't change the selection at all, and instead just display and edit
1289+ // things differently.
1290+ let selection = doc
1291+ .selection(view.id)
1292+ .clone()
1293+ .min_width_1(text)
1294+ .transform(|range| Range::new(range.to(), range.to()));
12941295
1295− let end = doc.text().len_chars();
1296+ let end = text.len_chars();
12961297
12971298 if selection.iter().any(|range| range.head == end) {
12981299 let transaction = Transaction::change(