yank.py: Fix problems with yanking shell metacharacters.
authorDenis Kasak <dkasak@termina.org.uk>
Tue, 12 May 2015 19:50:28 +0000 (21:50 +0200)
committerDenis Kasak <dkasak@termina.org.uk>
Tue, 12 May 2015 20:06:12 +0000 (22:06 +0200)
Switch to using the subprocess module instead of going through the shell
(via system()) since the latter is problematic if the string to be
yanked contains shell metacharacters.

plugins/yank.py

index 24653bd..62669ba 100644 (file)
@@ -7,13 +7,15 @@
 from canto_curses.taglist import TagListPlugin
 from canto_curses.command import register_commands
 
+from subprocess import Popen, PIPE
 from os import system
 import logging
 
 log = logging.getLogger("YANK")
 
 def yank(content):
-    system('echo -n %s | xclip' % (content,))
+    p = Popen(["xclip"], stdin=PIPE)
+    p.communicate(content.encode("utf-8"))
 
 class TagListYank(TagListPlugin):
     def __init__(self, taglist):
@@ -30,6 +32,6 @@ class TagListYank(TagListPlugin):
 
     def cmd_yank_link(self, items):
         yank(items[0].content["link"])
-        
+
     def cmd_yank_title(self, items):
         yank(items[0].content["title"])