curses: back out d2227d4c9e6b (do not initialize LC_ALL to user settings)
authorManuel Jacob <me@manueljacob.de>
Sun, 28 Jun 2020 17:49:14 +0200
changeset 45017 a65c60f3280e
parent 45016 752da6863e39
child 45018 f2dc337117b9
curses: back out d2227d4c9e6b (do not initialize LC_ALL to user settings) The changeset was based on a25343d16ebe, which will be backed out, too. Another fix for the problem will be resubmitted to the stable branch.
hgext/histedit.py
mercurial/crecord.py
--- a/hgext/histedit.py	Thu Jun 25 11:22:34 2020 +0200
+++ b/hgext/histedit.py	Sun Jun 28 17:49:14 2020 +0200
@@ -201,6 +201,7 @@
     termios = None
 
 import functools
+import locale
 import os
 import struct
 
@@ -1710,6 +1711,10 @@
         ctxs = []
         for i, r in enumerate(revs):
             ctxs.append(histeditrule(ui, repo[r], i))
+        # Curses requires setting the locale or it will default to the C
+        # locale. This sets the locale to the user's default system
+        # locale.
+        locale.setlocale(locale.LC_ALL, '')
         rc = curses.wrapper(functools.partial(_chisteditmain, repo, ctxs))
         curses.echo()
         curses.endwin()
--- a/mercurial/crecord.py	Thu Jun 25 11:22:34 2020 +0200
+++ b/mercurial/crecord.py	Sun Jun 28 17:49:14 2020 +0200
@@ -10,6 +10,7 @@
 
 from __future__ import absolute_import
 
+import locale
 import os
 import re
 import signal
@@ -565,6 +566,9 @@
     """
     ui.write(_(b'starting interactive selection\n'))
     chunkselector = curseschunkselector(headerlist, ui, operation)
+    # This is required for ncurses to display non-ASCII characters in
+    # default user locale encoding correctly.  --immerrr
+    locale.setlocale(locale.LC_ALL, '')
     origsigtstp = sentinel = object()
     if util.safehasattr(signal, b'SIGTSTP'):
         origsigtstp = signal.getsignal(signal.SIGTSTP)