[PATCH 2 of 3] ui: prompt_key -- like prompt, but inputs only one keystroke

Kirill Smelkov kirr at mns.spb.ru
Tue Dec 25 09:52:26 CST 2007


# HG changeset patch
# User Kirill Smelkov <kirr at mns.spb.ru>
# Date 1198597912 -10800
# Node ID d829b3f63a93b3035782dd4da569e9df54d696c1
# Parent  b74f1d14d56ea89736a1505e6a0dc1e9f246b81a
ui: prompt_key -- like prompt, but inputs only one keystroke

rationale: we'll need this for 'record'

diff --git a/mercurial/ui.py b/mercurial/ui.py
--- a/mercurial/ui.py
+++ b/mercurial/ui.py
@@ -22,6 +22,9 @@ def updateconfig(source, dest, sections=
             dest.add_section(section)
         for name, value in source.items(section, raw=True):
             dest.set(section, name, value)
+
+# ui related flags
+INPUT_KEYSTROKE =   0x0001
 
 class ui(object):
     _isatty = None
@@ -410,16 +413,26 @@ class ui(object):
             line = line[:-1]
         return line
 
-    def prompt(self, msg, pat=None, default="y", matchflags=0):
+    def prompt(self, msg, pat=None, default="y", matchflags=0, inputflags=0):
         if not self.interactive: return default
         try:
-            r = self._readline(msg + ' ')
+            if inputflags & INPUT_KEYSTROKE:
+                self.write(msg + ' ')
+                self.flush()
+                r = util.getch()
+                self.write(r + '\n')
+            else:
+                r = self._readline(msg + ' ')
+
             if not pat or re.match(pat, r, matchflags):
                 return r
             else:
                 self.write(_("unrecognized response\n"))
         except EOFError:
             raise util.Abort(_('response expected'))
+
+    def prompt_key(self, msg, pat=None, default='y', matchflags=0):
+        return self.prompt(msg, pat, default, matchflags, inputflags=INPUT_KEYSTROKE)
 
     def getpass(self, prompt=None, default=None):
         if not self.interactive: return default


More information about the Mercurial-devel mailing list