[PATCH] daemon: Replace Unicode single quotes with poor simulacra.

OpenSubmitted by Tobias Geerinckx-Rice.
Details
4 participants
  • Thiago Jung Bauermann
  • Ludovic Courtès
  • Maxime Devos
  • Tobias Geerinckx-Rice
Owner
unassigned
Severity
normal
T
T
Tobias Geerinckx-Rice wrote on 18 May 2021 18:34
(address . guix-patches@gnu.org)
20210518163405.3618-1-me@tobias.gr
The correct ‘ and ’ are not considered word boundaries by some(?)
terminal emulators like Alacritty, making double-click selection
tedious. Avoid them in untranslated strings like it's 1992.

* nix/libstore/build.cc (UserLock::acquire)
(DerivationGoal::haveDerivation, DerivationGoal::closureRepaired)
(DerivationGoal::startBuilder, DerivationGoal::runChild)
(DerivationGoal::registerOutputs): Replace ‘’ with `' in output.
* nix/libstore/local-store.cc (canonicalisePathMetaData_)
(LocalStore::queryValidPathId): Likewise.
* nix/libstore/optimise-store.cc (LocalStore::optimisePath_): Likewise.
* nix/libutil/util.cc (readLink): Likewise.
---
nix/libstore/build.cc | 24 ++++++++++++------------
nix/libstore/local-store.cc | 4 ++--
nix/libstore/optimise-store.cc | 4 ++--
nix/libutil/util.cc | 2 +-
4 files changed, 17 insertions(+), 17 deletions(-)

Toggle diff (157 lines)
diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc
index 5697ae5a43..d6f9a15a46 100644
--- a/nix/libstore/build.cc
+++ b/nix/libstore/build.cc
@@ -525,7 +525,7 @@ void UserLock::acquire()
             int err = getgrouplist(pw->pw_name, pw->pw_gid,
                 supplementaryGIDs.data(), &ngroups);
             if (err == -1)
-                throw Error(format("failed to get list of supplementary groups for ‘%1%’") % pw->pw_name);
+                throw Error(format("failed to get list of supplementary groups for `%1%’") % pw->pw_name);
 
             supplementaryGIDs.resize(ngroups);
 
@@ -903,7 +903,7 @@ void DerivationGoal::haveDerivation()
     trace("loading derivation");
 
     if (nrFailed != 0) {
-        printMsg(lvlError, format("cannot build missing derivation ‘%1%’") % drvPath);
+        printMsg(lvlError, format("cannot build missing derivation `%1%’") % drvPath);
         done(BuildResult::MiscFailure);
         return;
     }
@@ -1058,7 +1058,7 @@ void DerivationGoal::closureRepaired()
 {
     trace("closure repaired");
     if (nrFailed > 0)
-        throw Error(format("some paths in the output closure of derivation ‘%1%’ could not be repaired") % drvPath);
+        throw Error(format("some paths in the output closure of derivation `%1%’ could not be repaired") % drvPath);
     done(BuildResult::AlreadyValid);
 }
 
@@ -1748,10 +1748,10 @@ void DerivationGoal::startBuilder()
         printMsg(lvlChatty, format("setting up chroot environment in `%1%'") % chrootRootDir);
 
         if (mkdir(chrootRootDir.c_str(), 0750) == -1)
-            throw SysError(format("cannot create ‘%1%’") % chrootRootDir);
+            throw SysError(format("cannot create `%1%’") % chrootRootDir);
 
         if (chown(chrootRootDir.c_str(), 0, buildUser.getGID()) == -1)
