home · contact · privacy
Filter pasted strings before entering them into prompt. master
authorChristian Heller <c.heller@plomlompom.de>
Sun, 8 Jun 2025 14:20:00 +0000 (16:20 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sun, 8 Jun 2025 14:20:00 +0000 (16:20 +0200)
ircplom.py

index 3c23a551c2fbb2f42a7577740ca61b2c64029306..5a8565660b5a8931ee82e545e40c646c36628a40 100755 (executable)
@@ -148,8 +148,7 @@ class Terminal:
             if unhandleds:
                 fused = ''.join([chr(n) for n in unhandleds])
                 if fused.startswith(OSC_52_PREFIX):
             if unhandleds:
                 fused = ''.join([chr(n) for n in unhandleds])
                 if fused.startswith(OSC_52_PREFIX):
-                    encoded = fused[len(OSC_52_PREFIX):]
-                    if not encoded:
+                    if not (encoded := fused[len(OSC_52_PREFIX):]):
                         while True:
                             gotch = self._blessed.getch()
                             if ord(gotch) == 7:
                         while True:
                             gotch = self._blessed.getch()
                             if ord(gotch) == 7:
@@ -836,7 +835,17 @@ class KeyboardLoop(Loop):
     def process_bonus(self, yielded: str) -> None:
         if yielded.startswith(PREFIX_B64):
             encoded = yielded[len(PREFIX_B64):]
     def process_bonus(self, yielded: str) -> None:
         if yielded.startswith(PREFIX_B64):
             encoded = yielded[len(PREFIX_B64):]
-            self.broadcast('PROMPT_ADD', b64decode(encoded).decode('utf-8'))
+            to_paste = ''
+            for i, c in enumerate(b64decode(encoded).decode('utf-8')):
+                if i > 512:
+                    break
+                if c.isprintable():
+                    to_paste += c
+                elif c.isspace():
+                    to_paste += ' '
+                else:
+                    to_paste += '#'
+            self.broadcast('PROMPT_ADD', to_paste)
         elif yielded in KEYBINDINGS:
             self.broadcast('KEYBINDING', KEYBINDINGS[yielded])
         elif len(yielded) == 1:
         elif yielded in KEYBINDINGS:
             self.broadcast('KEYBINDING', KEYBINDINGS[yielded])
         elif len(yielded) == 1: