diff cmd2.py @ 25:6948d1f9e4b4

missing xclip half-working
author catherine@localhost
date Fri, 16 May 2008 18:09:34 -0400
parents f9196cf5ef51
children 82dde2f60e46
line wrap: on
line diff
--- a/cmd2.py	Fri May 16 17:36:28 2008 -0400
+++ b/cmd2.py	Fri May 16 18:09:34 2008 -0400
@@ -141,14 +141,24 @@
         if redirect:
             return newStatement, redirect, 'r'
         return statement, '', ''
-        
+            
     def pasteBufferProcess(self, mode='read'):
         if mode == 'read':
-            command = 'xclip -o -sel clip'
+            command = 'xc1ip -o -sel clip'
         else:
             command = 'xclip -sel clip'
-        result = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
-        #TODO: need a better response to user who lacks xclip
+        errf = tempfile.TemporaryFile()
+        result = subprocess.Popen(command, shell=True, stderr=errf, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
+        errf.seek(0)
+        if 'not found' in errf.read():
+            msg = """Redirecting to or from paste buffer requires xclip to be installed on operating system.
+            On Debian/Ubuntu, 'sudo apt-get install xclip' will install it."""
+            print msg
+            print '---'
+            errf.seek(0)
+            print errf.read()
+            print '---'
+            raise EnvironmentError, msg
         return result
         
     def onecmd(self, line):
@@ -166,17 +176,21 @@
         if command in self.multilineCommands:
             statement = self.finishStatement(statement)
         statekeeper = None
+        stop = 0
         statement, redirect, mode = self.parseRedirectors(statement)
         if redirect == self._TO_PASTE_BUFFER:
-            if mode in ('a', 'r'):
-                clipcontents = self.pasteBufferProcess('read').stdout.read()
-            if mode in ('w', 'a'):
-                statekeeper = Statekeeper(self, ('stdout',))
-                self.stdout = self.pasteBufferProcess('write').stdin
-                if mode == 'a':
-                    self.stdout.write(clipcontents)
-            else:
-                statement = '%s %s' % (statement, clipcontents)
+            try:
+                if mode in ('a', 'r'):
+                    clipcontents = self.pasteBufferProcess('read').stdout.read()
+                if mode in ('w', 'a'):
+                    statekeeper = Statekeeper(self, ('stdout',))
+                    self.stdout = self.pasteBufferProcess('write').stdin
+                    if mode == 'a':
+                        self.stdout.write(clipcontents)
+                else:
+                    statement = '%s %s' % (statement, clipcontents)
+            except EnvironmentError, e:
+                return 0
         elif redirect:
             if mode in ('w','a'):
                 statekeeper = Statekeeper(self, ('stdout',))