diff --git a/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java b/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java index 032e8498e..a0857a072 100644 --- a/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java +++ b/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java @@ -5644,10 +5644,28 @@ public boolean mouse() { } public boolean beginPaste() { - String str = doReadStringUntil(BRACKETED_PASTE_END); + final Object SELF_INSERT = new Object(); + final Object END_PASTE = new Object(); + KeyMap keyMap = new KeyMap<>(); + keyMap.setUnicode(SELF_INSERT); + keyMap.setNomatch(SELF_INSERT); + keyMap.setAmbiguousTimeout(0); + keyMap.bind(END_PASTE, BRACKETED_PASTE_END); + StringBuilder sb = new StringBuilder(); + while (true) { + Object b = doReadBinding(keyMap, null); + if (b == END_PASTE) { + break; + } + String s = getLastBinding(); + if ("\r".equals(s)) { + s = "\n"; + } + sb.append(s); + } regionActive = RegionType.PASTE; regionMark = getBuffer().cursor(); - getBuffer().write(str.replace('\r', '\n')); + getBuffer().write(sb.toString().replace('\r', '\n')); return true; }