diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
index 16e69e6b357b0a1a05c920989e408676cb670168_bWVyY3VyaWFsL2ZpbGVtZXJnZS5weQ==..a1e43e85d2940de1732c69a53c279d61e1cc1698_bWVyY3VyaWFsL2ZpbGVtZXJnZS5weQ== 100644
--- a/mercurial/filemerge.py
+++ b/mercurial/filemerge.py
@@ -120,7 +120,8 @@
 
     # then merge tools
     tools = {}
+    disabled = set()
     for k, v in ui.configitems("merge-tools"):
         t = k.split('.')[0]
         if t not in tools:
             tools[t] = int(_toolstr(ui, t, "priority", "0"))
@@ -123,5 +124,7 @@
     for k, v in ui.configitems("merge-tools"):
         t = k.split('.')[0]
         if t not in tools:
             tools[t] = int(_toolstr(ui, t, "priority", "0"))
+        if _toolbool(ui, t, "disabled", False):
+            disabled.add(t)
     names = tools.keys()
@@ -127,5 +130,5 @@
     names = tools.keys()
-    tools = sorted([(-p, t) for t, p in tools.items()])
+    tools = sorted([(-p, t) for t, p in tools.items() if t not in disabled])
     uimerge = ui.config("ui", "merge")
     if uimerge:
         if uimerge not in names:
diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt
index 16e69e6b357b0a1a05c920989e408676cb670168_bWVyY3VyaWFsL2hlbHAvY29uZmlnLnR4dA==..a1e43e85d2940de1732c69a53c279d61e1cc1698_bWVyY3VyaWFsL2hlbHAvY29uZmlnLnR4dA== 100644
--- a/mercurial/help/config.txt
+++ b/mercurial/help/config.txt
@@ -1004,7 +1004,10 @@
   kdiff3.priority = 1
 
   # Changing the priority of preconfigured tool
-  vimdiff.priority = 0
+  meld.priority = 0
+
+  # Disable a preconfigured tool
+  vimdiff.disabled = yes
 
   # Define new tool
   myHtmlTool.args = -m $local $other $base $output
diff --git a/tests/test-merge-tools.t b/tests/test-merge-tools.t
index 16e69e6b357b0a1a05c920989e408676cb670168_dGVzdHMvdGVzdC1tZXJnZS10b29scy50..a1e43e85d2940de1732c69a53c279d61e1cc1698_dGVzdHMvdGVzdC1tZXJnZS10b29scy50 100644
--- a/tests/test-merge-tools.t
+++ b/tests/test-merge-tools.t
@@ -193,6 +193,26 @@
   M f
   ? f.orig
 
+or true set to disabled:
+  $ beforemerge
+  [merge-tools]
+  false.whatever=
+  true.priority=1
+  # hg update -C 1
+  $ hg merge -r 2 --config merge-tools.true.disabled=yes
+  merging f
+  merging f failed!
+  0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
+  [1]
+  $ aftermerge
+  # cat f
+  revision 1
+  space
+  # hg stat
+  M f
+  ? f.orig
+
 or true.executable not found in PATH:
 
   $ beforemerge