[CalendarServer-changes] [8335] CalendarServer/trunk/calendarserver/tools/shell.py

source_changes at macosforge.org source_changes at macosforge.org
Fri Nov 18 14:34:38 PST 2011


Revision: 8335
          http://trac.macosforge.org/projects/calendarserver/changeset/8335
Author:   wsanchez at apple.com
Date:     2011-11-18 14:34:38 -0800 (Fri, 18 Nov 2011)
Log Message:
-----------
Add emulate command

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tools/shell.py

Modified: CalendarServer/trunk/calendarserver/tools/shell.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell.py	2011-11-18 22:21:38 UTC (rev 8334)
+++ CalendarServer/trunk/calendarserver/tools/shell.py	2011-11-18 22:34:38 UTC (rev 8335)
@@ -115,8 +115,13 @@
         os.write(self.terminalFD, "\r\x1bc\r")
 
 
-class UnknownArguments (Exception):
+class UsageError (Exception):
     """
+    Usage error.
+    """
+
+class UnknownArguments (UsageError):
+    """
     Unknown arguments.
     """
     def __init__(self, arguments):
@@ -125,6 +130,7 @@
 
 
 EMULATE_EMACS = object()
+EMULATE_VI    = object()
 
 class ShellProtocol(ReceiveLineProtocol):
     """
@@ -153,7 +159,7 @@
         self.keyHandlers['\x1c'] = self.handle_QUIT  # Control-\
         self.keyHandlers['\x0c'] = self.handle_FF    # Control-L
 
-        if self.emulate is EMULATE_EMACS:
+        if self.emulate == EMULATE_EMACS:
             # EMACS key bindinds
             self.keyHandlers['\x10'] = self.handle_UP     # Control-P
             self.keyHandlers['\x0e'] = self.handle_DOWN   # Control-N
@@ -178,7 +184,7 @@
 
     def handle_EOF(self):
         if self.lineBuffer:
-            if self.emulate is EMULATE_EMACS:
+            if self.emulate == EMULATE_EMACS:
                 self.handle_DELETE()
             else:
                 self.terminal.write('\a')
@@ -222,8 +228,8 @@
 
             m = getattr(self, "cmd_%s" % (cmd,), None)
             if m:
-                def handleUnknownArguments(f):
-                    f.trap(UnknownArguments)
+                def handleUsageError(f):
+                    f.trap(UsageError)
                     self.terminal.write("%s\n" % (f.value,))
 
                 def handleException(f):
@@ -247,7 +253,7 @@
                 else:
                     # Add time to test callbacks
                     self.service.reactor.callLater(4, d.callback, None)
-                d.addErrback(handleUnknownArguments)
+                d.addErrback(handleUsageError)
                 d.addErrback(handleException)
                 d.addCallback(next)
             else:
@@ -335,6 +341,31 @@
             for info in sorted(result):
                 self.terminal.write("  %s - %s\n" % (info))
 
+    def cmd_emulate(self, tokens):
+        """
+        Emulate editor behavior.
+        The only correct argument is "emacs".
+
+        usage: emulate editor
+        """
+        if not tokens:
+            raise UsageError("Editor not specified.")
+
+        editor = tokens.pop(0).lower()
+
+        if tokens:
+            raise UnknownArguments(tokens)
+
+        if editor == "emacs":
+            self.terminal.write("Emulating EMACS.")
+            self.emulate = EMULATE_EMACS
+        elif editor == "vi":
+            self.terminal.write("Seriously?!?!?")
+            self.emulate = EMULATE_VI
+        else:
+            raise UsageError("Unknown editor: %s" % (editor,))
+        self.terminal.nextLine()
+
     def cmd_pwd(self, tokens):
         """
         Print working folder.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20111118/a511a8fc/attachment.html>


More information about the calendarserver-changes mailing list