-            throw SysError(format("cannot change ownership of ‘%1%’") % chrootRootDir);
+            throw SysError(format("cannot change ownership of `%1%’") % chrootRootDir);
 
         /* Create a writable /tmp in the chroot.  Many builders need
            this.  (Of course they should really respect $TMPDIR
@@ -1808,7 +1808,7 @@ void DerivationGoal::startBuilder()
         chmod_(chrootStoreDir, 01775);
 
         if (chown(chrootStoreDir.c_str(), 0, buildUser.getGID()) == -1)
-            throw SysError(format("cannot change ownership of ‘%1%’") % chrootStoreDir);
+            throw SysError(format("cannot change ownership of `%1%’") % chrootStoreDir);
 
         foreach (PathSet::iterator, i, inputPaths) {
             struct stat st;
@@ -2007,13 +2007,13 @@ void DerivationGoal::runChild()
                local to the namespace, though, so setting MS_PRIVATE
                does not affect the outside world. */
             if (mount(0, "/", 0, MS_REC|MS_PRIVATE, 0) == -1) {
-                throw SysError("unable to make ‘/’ private mount");
+                throw SysError("unable to make `/’ private mount");
             }
 
             /* Bind-mount chroot directory to itself, to treat it as a
                different filesystem from /, as needed for pivot_root. */
             if (mount(chrootRootDir.c_str(), chrootRootDir.c_str(), 0, MS_BIND, 0) == -1)
-                throw SysError(format("unable to bind mount ‘%1%’") % chrootRootDir);
+                throw SysError(format("unable to bind mount `%1%’") % chrootRootDir);
 
             /* Set up a nearly empty /dev, unless the user asked to
                bind-mount the host /dev. */
@@ -2423,7 +2423,7 @@ void DerivationGoal::registerOutputs()
                     if (pathExists(dst)) deletePath(dst);
                     if (rename(actualPath.c_str(), dst.c_str()))
                         throw SysError(format("renaming `%1%' to `%2%'") % actualPath % dst);
-                    throw Error(format("derivation `%1%' may not be deterministic: output `%2%' differs from ‘%3%’")
+                    throw Error(format("derivation `%1%' may not be deterministic: output `%2%' differs from `%3%’")
                         % drvPath % path % dst);
                 } else
                     throw Error(format("derivation `%1%' may not be deterministic: output `%2%' differs")
@@ -2501,11 +2501,11 @@ void DerivationGoal::registerOutputs()
                 Path prev = i->path + checkSuffix;
                 if (pathExists(prev))
                     throw NotDeterministic(
-                        format("output ‘%1%’ of ‘%2%’ differs from ‘%3%’ from previous round")
+                        format("output `%1%’ of `%2%’ differs from `%3%’ from previous round")
                         % i->path % drvPath % prev);
                 else
                     throw NotDeterministic(
-                        format("output ‘%1%’ of ‘%2%’ differs from previous round")
+                        format("output `%1%’ of `%2%’ differs from previous round")
                         % i->path % drvPath);
             }
         assert(false); // shouldn't happen
@@ -2518,7 +2518,7 @@ void DerivationGoal::registerOutputs()
             if (curRound < nrRounds) {
                 Path dst = i.second.path + checkSuffix;
                 if (rename(i.second.path.c_str(), dst.c_str()))
-                    throw SysError(format("renaming ‘%1%’ to ‘%2%’") % i.second.path % dst);
+                    throw SysError(format("renaming `%1%’ to `%2%’") % i.second.path % dst);
             }
         }
 
