From d08180c1347a2d9ac68c856eb358ad77fdcb2d15 Mon Sep 17 00:00:00 2001
From: Daniel Hahler <git@thequod.de>
Date: Sun, 10 Mar 2019 22:41:47 +0100
Subject: [PATCH 1/2] Fix/re-enable quoted_insert: use self.evt.data
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Reverts https://github.com/pypy/pyrepl/commit/a59f338cc7b6c.

Fixes:

  File "/usr/lib/python3.7/cmd.py", line 126, in cmdloop
    line = input(self.prompt)
  File "…/src/pyrepl/pyrepl/readline.py", line 229, in raw_input
    ret = reader.readline(startup_hook=self.startup_hook)
  File "…/src/pyrepl/pyrepl/reader.py", line 605, in readline
    self.handle1()
  File "…/src/pyrepl/pyrepl/reader.py", line 588, in handle1
    self.do_cmd(cmd)
  File "…/src/pyrepl/pyrepl/reader.py", line 535, in do_cmd
    cmd.do()
  File "…/src/pyrepl/pyrepl/commands.py", line 373, in do
    r.insert((self.event + r.console.getpending().data) * r.get_arg())
TypeError: can't concat str to bytearray
---
 pyrepl/commands.py        | 8 ++++++--
 testing/infrastructure.py | 4 ++++
 testing/test_wishes.py    | 2 +-
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/pyrepl/commands.py b/pyrepl/commands.py
index af71c70..17a6190 100644
--- a/pyrepl/commands.py
+++ b/pyrepl/commands.py
@@ -369,8 +369,12 @@ def do(self):
 
 class qIHelp(Command):
     def do(self):
+        from .reader import disp_str
+
         r = self.reader
-        r.insert((bytes(self.event) + r.console.getpending().data) * r.get_arg())
+        pending = r.console.getpending().data
+        disp = disp_str((self.event + pending).encode())[0]
+        r.insert(disp * r.get_arg())
         r.pop_input_trans()
 
 from pyrepl import input
@@ -379,7 +383,7 @@ class QITrans(object):
     def push(self, evt):
         self.evt = evt
     def get(self):
-        return ('qIHelp', self.evt.raw)
+        return ('qIHelp', self.evt.data)
 
 class quoted_insert(Command):
     kills_digit_arg = 0
diff --git a/testing/infrastructure.py b/testing/infrastructure.py
index c5a4c96..e90298b 100644
--- a/testing/infrastructure.py
+++ b/testing/infrastructure.py
@@ -55,6 +55,10 @@ def get_event(self, block=1):
             print("event", ev)
         return Event(*ev)
 
+    def getpending(self):
+        """Nothing pending, but do not return None here."""
+        return Event('key', '', b'')
+
 
 class TestReader(Reader):
     __test__ = False
diff --git a/testing/test_wishes.py b/testing/test_wishes.py
index 650dff7..d0c1e6f 100644
--- a/testing/test_wishes.py
+++ b/testing/test_wishes.py
@@ -27,5 +27,5 @@ def test_quoted_insert_repeat():
     read_spec([
         (('digit-arg', '3'),      ['']),
         (('quoted-insert', None), ['']),
-        (('self-insert', '\033'), ['^[^[^[']),
+        (('key', '\033'),         ['^[^[^[']),
         (('accept', None),        None)])

From 9a24f25ee45aab7c012fac58b03e6bca5f9e0f31 Mon Sep 17 00:00:00 2001
From: Daniel Hahler <git@thequod.de>
Date: Thu, 15 Aug 2019 05:26:06 +0200
Subject: [PATCH 2/2] fixup! Fix/re-enable quoted_insert: use self.evt.data

---
 pyrepl/commands.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pyrepl/commands.py b/pyrepl/commands.py
index 17a6190..c121f34 100644
--- a/pyrepl/commands.py
+++ b/pyrepl/commands.py
@@ -373,7 +373,7 @@ def do(self):
 
         r = self.reader
         pending = r.console.getpending().data
-        disp = disp_str((self.event + pending).encode())[0]
+        disp = disp_str((self.event + pending))[0]
         r.insert(disp * r.get_arg())
         r.pop_input_trans()