diff --git a/hgeditor b/hgeditor
new file mode 100644
index 0000000000000000000000000000000000000000..9a2075c0b9b8b50784f9313027654fdfe0c2b442_aGdlZGl0b3I=
--- /dev/null
+++ b/hgeditor
@@ -0,0 +1,21 @@
+#!/bin/bash
+#
+# This is an example of using HGEDITOR to automate the signing of
+# commits and so on.
+
+MANIFEST=`grep '^HG: manifest hash' $1 | cut -b 19-`
+if grep -q "^HG: merge resolve" $1 ; then
+    # we don't sign merges
+    $EDITOR $1
+else
+    T=`mktemp`
+    CHANGED=`grep '^HG: changed' $1 | cut -b 13-`
+    # show a diff so writing commit comments is easier
+    hg diff $CHANGED >> $T
+    echo -e "\n\nmanifest hash: $MANIFEST" > $1
+    emacs -nw $T $1 
+    head -1 $1 > $T
+    echo >> $T
+    gpg -a -u $HGUSER -o - --clearsign $1 >> $T
+    mv $T $1
+fi
diff --git a/mercurial/hg.py b/mercurial/hg.py
index db3aa85b937971a17f2479c28e54b7da7d2cd72a_bWVyY3VyaWFsL2hnLnB5..9a2075c0b9b8b50784f9313027654fdfe0c2b442_bWVyY3VyaWFsL2hnLnB5 100644
--- a/mercurial/hg.py
+++ b/mercurial/hg.py
@@ -893,5 +893,5 @@
         f.write(text)
         f.close()
 
-        editor = os.environ.get("EDITOR", "vi")
+        editor = os.environ.get("HGEDITOR") or os.environ.get("EDITOR", "vi")
         r = os.system("%s %s" % (editor, name))
@@ -897,4 +897,5 @@
         r = os.system("%s %s" % (editor, name))
+
         if r:
             raise "Edit failed!"
 
@@ -902,7 +903,6 @@
         t = re.sub("(?m)^HG:.*\n", "", t)
 
         return t
-
     
 class httprangereader:
     def __init__(self, url):