diff --git a/nix/libstore/local-store.cc b/nix/libstore/local-store.cc
index 675d1ba66f..8b9c9bebd5 100644
--- a/nix/libstore/local-store.cc
+++ b/nix/libstore/local-store.cc
@@ -380,7 +380,7 @@ static void canonicalisePathMetaData_(const Path & path, uid_t fromUid, InodesSe
 
     /* Really make sure that the path is of a supported type. */
     if (!(S_ISREG(st.st_mode) || S_ISDIR(st.st_mode) || S_ISLNK(st.st_mode)))
-        throw Error(format("file ‘%1%’ has an unsupported type") % path);
+        throw Error(format("file `%1%’ has an unsupported type") % path);
 
     /* Fail if the file is not owned by the build user.  This prevents
        us from messing up the ownership/permissions of files
@@ -647,7 +647,7 @@ uint64_t LocalStore::queryValidPathId(const Path & path)
 {
     auto use(stmtQueryPathInfo.use()(path));
     if (!use.next())
-        throw Error(format("path ‘%1%’ is not valid") % path);
+        throw Error(format("path `%1%’ is not valid") % path);
     return use.getInt(0);
 }
 
diff --git a/nix/libstore/optimise-store.cc b/nix/libstore/optimise-store.cc
index eb303ab4c3..2662253b91 100644
--- a/nix/libstore/optimise-store.cc
+++ b/nix/libstore/optimise-store.cc
@@ -181,12 +181,12 @@ void LocalStore::optimisePath_(OptimiseStats & stats, const Path & path, InodeHa
     }
 
     if (st.st_size != stLink.st_size) {
-        printMsg(lvlError, format("removing corrupted link ‘%1%’") % linkPath);
+        printMsg(lvlError, format("removing corrupted link `%1%’") % linkPath);
         unlink(linkPath.c_str());
         goto retry;
     }
 
-    printMsg(lvlTalkative, format("linking ‘%1%’ to ‘%2%’") % path % linkPath);
+    printMsg(lvlTalkative, format("linking `%1%’ to `%2%’") % path % linkPath);
 
     /* Make the containing directory writable, but only if it's not
        the store itself (we don't want or need to mess with its
diff --git a/nix/libutil/util.cc b/nix/libutil/util.cc
index 69f1c634a9..cf5099a4fe 100644
--- a/nix/libutil/util.cc
+++ b/nix/libutil/util.cc
@@ -202,7 +202,7 @@ Path readLink(const Path & path)
     if (rlsize == -1)
         throw SysError(format("reading symbolic link '%1%'") % path);
     else if (rlsize > st.st_size)
-        throw Error(format("symbolic link ‘%1%’ size overflow %2% > %3%")
+        throw Error(format("symbolic link `%1%’ size overflow %2% > %3%")
             % path % rlsize % st.st_size);
     return string(buf, st.st_size);
 }
-- 
2.31.1
M
M
Maxime Devos wrote on 18 May 2021 19:13
0ec7123db2721333ebe103200e42a266c4015d03.camel@telenet.be
Tobias Geerinckx-Rice via Guix-patches via schreef op di 18-05-2021 om 18:34 [+0200]:
Toggle quote (4 lines)
> The correct ‘ and ’ are not considered word boundaries by some(?)
> terminal emulators like Alacritty, making double-click selection
> tedious. Avoid them in untranslated strings like it's 1992.

N months later, while Tobias Geerinckx-Rice is asleep, a new patch appears:

Typographically Correct via Guix-patches [...]
Toggle quote (6 lines)
> It isn't 1992 anymore; the proper ‘ and ’ quotation marks are now
> well-supported in software. Use the typographically-correct ‘ and ’
> in the English translation instead of the unrelated characters ` and '.
>
> [...]

FWIW, double-click seems to work well in Emacs, Gnome Terminal.
Instead of working-around bugs, can ‘we’ fix the bug in Alacritty?
Or at least, open a bug report?

Unfortunately, GitHub's TOS and Privacy Policy were ... not great
last time I checked, though I can't find the ‘badness’ anymore except
for some weird section on ‘idemnity’. In any case, there is an #alacritty
channel:


Greetings,
Maxime.
-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYKP11RccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7pa/AP43GEjb39oLL2eW9z6fCdcPDg0A
zxUMZAd1XPWZ+3HfQQEApl/d41lhfOVNNCKsVCNjSja4XUBV8pqSyAoZ/YHJWAI=
=2Dc2
-----END PGP SIGNATURE-----


L
L
Ludovic Courtès wrote on 21 May 2021 12:28
Re: bug#48501: [PATCH] daemon: Replace Unicode single quotes with poor simulacra.
(name . Tobias Geerinckx-Rice)(address . me@tobias.gr)(address . 48501@debbugs.gnu.org)
87h7iw4bzo.fsf@gnu.org
Hi,

Tobias Geerinckx-Rice <me@tobias.gr> skribis:

Toggle quote (19 lines)
> The correct ‘ and ’ are not considered word boundaries by some(?)
> terminal emulators like Alacritty, making double-click selection
> tedious. Avoid them in untranslated strings like it's 1992.
>
> * nix/libstore/build.cc (UserLock::acquire)
> (DerivationGoal::haveDerivation, DerivationGoal::closureRepaired)
> (DerivationGoal::startBuilder, DerivationGoal::runChild)
> (DerivationGoal::registerOutputs): Replace ‘’ with `' in output.
> * nix/libstore/local-store.cc (canonicalisePathMetaData_)
> (LocalStore::queryValidPathId): Likewise.
> * nix/libstore/optimise-store.cc (LocalStore::optimisePath_): Likewise.
> * nix/libutil/util.cc (readLink): Likewise.
> ---
> nix/libstore/build.cc | 24 ++++++++++++------------
> nix/libstore/local-store.cc | 4 ++--
> nix/libstore/optimise-store.cc | 4 ++--
> nix/libutil/util.cc | 2 +-
> 4 files changed, 17 insertions(+), 17 deletions(-)

No objection from me!

Ludo’.
T
T
Thiago Jung Bauermann wrote on 21 May 2021 16:23
Re: [bug#48501] [PATCH] daemon: Replace Unicode single quotes with poor simulacra.
(name . Tobias Geerinckx-Rice)(address . me@tobias.gr)
3094026.NOWVCxSc26@popigai
Hello,

[ I'm just an onlooker on the Guix mailing lists, so don't assign much
weight to this comment. ]

Em terça-feira, 18 de maio de 2021, às 13:34:05 -03, Tobias Geerinckx-Rice
via Guix-patches via escreveu:
Toggle quote (32 lines)
> The correct ‘ and ’ are not considered word boundaries by some(?)
> terminal emulators like Alacritty, making double-click selection
> tedious. Avoid them in untranslated strings like it's 1992.
>
> * nix/libstore/build.cc (UserLock::acquire)
> (DerivationGoal::haveDerivation, DerivationGoal::closureRepaired)
> (DerivationGoal::startBuilder, DerivationGoal::runChild)
> (DerivationGoal::registerOutputs): Replace ‘’ with `' in output.
> * nix/libstore/local-store.cc (canonicalisePathMetaData_)
> (LocalStore::queryValidPathId): Likewise.
> * nix/libstore/optimise-store.cc (LocalStore::optimisePath_): Likewise.
> * nix/libutil/util.cc (readLink): Likewise.
> ---
> nix/libstore/build.cc | 24 ++++++++++++------------
> nix/libstore/local-store.cc | 4 ++--
> nix/libstore/optimise-store.cc | 4 ++--
> nix/libutil/util.cc | 2 +-
> 4 files changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc
> index 5697ae5a43..d6f9a15a46 100644
> --- a/nix/libstore/build.cc
> +++ b/nix/libstore/build.cc
> @@ -525,7 +525,7 @@ void UserLock::acquire()
> int err = getgrouplist(pw->pw_name, pw->pw_gid,
> supplementaryGIDs.data(), &ngroups);
> if (err == -1)
> - throw Error(format("failed to get list of supplementary
> groups for ‘%1%’") % pw->pw_name); + throw
> Error(format("failed to get list of supplementary groups for `%1%’") %
> pw->pw_name);

IMHO the backtick looks ugly when it tries to mimick the opening quote
character. I think the text looks better if both quote characters are
replaced with the straight quote character, e.g. '%1'.

--
Regards from the peanut gallery,
Thiago
?