From 690b7ca81e22513ec6a80e402928badd4a856c71 Mon Sep 17 00:00:00 2001 From: Guillaume Maudoux Date: Sun, 14 May 2017 13:37:35 +0200 Subject: [RFC 0004] Replace Unicode Quotes (#4) * Add Replace Unicode Quotes draft. * Replace Unicode Quotes: various fixes. --- rfcs/0004-replace-unicode-quotes.md | 104 ++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 rfcs/0004-replace-unicode-quotes.md diff --git a/rfcs/0004-replace-unicode-quotes.md b/rfcs/0004-replace-unicode-quotes.md new file mode 100644 index 0000000..65635d5 --- /dev/null +++ b/rfcs/0004-replace-unicode-quotes.md @@ -0,0 +1,104 @@ +--- +feature: replace-unicode-quotes +start-date: 2017-03-19 +author: layus +co-authors: zimbatm +related-issues: + - https://github.com/NixOS/nix/pull/1140 + - https://github.com/NixOS/nix/issues/915 + - https://github.com/NixOS/nix/pull/910 +--- + +# Summary +[summary]: #summary + +Nix uses unicode glyphs to quote strings and paths in its output. +This RFC proposes to use only ASCII `"` and `'` for quoting purposes in strings +printed during evaluation. + +# Motivation +[motivation]: #motivation + +There are three main reasons for this change. + +1. _Correctness_: By removing preventively these characters, we will not have + to track the triggered issues separately. Unicode interact badly with + variable interpolation in bash and will create more issues if we keep them. + See "nix installer produces broken output on Darwin" + https://github.com/NixOS/nix/issues/915. + and the detailed explanation in https://github.com/NixOS/nix/issues/910. + + As an example, on the following code the shell is treating the 1st UTF-8 + byte of `’` as part of the variable name (which is undefined, thus ""). + This results in `echo ""$'\x80\x99'` + + $ x=y + $ echo "$x" + y + $ echo "$x’" # WTF is going on here!? + ?? + + Also, such quotes should be removed from code snippets in the documentation. + Otherwise, they cannot be used as is. See + http://lists.science.uu.nl/pipermail/nix-dev/2010-April/004286.html + +2. _Compatibility_: Most terminal emulators do not recognise unicode quotes as + string delimiters. This makes string copy/paste from the terminal clumsy. + + For example, with a double-click in the following text, gnome-terminal will + correctly select the derivation path without the quotes, while rxvt-unicode + and st will select the string with the quotes. The string without quotes + needs to be tediously edited to be reused anywhere. + + > building path(s) ‘/nix/store/hdlkn4pnc7l79jbawlkvssx1hc7gqmj8-gnum4-1.4.18’ + + Some terminals like Eterm seem unable to print these characters correctly. + +3. _Consistency_: As some quotes were replaced for compatibility with shells and + terminal emulators, we end up with a mix of both styles. + +See also + - https://github.com/NixOS/nix/pull/947#r71710959 + - https://github.com/NixOS/nix/pull/1140 (Get rid of unicode quotes) + - https://github.com/NixOS/nix/commit/b3fc0160618d89bf63ce87ccad27fc68360c9731 + +# Detailed design +[design]: #detailed-design + +Implementing this requires to replace every unicode quote glyph by an ASCII +character. This change needs only happen in strings intended to be part of +build logs or otherwise printed in the console. + +The automated change should not alter comments nor documentation, except for +code snippets within that documentation. Neither should it alter derivations +outputs by changing input variables. + +After the change, using ASCII quotes should be enforced to maintain consistency. + +The change mainly needs to happen in Nix, but nixpkgs should follow for consistency. +For example, https://github.com/NixOS/nixpkgs/blob/c86f05e7ce13e64238960ebf3ee9706142db961b/nixos/modules/tasks/filesystems.nix#L236 should be updated. + +# Drawbacks +[drawbacks]: #drawbacks + +Snippets of nix output in documentation and blogs will be out of sync (their +quotes would not match the real printed output). +Also, ASCII quotes are less aesthetic. + +# Alternatives +[alternatives]: #alternatives + +As a decision needs to be take, we could also prefer to keep these nice unicode +glyphs and fix issues as we encounter them. +This also requires to push patches upstream in terminal emulators, and provide +documentation as how to use them safely in shell scripts. + +# Unresolved questions +[unresolved]: #unresolved-questions + +Should we also force ASCII quotes in pkgs meta fields and nixos options description ? +These are displayed on the web (see https://nixos.org/nixos/options.html) and in the console +with nixos-option. +It would be simpler to consider these as documentation, leaving them as-is. + + -- cgit v1.2.3