* A simple solution to "Upcoming loss of usability ..." @ 2015-06-25 14:59 Oleh Krehel 2015-06-25 15:37 ` Dmitry Gutov 2015-06-25 16:36 ` Paul Eggert 0 siblings, 2 replies; 51+ messages in thread From: Oleh Krehel @ 2015-06-25 14:59 UTC (permalink / raw) To: emacs-devel Hi all, It seems that even though many conservative people disagree, the "experiment" isn't going away. So I'm proposing the following change that could satisfy both Paul and the conservatives (myself included): (font-lock-add-keywords 'emacs-lisp-mode '(("\\(`\\)\\([a-zA-Z-0-9]+\\)\\('\\)" (0 (compose-region (match-beginning 1) (match-end 1) "‘")) (0 (compose-region (match-beginning 3) (match-end 3) "’"))))) The above code can also be made part of `prettify-symbols-mode', and some customization can be added to turn things on or off. The above code is only a rough draft, it may not be optimal, which the experts could quickly fix. But it works for all Emacs versions installed on my system. The advantages of the above approach: 1. Paul's students get to see the pretty quotes. 2. The Emacs sources need not be changed, no new syntax definitions need to be introduced. 3. The pretty quotes are easy to input for Paul's students: they're right there on the standard issue keyboard, available with zero modifier keys: even the Shift modifier isn't necessary. 4. Zero problems in the terminal and with copy pasting: that part of `prettify-symbols-mode' could be just disabled for terminals that don't support Unicode. In addition, I can actually see the Unicode quotes fine in GNOME Terminal. They look garbled on a TTY, but again: the minor mode can be enabled/disabled conditionally. 5. The quotes stay what they are: markup, as they were intended to be. The markup can be rendered in many different ways, including as Unicode quotes, if the user prefers. regards, Oleh ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 14:59 A simple solution to "Upcoming loss of usability ..." Oleh Krehel @ 2015-06-25 15:37 ` Dmitry Gutov 2015-06-25 16:36 ` Paul Eggert 1 sibling, 0 replies; 51+ messages in thread From: Dmitry Gutov @ 2015-06-25 15:37 UTC (permalink / raw) To: Oleh Krehel, emacs-devel On 06/25/2015 05:59 PM, Oleh Krehel wrote: > It seems that even though many conservative people disagree, the > "experiment" isn't going away. > > So I'm proposing the following change that could satisfy both Paul and > the conservatives (myself included): I'm not sure it'll satisfy Paul, because he seems intent on introducing actual curly quotes in the Elisp source code. Myself, I'd very much prefer this approach. > (font-lock-add-keywords > 'emacs-lisp-mode > '(("\\(`\\)\\([a-zA-Z-0-9]+\\)\\('\\)" > (0 > (compose-region > (match-beginning 1) > (match-end 1) > "‘")) > (0 > (compose-region > (match-beginning 3) > (match-end 3) > "’"))))) Otherwise, this looks pretty close to the proposed font-lock-only solution in http://lists.gnu.org/archive/html/emacs-devel/2015-06/msg00547.html And yes, we can add similar font-lock rules in emacs-lisp-mode buffers, but they'll have to handle escaped quotes a bit differently (do not hide the escaping chars). ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 14:59 A simple solution to "Upcoming loss of usability ..." Oleh Krehel 2015-06-25 15:37 ` Dmitry Gutov @ 2015-06-25 16:36 ` Paul Eggert 2015-06-25 17:00 ` Oleh Krehel ` (2 more replies) 1 sibling, 3 replies; 51+ messages in thread From: Paul Eggert @ 2015-06-25 16:36 UTC (permalink / raw) To: Oleh Krehel, emacs-devel Oleh Krehel wrote: > (font-lock-add-keywords > 'emacs-lisp-mode > '(("\\(`\\)\\([a-zA-Z-0-9]+\\)\\('\\)" The proposed approach would mishandle many cases where the things being quoted are not typical Lisp identifiers. E.g.: "Press ‘h’ for complete help; press ‘?’ repeatedly for a summary" "Make ‘funcall/apply’ form to map SOURCE-ARGLIST to TARGET-ARGLIST...." "... Example: ‘(ad-map-arglists '(a &rest args) '(w x y z))’ will return ..." Also, the proposed approach won't easily generalize to diagnostics, which often quote non-identifiers like ‘%s’. There's also a UI problem: ot would cause action-at-a-distance, because typing an apostrophe in one place in the buffer would visually alter a part of the line many characters away. (Action-at-a-distance is not a fatal objection, but it is better to avoid it when possible.) Most of the advantages you mention for the proposed approach are also advantages of the approach in master. With the current approach, the Emacs sources don't need to be changed, quotes are just as easy to input (in Electric Quote mode), terminal and copy-pasting work, and quotes are markup. The main advantage of the proposed approach over the current master is that the source code often can still contain grave accent and apostrophe unmodified, even though people reading and editing the source code will see curved quotes. To my mind this is more a recipe for confusion than anything else -- at least, I wouldn't want to inflict it on Emacs newcomers. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 16:36 ` Paul Eggert @ 2015-06-25 17:00 ` Oleh Krehel 2015-06-25 20:48 ` Paul Eggert 2015-06-25 18:32 ` Dmitry Gutov 2015-06-25 20:58 ` Alan Mackenzie 2 siblings, 1 reply; 51+ messages in thread From: Oleh Krehel @ 2015-06-25 17:00 UTC (permalink / raw) To: Paul Eggert; +Cc: emacs-devel Paul Eggert <eggert@cs.ucla.edu> writes: > With the current approach, the Emacs sources don't need to be changed My sole objection was that they were changed. And I thought that was the whole point of it: that you want the markup to be its own visual representation. > "Make ‘funcall/apply’ form to map SOURCE-ARGLIST to TARGET-ARGLIST...." This is already in the Emacs sources, so they were indeed changed. > "Press ‘h’ for complete help; press ‘?’ repeatedly for a summary" There should be a separate markup for quoting key bindings in my opinion. For example, Markdown has <kbd>h</kbd>, and I use ~h~ in my org-mode documents intended for HTML export. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 17:00 ` Oleh Krehel @ 2015-06-25 20:48 ` Paul Eggert 2015-06-25 21:10 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-06-25 20:48 UTC (permalink / raw) To: Oleh Krehel; +Cc: emacs-devel Oleh Krehel wrote: > Paul Eggert<eggert@cs.ucla.edu> writes: > >> >With the current approach, the Emacs sources don't need to be changed > My sole objection was that they were changed. And I thought that was the > whole point of it: that you want the markup to be its own visual > representation. Yes, I would like the markup to head that way. But the Emacs source docstrings have largely not needed to change, and there's no need to change them right now. >> >"Make ‘funcall/apply’ form to map SOURCE-ARGLIST to TARGET-ARGLIST...." > This is already in the Emacs sources, so they were indeed changed. I gave that example because I knew about it already and had already changed it for other reasons. Most such examples haven't changed recently. Here are some: \(1) a local variables list or the `-*-' line specifies a major mode, or If MARK is nil, then the default character `?r' is used. the working buffer, `*1' the value in the process buffer. same as in `newsticker--parse-atom-1.0'. auto-newline minor mode is activated (as evidenced by a `/a' or `/ah' Call `reftex-citation' with a format selector `?p'. The current highlighting heuristics work reasonably well with these docstrings, because we want to highlight only quoted symbols, and we don't want to highlight the ‘-*-’ or the ‘?r' or etc. But if we want to use font-lock to alter how quotes are displayed, these heuristics won't work well, as they'll fail to alter many quotes that they should alter. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 20:48 ` Paul Eggert @ 2015-06-25 21:10 ` Dmitry Gutov 2015-06-25 22:15 ` Paul Eggert 2015-06-27 15:00 ` raman 0 siblings, 2 replies; 51+ messages in thread From: Dmitry Gutov @ 2015-06-25 21:10 UTC (permalink / raw) To: Paul Eggert, Oleh Krehel; +Cc: emacs-devel On 06/25/2015 11:48 PM, Paul Eggert wrote: > Yes, I would like the markup to head that way. But the Emacs source > docstrings have largely not needed to change, and there's no need to > change them right now. That's sneaky wording. You obviously want them to change. The majority of people opposing don't want the curly quotes in docstrings, nor do they want to have two standards at the same time (now and then effectively forever). Of course, the question of whether to use curly quotes in the docstrings or render them later is orthogonal enough to the choice of using font-lock or substitute-command-keys, but I think I gave a few arguments in favor of the former. > But if we want to > use font-lock to alter how quotes are displayed, these heuristics won't > work well, as they'll fail to alter many quotes that they should alter. Why do you think so? We can alter any quotes we want using font-lock too. No real need to alter them in pairs either, if we want to disregard Richard's advice, and we're fine with using escaping more often. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 21:10 ` Dmitry Gutov @ 2015-06-25 22:15 ` Paul Eggert 2015-06-25 22:25 ` Dmitry Gutov 2015-06-27 15:00 ` raman 1 sibling, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-06-25 22:15 UTC (permalink / raw) To: Dmitry Gutov, Oleh Krehel; +Cc: emacs-devel Dmitry Gutov wrote: >> But if we want to >> use font-lock to alter how quotes are displayed, these heuristics won't >> work well, as they'll fail to alter many quotes that they should alter. > > Why do you think so? We can alter any quotes we want using font-lock too. Whatever heuristics we use are likely to be wrong for many real-world uses in Elisp code. Many uses of grave accent in Elisp strings, characters, and comments are intended to be grave accent, not left quote. Similarly for apostrophe and right quote. It's unlikely that any easy-to-explain heuristic based on font-lock will distinguish among the uses reliably. >> Yes, I would like the markup to head that way. But the Emacs source >> docstrings have largely not needed to change, and there's no need to >> change them right now. > > That's sneaky wording. You obviously want them to change. There was no intent to be sneaky. I don't see how one can interpret my remarks in any way other than saying that I would like the markup to change eventually. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 22:15 ` Paul Eggert @ 2015-06-25 22:25 ` Dmitry Gutov 2015-06-25 22:41 ` Paul Eggert 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-06-25 22:25 UTC (permalink / raw) To: Paul Eggert, Oleh Krehel; +Cc: emacs-devel On 06/26/2015 01:15 AM, Paul Eggert wrote: > Whatever heuristics we use are likely to be wrong for many real-world > uses in Elisp code. font-lock rules don't have to be about heuristics. The conversion can be as straight as we want it to me. > Many uses of grave accent in Elisp strings, > characters, and comments are intended to be grave accent, not left > quote. Similarly for apostrophe and right quote. It's unlikely that > any easy-to-explain heuristic based on font-lock will distinguish among > the uses reliably. It has been established already that we need an escaping syntax, too. > There was no intent to be sneaky. I don't see how one can interpret my > remarks in any way other than saying that I would like the markup to > change eventually. In the context of people arguing against the change, stating that "the Emacs source docstrings have largely not needed to change, and there's no need to change them right now" is, at best, irrelevant. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 22:25 ` Dmitry Gutov @ 2015-06-25 22:41 ` Paul Eggert 2015-06-25 22:52 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-06-25 22:41 UTC (permalink / raw) To: Dmitry Gutov; +Cc: emacs-devel Dmitry Gutov wrote: >> Whatever heuristics we use are likely to be wrong for many real-world >> uses in Elisp code. > > font-lock rules don't have to be about heuristics. The conversion can be as > straight as we want it to me. No straightforward conversion will work, I'm afraid. >> Many uses of grave accent in Elisp strings, >> characters, and comments are intended to be grave accent, not left >> quote. Similarly for apostrophe and right quote. It's unlikely that >> any easy-to-explain heuristic based on font-lock will distinguish among >> the uses reliably. > > It has been established already that we need an escaping syntax, too. Sorry, I'm not following. This would be a new escape syntax for Elisp strings? How would it work? For example, would \` and \' have different meaning in strings than they do in character literals? When exactly would these escapes be transformed to user-preferred quote characters? Although I have already explored solutions along these lines and none of them worked well, perhaps you have ideas that will improve them. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 22:41 ` Paul Eggert @ 2015-06-25 22:52 ` Dmitry Gutov 0 siblings, 0 replies; 51+ messages in thread From: Dmitry Gutov @ 2015-06-25 22:52 UTC (permalink / raw) To: Paul Eggert; +Cc: emacs-devel On 06/26/2015 01:41 AM, Paul Eggert wrote: > No straightforward conversion will work, I'm afraid. The logic can follow along the lines of the new parts in substitute-command-keys. >> It has been established already that we need an escaping syntax, too. > > Sorry, I'm not following. This would be a new escape syntax for Elisp > strings? How would it work? In short, via re-search-foward, followed by compose-region. > For example, would \` and \' have > different meaning in strings than they do in character literals? No. That would be nice, but more or less impossible to implement. I think we could use "\\", though. Or else, something like "\\=", although that exact sequence is already taken (substitute-command-keys would eat it). > When > exactly would these escapes be transformed to user-preferred quote > characters? During buffer fontification. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 21:10 ` Dmitry Gutov 2015-06-25 22:15 ` Paul Eggert @ 2015-06-27 15:00 ` raman 1 sibling, 0 replies; 51+ messages in thread From: raman @ 2015-06-27 15:00 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Paul Eggert, Oleh Krehel, emacs-devel 1+. Changing the source code as proposed is a slippery slope and we'll end up over time (shudder shudder) with who knows, ay be snippets of HTML markup and other gunk. -- ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 16:36 ` Paul Eggert 2015-06-25 17:00 ` Oleh Krehel @ 2015-06-25 18:32 ` Dmitry Gutov 2015-06-25 22:17 ` Paul Eggert 2015-06-25 20:58 ` Alan Mackenzie 2 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-06-25 18:32 UTC (permalink / raw) To: Paul Eggert, Oleh Krehel, emacs-devel On 06/25/2015 07:36 PM, Paul Eggert wrote: > The proposed approach would mishandle many cases where the things being > quoted are not typical Lisp identifiers. E.g.: > > "Press ‘h’ for complete help; press ‘?’ repeatedly for a summary" > "Make ‘funcall/apply’ form to map SOURCE-ARGLIST to TARGET-ARGLIST...." > "... Example: ‘(ad-map-arglists '(a &rest args) '(w x y z))’ will return > ..." We already have a different regexp that will handle those. It's not an insurmountable problem either way. > Also, the proposed approach won't easily generalize to diagnostics, > which often quote non-identifiers like ‘%s’. Same here. > There's also a UI problem: > ot would cause action-at-a-distance, because typing an apostrophe in one > place in the buffer would visually alter a part of the line many > characters away. Just like typing a double-quote will make Emacs consider the rest of the buffer a string literal? Not that big a problem. > Most of the advantages you mention for the proposed approach are also > advantages of the approach in master. With the current approach, the > Emacs sources don't need to be changed, Because you already changed them? You'd still have to propagate those changes (which a sizable number of people expressed dislike for), to all third-party Elisp code out there. > The main advantage of the proposed approach over the current master is > that the source code often can still contain grave accent and apostrophe > unmodified, even though people reading and editing the source code will > see curved quotes. To my mind this is more a recipe for confusion than > anything else -- at least, I wouldn't want to inflict it on Emacs > newcomers. We can keep it disabled by default, if you like. Unlike the substitute-command-keys approach, font-lock is flexible that way. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 18:32 ` Dmitry Gutov @ 2015-06-25 22:17 ` Paul Eggert 2015-06-25 22:38 ` Dmitry Gutov ` (2 more replies) 0 siblings, 3 replies; 51+ messages in thread From: Paul Eggert @ 2015-06-25 22:17 UTC (permalink / raw) To: Dmitry Gutov, Oleh Krehel, emacs-devel Dmitry Gutov wrote: >> "Press ‘h’ for complete help; press ‘?’ repeatedly for a summary" >> "Make ‘funcall/apply’ form to map SOURCE-ARGLIST to TARGET-ARGLIST...." >> "... Example: ‘(ad-map-arglists '(a &rest args) '(w x y z))’ will return >> ..." > > We already have a different regexp that will handle those. It's not an > insurmountable problem either way. Perhaps some complex regular expression would work most of the time. We'd have to see. However, its complexity will make its behavior hard to document, and it will likely lead to counterintuitive display of source code on occasion. It's a minor thing to get a color wrong; it's a bigger deal to display the wrong character. The resulting problems are likely not to be worth the aggravation. >> There's also a UI problem: >> ot would cause action-at-a-distance, because typing an apostrophe in one >> place in the buffer would visually alter a part of the line many >> characters away. > > Just like typing a double-quote will make Emacs consider the rest of the buffer > a string literal? Not that big a problem. As I said, action-at-a-distance is not a fatal objection. But yes, that behavior of double-quote is objectionable, and I wish that Emacs didn't do it. I hope we don't need to add more glitches like it. > You'd still have to propagate those changes (which a sizable number of people > expressed dislike for), to all third-party Elisp code out there. Third-party code doesn't need to change. It'll still work reasonably well. >> The main advantage of the proposed approach over the current master is >> that the source code often can still contain grave accent and apostrophe >> unmodified, even though people reading and editing the source code will >> see curved quotes. To my mind this is more a recipe for confusion than >> anything else -- at least, I wouldn't want to inflict it on Emacs >> newcomers. > > We can keep it disabled by default, if you like. Unlike the > substitute-command-keys approach, font-lock is flexible that way. Sorry, I don't understand this remark. Both approaches allow for defaults, and for behavior to be disabled by default, so neither has an advantage in that respect. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 22:17 ` Paul Eggert @ 2015-06-25 22:38 ` Dmitry Gutov 2015-06-26 2:35 ` Paul Eggert 2015-06-25 23:12 ` João Távora 2015-06-26 7:40 ` Oleh Krehel 2 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-06-25 22:38 UTC (permalink / raw) To: Paul Eggert, Oleh Krehel, emacs-devel On 06/26/2015 01:17 AM, Paul Eggert wrote: > Perhaps some complex regular expression would work most of the time. > We'd have to see. However, its complexity will make its behavior hard > to document, and it will likely lead to counterintuitive display of > source code on occasion. It's a minor thing to get a color wrong; it's > a bigger deal to display the wrong character. The resulting problems > are likely not to be worth the aggravation. This is just hand-waving. I gave you a patch, feel free to criticize it, ask to support different cases, etc. You can display a wrong character with sustitute-command-keys just as well. Like in its own docstring currently ("Each ‘ and ’ are replaced by..."). > As I said, action-at-a-distance is not a fatal objection. But yes, that > behavior of double-quote is objectionable, and I wish that Emacs didn't > do it. I don't see a way how Emacs would be able not do it. > Third-party code doesn't need to change. It'll still work reasonably well. Then we'll be in the "double standard" area. >> We can keep it disabled by default, if you like. Unlike the >> substitute-command-keys approach, font-lock is flexible that way. > > Sorry, I don't understand this remark. Both approaches allow for > defaults, and for behavior to be disabled by default, so neither has an > advantage in that respect. With substitute-command-keys, you can't control the way the characters look in the source buffer (which Oleh's patch was for). Only how they look in the Help buffer. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 22:38 ` Dmitry Gutov @ 2015-06-26 2:35 ` Paul Eggert 2015-06-26 12:06 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-06-26 2:35 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel Dmitry Gutov wrote: > This is just hand-waving. I gave you a patch, feel free to criticize it, ask to > support different cases, etc. I think the most recent patch you sent is in <http://lists.gnu.org/archive/html/emacs-devel/2015-06/msg00547.html>. I just now tried it against the current master (commit 99ad90dcb1beccde926d9b6475a393c6f8743f5c), and didn't notice any difference in display. I suppose you intended the patch to be combined with reverting some recent changes to the master, but I don't know which changes those would be. Also, as I understand it this part of the thread was about display of Elisp source code, whereas that patch seems to about display of *Help* buffers. > You can display a wrong character with sustitute-command-keys just as well. Yes, of course. But in practice the effect of substitute-command-keys is limited to strings displayed in *Help* buffers. This makes its misbehavior less likely (and when it happens, less of a problem) than a font-lock approach designed to display arbitrary Elisp source code. > Like in its own docstring currently ("Each ‘ and ’ are replaced by..."). I don't see any wrong character there. That part of the documentation is about curved single quotes, and that's what I see. > With substitute-command-keys, you can't control the way the characters look > in the source buffer (which Oleh's patch was for) OK, in that case I agree that the font-lock approach should give more control on how source code is displayed, whereas substitute-command-keys does not affect source-code display. I still don't see how font-lock would work with source-code strings containing quotes, though; I expect it will mishandle display in a significant number of practical cases. (Again, this appears to be a different topic than the abovementioned patch, so it's not clear what's being proposed here.) >> No straightforward conversion will work, I'm afraid. > > The logic can follow along the lines of the new parts in substitute-command-keys. That would be plausible if we were talking about *Help* buffer contents, although there's still the matter of dealing with user string contents (which the current master handles but the abovementioned patch seemingly would mishandle). But this part of the thread was about arbitrary Elisp source-code strings, and the substitute-command-keys heuristics won't work there. > I think we could use "\\", though. Or else, something like "\\=", although that > exact sequence is already taken (substitute-command-keys would eat it). I'm afraid I'm lost now. I don't know what you're proposing here. Your other comments suggest you're talking about escapes that can appear in any Elisp source-code string, but I don't know what the escapes look like or what they would do. > font-lock runs in the help buffers, as well as info (if I'm not mistaken), so that approach can be used in those too. This makes it sounds like you want one font-lock solution for help buffers, another font-lock solution for info buffers, and a third font-lock solution for Elisp source-code files. Is that the idea? But I'm having trouble seeing what the three would have in common or how their combination would be documented. For example, for a typical user what would font-lock do for info files that is not already being done? >> OK, that can be the format-message function already discussed. > > Indeed. I'll look into implementing that then, as this issue seems separable from the others. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-26 2:35 ` Paul Eggert @ 2015-06-26 12:06 ` Dmitry Gutov 2015-06-27 17:28 ` Paul Eggert 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-06-26 12:06 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 06/26/2015 05:35 AM, Paul Eggert wrote: > I think the most recent patch you sent is in > <http://lists.gnu.org/archive/html/emacs-devel/2015-06/msg00547.html>. > I just now tried it against the current master (commit > 99ad90dcb1beccde926d9b6475a393c6f8743f5c), and didn't notice any > difference in display. I suppose you intended the patch to be combined > with reverting some recent changes to the master, but I don't know which > changes those would be. Like mentioned in the preceding email, that patch is against f743819. But if you were looking for changes to revert, those would be the uses of curly quotes as markup in the source code, the new `substitute-command-keys' calls, as well as the code in `substitute-command-keys' that performs quote replacement. The "differences is display" is the wrong thing to look for, though, because the intent is to reproduce the current behavior, more or less. > Also, as I understand it this part of the thread was about display of > Elisp source code, whereas that patch seems to about display of *Help* > buffers. The patches can be very similar. In the source code, we'll not hide the escape sequences; that should be the main difference. > Yes, of course. But in practice the effect of substitute-command-keys > is limited to strings displayed in *Help* buffers. This makes its > misbehavior less likely (and when it happens, less of a problem) than a > font-lock approach designed to display arbitrary Elisp source code. It will be very easy to limit the conversion to only within strings. > I don't see any wrong character there. That part of the documentation > is about curved single quotes, and that's what I see. Hmm, okay. Guess I misread it. > (Again, this appears to be a different topic than the abovementioned > patch, so it's not clear what's being proposed here.) Why don't we start with the help-mode patch (maybe even in the thread it's been posted to), and then return to the source buffers later. The issue of curly quotes in Help and Info buffers seems to be the more important one. > That would be plausible if we were talking about *Help* buffer contents, > although there's still the matter of dealing with user string contents > (which the current master handles but the abovementioned patch seemingly > would mishandle). But this part of the thread was about arbitrary Elisp > source-code strings, and the substitute-command-keys heuristics won't > work there. I think the only heuristic we won't be able to reproduce is the fact that one can intentionally pass only some strings to `substitute-command-keys', but not the others. Depending on the number of false positives created this way, we may or may not decide to turn the quote translation in the source buffer off by default. Or else, decide we prefer to have false negatives and only translate quotes in strings that are in known docstring positions (like within a top-level `defun' form, after the arguments). > I'm afraid I'm lost now. I don't know what you're proposing here. Your > other comments suggest you're talking about escapes that can appear in > any Elisp source-code string, but I don't know what the escapes look > like or what they would do. "`'" will render as "‘’" in the Help buffer and the source buffer (if the quote translation is turned on). "\\`\\'" will render as "`'" in the Help buffer and "\\`\\'" in the source buffer. Looking at it now, these would generate quite a few false positives in regexps (if we don't eliminate this possibility in a different way). So we could use "\\~", for example ("\\~`" -> "`"). Or else, make the quote characters escape themselves. Then, "``" would render as "`" in the Help buffer, and "''" as "'". "```'''" would translate to "`‘'’", though. > This makes it sounds like you want one font-lock solution for help > buffers, another font-lock solution for info buffers, and a third > font-lock solution for Elisp source-code files. Is that the idea? They Help and Elisp buffers can share the conversion function (with one or two modifier arguments), as well as the search regexp. The font-lock rule would have to be set in several places, that is correct. > But > I'm having trouble seeing what the three would have in common or how > their combination would be documented. What will need to be documented is the quoting syntax, as well as the escaping rules. > For example, for a typical user > what would font-lock do for info files that is not already being done? Is Info actually relevant in this discussion? Looking at info.el, it seems to deal files where quotes have already been translated (Info-mode-font-lock-keywords indicates that), so maybe neither substitute-command-keys, nor the new font-lock rules, have to do anything about quotes there. But if we were discussing the texinfo-mode buffers, then handling of quotes would be similar to Emacs Lisp source buffers (but necessarily different, because of different syntax). ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-26 12:06 ` Dmitry Gutov @ 2015-06-27 17:28 ` Paul Eggert 2015-06-27 17:53 ` Dmitry Gutov 2015-06-27 17:57 ` Dmitry Gutov 0 siblings, 2 replies; 51+ messages in thread From: Paul Eggert @ 2015-06-27 17:28 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel Dmitry Gutov wrote: > On 06/26/2015 05:35 AM, Paul Eggert wrote: >> I just now tried it against the current master (commit >> 99ad90dcb1beccde926d9b6475a393c6f8743f5c), and didn't notice any >> difference in display. > Like mentioned in the preceding email, that patch is against f743819. > > But if you were looking for changes to revert, those would be the uses of curly > quotes as markup in the source code, the new `substitute-command-keys' calls, as > well as the code in `substitute-command-keys' that performs quote replacement. In that case I don't understand the patch being against f743819. f743819 already has some curved quotes in docstrings, to avoid ambiguities of using grave accent and apostrophe to quote. So that patch against f743819 won't determine whether font-lock can address this issue without using curved quotes in docstrings. Even with this in mind, though, the patch mishandles some quotes. For example, the docstring for texinfo-format-verb contains: For example, @verb\{|@|\} results in @ and @verb\{+@'e?`!`+} results in @'e?`!`. The patch displays this as: For example, @verb{|@|} results in @ and @verb{+@'e?`!‘+} results in @’e?`!`. which is incorrect: those curved quotes should be grave accent and apostrophe. It'd be impractical to work around this sort of problem entirely with clever font-lock regular expressions. We will need some escape syntax to suppress transliteration for exceptional docstrings like the above. I think you've mentioned the need for that sort of thing, but it's not clear what it would look like or how it would be implemented with font-lock. Plus, as we've mentioned, the patch can mishandle user-supplied values that contain grave accent and apostrophe. > It will be very easy to limit the conversion to only within strings. As I understand it we gave up on transliteration of Elisp source code after you wrote the above, so for now I'll not comment on this point (or the other points of the message that talk about transliterating source code). > Is Info actually relevant in this discussion? Looking at info.el, it seems to > deal files where quotes have already been translated > (Info-mode-font-lock-keywords indicates that), so maybe neither > substitute-command-keys, nor the new font-lock rules, have to do anything about > quotes there. It's relevant, as it uses and displays the curved quotes that some users find objectionable, and did so even in 24.5. But it's fine with me if we leave Info mode alone. In practice it works reasonably well in 24.5. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-27 17:28 ` Paul Eggert @ 2015-06-27 17:53 ` Dmitry Gutov 2015-06-27 21:09 ` Paul Eggert 2015-06-27 17:57 ` Dmitry Gutov 1 sibling, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-06-27 17:53 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 06/27/2015 08:28 PM, Paul Eggert wrote: > In that case I don't understand the patch being against f743819. > f743819 already has some curved quotes in docstrings, to avoid > ambiguities of using grave accent and apostrophe to quote. So that > patch against f743819 won't determine whether font-lock can address this > issue without using curved quotes in docstrings. I just needed a version where substitute-command-keys doesn't replace the quotes (so that the font-lock rules do have something to work on). The question of ambiguity is a matter of refining the patch. > Even with this in mind, though, the patch mishandles some quotes. For > example, the docstring for texinfo-format-verb contains: > > For example, @verb\{|@|\} results in @ and > @verb\{+@'e?`!`+} results in @'e?`!`. > > The patch displays this as: > > For example, @verb{|@|} results in @ and > @verb{+@'e?`!‘+} results in @’e?`!`. > > which is incorrect: those curved quotes should be grave accent and > apostrophe. Only because the regexp is constructed this way, and we haven't picked an escaping syntax. > It'd be impractical to work around this sort of problem entirely with > clever font-lock regular expressions. We will need some escape syntax > to suppress transliteration for exceptional docstrings like the above. > I think you've mentioned the need for that sort of thing, but it's not > clear what it would look like or I've described the possible options in the previous message here of this subthread (in the second half): http://lists.gnu.org/archive/html/emacs-devel/2015-06/msg00592.html So, do you find "\\" acceptable? Should I send a patch with support for it? > how it would be implemented with font-lock. There are several examples in our Lisp code of searching for only unescaped instances of some character, using a regexp. But failing that, examining characters preceding a match would work almost as well. > Plus, as we've mentioned, the patch can mishandle user-supplied values > that contain grave accent and apostrophe. Nothing surprising there either. I'll try to handle it in the next version of the patch. >> It will be very easy to limit the conversion to only within strings. > > As I understand it we gave up on transliteration of Elisp source code > after you wrote the above, so for now I'll not comment on this point (or > the other points of the message that talk about transliterating source > code). You have also snipped the suggestions about the escaping syntax. >> Is Info actually relevant in this discussion? Looking at info.el, it >> seems to > > It's relevant, as it uses and displays the curved quotes that some users > find objectionable, and did so even in 24.5. I thought the external program performs the conversion. But yes, converting those curly quotes to straight ones in font-lock is also possible. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-27 17:53 ` Dmitry Gutov @ 2015-06-27 21:09 ` Paul Eggert 2015-06-28 1:04 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-06-27 21:09 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel Dmitry Gutov wrote: > I've described the possible options in the previous message here of this > subthread (in the second half): > > http://lists.gnu.org/archive/html/emacs-devel/2015-06/msg00592.html I'm afraid I don't understand those options. I can't make heads or tails of what was suggested there. How about if you pick a plausible option and give a realistic example showing (1) what the source code would be, (2) how the source code would be displayed, (3) what the *Help* buffer would be, (4) how the *Help* buffer would be displayed normally, and (5) how the *Help* buffer would be displayed if the user requests ASCII approximations. You're objecting to a simple approach where (1) thru (4) are typically all the same and use curved quotes, and where (5) uses ASCII approximations. I don't know what you're proposing in place of this. > BTW, do you have an example we can easily refer to when testing the patches? I don't think any single example will illustrate all the gotchas. But how about if we start with the previously-mentioned example, e.g., type ‘C-h texinfo-format-verb’ after loading textmodes/texinfmt? ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-27 21:09 ` Paul Eggert @ 2015-06-28 1:04 ` Dmitry Gutov 2015-06-28 15:20 ` Paul Eggert 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-06-28 1:04 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 06/28/2015 12:09 AM, Paul Eggert wrote: > How about if you pick a plausible option and give a realistic example > showing (1) what the source code would be, (2) how the source code would > be displayed, (3) what the *Help* buffer would be, (4) how the *Help* > buffer would be displayed normally, and (5) how the *Help* buffer would > be displayed if the user requests ASCII approximations. Ok, try this, please. "\\" before a quote keeps it untranslated. However, it order for us to be able to show an arbitrary number of backslashes before a quote (both translated or not), the backslashes also escape themselves. I've limited this effect to only before a quote, so that we don't have to add them in a lot of places (like substitute-command-keys docstring). > I don't think any single example will illustrate all the gotchas. But > how about if we start with the previously-mentioned example, e.g., type > ‘C-h texinfo-format-verb’ after loading textmodes/texinfmt? It's good to see how escaping works, but I meant an example of a Help buffer where we must not translate quotes in the value. diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 4982ee5..aaaf02b 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -746,7 +746,8 @@ it is displayed along with the global value." (setq from (point)) (pp origval) (if (< (point) (+ from 20)) - (delete-region (1- from) from))))))) + (delete-region (1- from) from))))) + (put-text-property val-start-pos (point) 'help-value t))) (terpri) (when locus (cond diff --git a/lisp/help-mode.el b/lisp/help-mode.el index f99e916..b5bf618 100644 --- a/lisp/help-mode.el +++ b/lisp/help-mode.el @@ -97,6 +97,18 @@ The format is (FUNCTION ARGS...).") "Hook run by `help-mode'." :type 'hook :group 'help) + +(defcustom help-quote-translation nil + "Style to use for single quotes in help. +The value is a left single quote character of some style. +Quote ‘like this’ if the value is ?‘ (left single quotation mark). +Quote \\'like this\\' if the value is ?\\' (apostrophe). +Quote \\`like this\\' if the value is ?\\` (grave accent). +The default value is nil, which means quote with left single quotation mark +if displayable, and with grave accent otherwise." + :type 'character + :group 'help) + \f ;; Button types used by help @@ -287,9 +299,37 @@ Commands: \\{help-mode-map}" (set (make-local-variable 'revert-buffer-function) 'help-mode-revert-buffer) + (setq font-lock-defaults '(nil t)) + (font-lock-add-keywords + nil '(("\\(?:\\=\\|[^\\]\\)\\(\\\\*\\)[`']" + (0 (let* ((mbeg (match-beginning 1)) + (mend (match-end 1)) + (escapes (- mend mbeg))) + (unless (get-text-property mend 'help-value) + ;; Collapse all escaped backslashes. + (compose-region mbeg (+ mbeg (- escapes (/ escapes 2))) "") + ;; If there's an even number of backslashes, + ;; translate the quote. + (when (eq (logand escapes 1) 0) + (help--translate-quote mend))) + nil))))) (set (make-local-variable 'bookmark-make-record-function) 'help-bookmark-make-record)) +(defun help--translate-quote (beg) + (let* ((char (char-after beg)) + (replacement + (cond + ((or (and (null help-quote-translation) + (char-displayable-p ?‘)) + (eq help-quote-translation ?‘)) + (cdr (assq char '((?` . ?‘) (?' . ?’))))) + ((eq help-quote-translation ?') + ?') + (t char)))) + (unless (eq char replacement) + (compose-region beg (1+ beg) replacement)))) + ;;;###autoload (defun help-mode-setup () (help-mode) diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el index e7b6835..392d45b 100644 --- a/lisp/textmodes/texinfmt.el +++ b/lisp/textmodes/texinfmt.el @@ -2493,8 +2493,8 @@ surrounded by in angle brackets." Enclose the verbatim text, including the delimiters, in braces. Print text exactly as written (but not the delimiters) in a fixed-width. -For example, @verb\{|@|\} results in @ and -@verb\{+@'e?`!`+} results in @'e?`!`." +For example, @verb{|@|} results in @ and +@verb{+@\\'e?\\`!\\`+} results in @\\'e?\\`!\\`." (let ((delimiter (buffer-substring-no-properties (1+ texinfo-command-end) (+ 2 texinfo-command-end)))) ^ permalink raw reply related [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-28 1:04 ` Dmitry Gutov @ 2015-06-28 15:20 ` Paul Eggert 2015-06-28 20:27 ` Escaping quotes in docstrings, Was: " Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-06-28 15:20 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel [-- Attachment #1: Type: text/plain, Size: 2623 bytes --] Dmitry Gutov wrote: >> > > Ok, try this, please. "\\" before a quote keeps it untranslated. > > However, it order for us to be able to show an arbitrary number of backslashes > before a quote (both translated or not), the backslashes also escape themselves. > I've limited this effect to only before a quote, so that we don't have to add > them in a lot of places (like substitute-command-keys docstring). That rule is too complicated. Please let's keep it simple. It's simpler to explain if the escape sequence always works. It should be rare to need these escapes, so it's OK if they are multicharacter. How about your other suggestion of using backslash-tilde? This would be \\~ in the source-file string. This is unlikely to occur in docstrings; there are no occurrences in the current Emacs sources. > +Quote \\'like this\\' if the value is ?\\' (apostrophe). > ... > +Quote \\`like this\\' if the value is ?\\` (grave accent). There should be no need to escape the apostrophes in these lines (see the next comment). > + nil '(("\\(?:\\=\\|[^\\]\\)\\(\\\\*\\)[`']" First, this translates all apostrophes to quotes. It should translate only the apostrophes that are used as quotes (i.e., those that match grave accents). That's what the current master does, and what your earlier prototype did. We shouldn't try to second-guess unmatched apostrophe, any more than we should try to second-guess double-quote. Second, the last bracketed RE should be [`'‘’] if we are to mimic the current-master behavior. (However, please see the next comment.) > + ((or (and (null help-quote-translation) > + (char-displayable-p ?‘)) > + (eq help-quote-translation ?‘)) As I understand it, the need for help-quote-translation has gone away, since the primary impetus for it was that one couldn't easily search for quotes, and that problem has been fixed in the meantime by Artur's commits. So this part can be simplified and the code can always assume that the above expression evaluates to t. (This is also true of the current master of course.) > I meant an example of a Help buffer where we must not translate quotes in the value. Ah, OK, try loading the attached file. The file name contains accent grave and apostrophe, which should not be translated when one types ‘C-h v foo’. PS. Can you please attach patches instead of pasting them bodily into your email? I could not apply the patch in your email automatically, as some characters were munged somewhere in the process. [-- Attachment #2: `big deal'.el --] [-- Type: text/x-emacs-lisp, Size: 97 bytes --] (defvar foo "`xxx-yyy' \\`zzz-www' \\~`aaa-bbb\\~'" "Don't ask me what this variable does.") ^ permalink raw reply [flat|nested] 51+ messages in thread
* Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-06-28 15:20 ` Paul Eggert @ 2015-06-28 20:27 ` Dmitry Gutov 2015-06-28 23:29 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-06-28 20:27 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 06/28/2015 06:20 PM, Paul Eggert wrote: > That rule is too complicated. Please let's keep it simple. It's > simpler to explain if the escape sequence always works. It should be > rare to need these escapes, so it's OK if they are multicharacter. Well, if you think so. > How > about your other suggestion of using backslash-tilde? This would be \\~ > in the source-file string. This is unlikely to occur in docstrings; > there are no occurrences in the current Emacs sources. I remember Stefan disliking \\=. But okay, let's try this one. >> + nil '(("\\(?:\\=\\|[^\\]\\)\\(\\\\*\\)[`']" > > First, this translates all apostrophes to quotes. It should translate > only the apostrophes that are used as quotes (i.e., those that match > grave accents). That's what the current master does, and what your > earlier prototype did. We shouldn't try to second-guess unmatched > apostrophe, any more than we should try to second-guess double-quote. You expressed dislike for "action at a distance" and wanted a simple translation, so there it was. Ok, let's try matching. > Second, the last bracketed RE should be [`'‘’] if we are to mimic the > current-master behavior. (However, please see the next comment.) There's no technical difficulty there, but I don't want to see curly quotes used as markup. And if we also want to translate them to help with terminals that can't display curlies, the translation should affect all curlies, not just the markup ones (so we can't limit it to paired quotes, or unescaped ones). > As I understand it, the need for help-quote-translation has gone away, > since the primary impetus for it was that one couldn't easily search for > quotes, and that problem has been fixed in the meantime by Artur's > commits. So this part can be simplified and the code can always assume > that the above expression evaluates to t. (This is also true of the > current master of course.) IIUC, there was also a problem with some terminals that can't display them, and also users that would prefer not to see them in Help. Maybe we can disregard the latter, at least for now. >> I meant an example of a Help buffer where we must not translate quotes >> in the value. > > Ah, OK, try loading the attached file. The file name contains accent > grave and apostrophe, which should not be translated when one types ‘C-h > v foo’. Thanks. The last patch seems to successfully deal with it already. > PS. Can you please attach patches instead of pasting them bodily into > your email? I could not apply the patch in your email automatically, as > some characters were munged somewhere in the process. Ok. But I'd rather push to the scratch/quote-escaping branch, if you don't mind. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-06-28 20:27 ` Escaping quotes in docstrings, Was: " Dmitry Gutov @ 2015-06-28 23:29 ` Dmitry Gutov 2015-07-01 2:56 ` Paul Eggert 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-06-28 23:29 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 06/28/2015 11:27 PM, Dmitry Gutov wrote: > Ok. But I'd rather push to the scratch/quote-escaping branch, if you > don't mind. Check it out. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-06-28 23:29 ` Dmitry Gutov @ 2015-07-01 2:56 ` Paul Eggert 2015-07-02 0:09 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-07-01 2:56 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel Dmitry Gutov wrote: > On 06/28/2015 11:27 PM, Dmitry Gutov wrote: > >> Ok. But I'd rather push to the scratch/quote-escaping branch, if you >> don't mind. > > Check it out. I tried it out. One thing I noticed right away is odd behavior that results from storing grave accent and apostrophe in the buffer and displaying them as curved quotes. For example, run 'emacs -Q -nw', then read the documentation for the 'length' function and copy it to a new file /tmp/foo by typing "C-h f length RET C-x o C-x h M-w C-x 4 f /tmp/foo RET C-y C-s". On the screen you'll see a buffer 'foo' containing curved quotes. Now, revisit /tmp/foo by typing "C-x C-v RET". The buffer will contain the same contents as before, except the curved quotes are magically transformed to grave accent and apostrophe on the display. It's weird that copied text mysteriously changes its display representation at a seemingly unrelated moment. How about the following idea instead. Instead of displaying grave accent and apostrophe specially, have with-help-window transliterate these characters in place before displaying itself as usual. with-help-window should not transliterate characters that are marked as being escaped, or as being user data (not clear that we need two kinds of marks here; one should do, no?). That's the big picture. Here are a few more-minor remarks. > + (font-lock-add-keywords > + nil '(("\\(\\\\~\\)\\(?:\\\\~\\|.\\)" As already mentioned, the new \~ quoting syntax doesn't seem to be needed; we can get by with the existing \= quoting syntax. So let's go that direction. Also, this regexp string matches either (1) \~\~ or (2) \~ followed by any non-newline character. But if \~ is supposed to escape the next character, the regexp string should simply implement that, i.e., the regexp string should be "\\\\~\\(.\\|\n\\)". I assume the extra complication is about escaping backslash itself, e.g., if the docstring is \~\ (which would look like "\\~\\" in the source code) this should stand for \ in the *Help* buffer. But the above regexp doesn't do that. If we were to keep \~ perhaps we could do the simple regexp match first, and then look backwards programatically just before the matching \~ and verifying that either (1) it's not preceded by ordinary ~ or (2) it's preceded by ordinary ~ but the ~ is not preceded by ordinary \. By "ordinary" I mean a character that does not have the help-value or help-tilde-escaped properties. But all and all this is sounding way tooo complicated and we should simply use the same escape sequences we've always been using. > + (unless (get-text-property mbeg 'help-value) Supposed the matched string is partly help-value, and partly not. E.g., mbeg has help-value but mbeg+1 does not but mbeg+2 does. Shouldn't this test that all the matched characters are not help-value characters? > + ;; If we use "" as the third argument, cursor > + ;; stumbles once when moving over its position. I don't understand this comment. Can you explain? For example, does the comment apply to the just the compose-region call, or to the rest of the 'unless'? > + (buffer-substring-no-properties > + mend (1+ mend))) This may go haywire if it returns "\t", because a TAB is special to compose-region. Also, what if the buffer has some properties other than help-value that should be preserved? At this point I stopped reviewing the changes in detail, as really the big picture should be addressed first. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-07-01 2:56 ` Paul Eggert @ 2015-07-02 0:09 ` Dmitry Gutov 2015-07-02 6:57 ` Paul Eggert 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-07-02 0:09 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 07/01/2015 05:56 AM, Paul Eggert wrote: > I tried it out. One thing I noticed right away is odd behavior that > results from storing grave accent and apostrophe in the buffer and > displaying them as curved quotes. For example, run 'emacs -Q -nw', then > read the documentation for the 'length' function and copy it to a new > file /tmp/foo by typing "C-h f length RET C-x o C-x h M-w C-x 4 f > /tmp/foo RET C-y C-s". On the screen you'll see a buffer 'foo' > containing curved quotes. Now, revisit /tmp/foo by typing "C-x C-v > RET". The buffer will contain the same contents as before, except the > curved quotes are magically transformed to grave accent and apostrophe > on the display. It's weird that copied text mysteriously changes its > display representation at a seemingly unrelated moment. It's the same if you copy some syntax-highlighted text (say, from src/doc.c) to /tmp/foo and save it. Kill the buffer, reopen - the highlighting is gone! :) That may seem counter-intuitive, but it's something Emacs users are generally familiar with. > How about the following idea instead. Instead of displaying grave > accent and apostrophe specially, have with-help-window transliterate > these characters in place before displaying itself as usual. That should work, too. In help-mode-finish, before help-make-xrefs. > with-help-window should not transliterate characters that are marked as > being escaped, or as being user data (not clear that we need two kinds > of marks here; one should do, no?). They're semantically different. I think we currently apply linkification (help-make-xrefs) to the contents of user data, and we might continue doing that. On the other hand, we should probably avoid linkifying symbols inside quotes when at least one of the quotes is escaped. > That's the big picture. Here are a few more-minor remarks. > >> + (font-lock-add-keywords >> + nil '(("\\(\\\\~\\)\\(?:\\\\~\\|.\\)" > > As already mentioned, the new \~ quoting syntax doesn't seem to be > needed; we can get by with the existing \= quoting syntax. So let's go > that direction. For us to go there, could you please make substitute-command-keys add the `escaped' property to the escaped characters in its output? And push it to scratch/quote-escaping. > Also, this regexp string matches either (1) \~\~ or (2) \~ followed by > any non-newline character. But if \~ is supposed to escape the next > character, the regexp string should simply implement that, i.e., the > regexp string should be "\\\\~\\(.\\|\n\\)". I guess so. Sorry, brain fart. > I assume the extra complication is about escaping backslash itself, > e.g., if the docstring is \~\ (which would look like "\\~\\" in the > source code) this should stand for \ in the *Help* buffer. But the > above regexp doesn't do that. Doesn't it? Works for me. But anyway, let's try to reuse the quoting from substitute-command-keys first. >> + (unless (get-text-property mbeg 'help-value) > > Supposed the matched string is partly help-value, and partly not. E.g., > mbeg has help-value but mbeg+1 does not but mbeg+2 does. Shouldn't this > test that all the matched characters are not help-value characters? Why? I'm assuming the value is separated from the other contents by whitespace or newlines. IMHO, that would too defensive. We're throwing that code out anyway. On the other hand, we could encounter a value between ` and ', in help--translate-quotes, if the value is shown at the end of the buffer. Should be taken care of in f9f3aa5 (as well as another nearby bug). >> + ;; If we use "" as the third argument, cursor >> + ;; stumbles once when moving over its position. > > I don't understand this comment. Can you explain? For example, does > the comment apply to the just the compose-region call, or to the rest of > the 'unless'? Only to the compose-region call. If we pass "" to it as COMPOSITION, the result will still be considered a valid position for the cursor, even though it has zero width. Anyway, we're going a different route: no compose-region calls. >> + (buffer-substring-no-properties >> + mend (1+ mend))) > > This may go haywire if it returns "\t", because a TAB is special to > compose-region. Also, what if the buffer has some properties other than > help-value that should be preserved? Err, I don't think the current code deletes any existing properties, it only changes how the buffer looks. On the other hand, if help-mode-finish performs the translations (destructively, I'm assuming), then we indeed might lose some properties. I wouldn't worry too much about that, though. If help-mode doesn't know about them, no other code is likely to use them either. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-07-02 0:09 ` Dmitry Gutov @ 2015-07-02 6:57 ` Paul Eggert 2015-07-02 9:46 ` Dmitry Gutov 2015-07-06 6:12 ` Paul Eggert 0 siblings, 2 replies; 51+ messages in thread From: Paul Eggert @ 2015-07-02 6:57 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel Dmitry Gutov wrote: > It's the same if you copy some syntax-highlighted text (say, from src/doc.c) to > /tmp/foo and save it. Kill the buffer, reopen - the highlighting is gone! :) > That may seem counter-intuitive, but it's something Emacs users are generally > familiar with. I've seen highlighting vanish, but I've never seen the characters change. Anyway.... >> How about the following idea instead. Instead of displaying grave >> accent and apostrophe specially, have with-help-window transliterate >> these characters in place before displaying itself as usual. > > That should work, too. In help-mode-finish, before help-make-xrefs. OK, let's shoot for that instead. > For us to go there, could you please make substitute-command-keys add the > `escaped' property to the escaped characters in its output? And push it to > scratch/quote-escaping. OK, I'll look into that. >>> + (unless (get-text-property mbeg 'help-value) >> >> Supposed the matched string is partly help-value, and partly not. E.g., >> mbeg has help-value but mbeg+1 does not but mbeg+2 does. Shouldn't this >> test that all the matched characters are not help-value characters? > > Why? I'm assuming the value is separated from the other contents by whitespace > or newlines. I don't think that's a safe assumption. It's common for quoted help-values to be jammed into the middle of other text. >>> + (buffer-substring-no-properties >>> + mend (1+ mend))) >> >> This may go haywire if it returns "\t", because a TAB is special to >> compose-region. Also, what if the buffer has some properties other than >> help-value that should be preserved? > > Err, I don't think the current code deletes any existing properties, it only > changes how the buffer looks. But buffer-substring-no-properties has no properties in the result, right? So effectively they're removed. And what about the TAB? ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-07-02 6:57 ` Paul Eggert @ 2015-07-02 9:46 ` Dmitry Gutov 2015-07-06 6:12 ` Paul Eggert 1 sibling, 0 replies; 51+ messages in thread From: Dmitry Gutov @ 2015-07-02 9:46 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 07/02/2015 09:57 AM, Paul Eggert wrote: > I've seen highlighting vanish, but I've never seen the characters > change. Anyway.... Try that with prettify-symbols-mode. >> Why? I'm assuming the value is separated from the other contents by >> whitespace >> or newlines. > > I don't think that's a safe assumption. It's common for quoted > help-values to be jammed into the middle of other text. I'd need an example. But anyway, this question will be moot if we delegate escaping to the lower level. > But buffer-substring-no-properties has no properties in the result, > right? So effectively they're removed. No, they remain on the text. We just use a small piece of it, without properties, to change the appearance of the said text (compose-region adds an extra property). > And what about the TAB? Indeed, it's a problem in that implementation. But anyway, again, we're unlikely to end up using it. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-07-02 6:57 ` Paul Eggert 2015-07-02 9:46 ` Dmitry Gutov @ 2015-07-06 6:12 ` Paul Eggert 2015-07-06 12:07 ` Dmitry Gutov 1 sibling, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-07-06 6:12 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel >> For us to go there, could you please make substitute-command-keys add the >> `escaped' property to the escaped characters in its output? And push it to >> scratch/quote-escaping. I've done that, and have discovered a couple of problems. First, a doc string that contains \[foo] is supposed to generate a key description for 'foo', derived by calling (key-description 'foo). But key-description can return a string that contains quote marks, and in general some of them should be escaped and others should not be. It's not clear to me whether both possibilities can occur in doc strings, but the situation is worrisome. Second, and more generally, the overall approach seems error prone. It asks programmers to mark every quote character that should not be transformed. But characters can come from many different sources, and it's hard to keep track of each place that can insert user data of some sort. In contrast, it's easy to find grave accents in doc strings, to fix the relative few that aren't already transformed automatically, and to not worry about user data. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-07-06 6:12 ` Paul Eggert @ 2015-07-06 12:07 ` Dmitry Gutov 2015-07-06 16:30 ` Paul Eggert 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-07-06 12:07 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 07/06/2015 09:12 AM, Paul Eggert wrote: > I've done that, and have discovered a couple of problems. Thank you. > First, a doc string that contains \[foo] is supposed to generate a key > description for 'foo', derived by calling (key-description 'foo). But > key-description can return a string that contains quote marks, and in > general some of them should be escaped and others should not be. It's > not clear to me whether both possibilities can occur in doc strings, but > the situation is worrisome. Why not put `escaped' (or rename that `translated', maybe) on those generated regions as well? > Second, and more generally, the overall approach seems error prone. It > asks programmers to mark every quote character that should not be > transformed. But characters can come from many different sources, and > it's hard to keep track of each place that can insert user data of some > sort. So far I've only seen a few places of complication nearby: key translations, keymap translations, and the escaping mechanism itself. The rest of them will likely have to be handled in substitute-command-keys anyway, somehow. > In contrast, it's easy to find grave accents in doc strings, to > fix the relative few that aren't already transformed automatically, and > to not worry about user data. If we find it hard to expose this data to Lisp, it will make the output presentation less flexible, and could indicate an overall problem in our docstring generation (we don't know all the possible sources the characters can come from? that's not very good). By the way, when doing translation in Lisp, instead of using help-mode-finish, we can instead examine all the functions that generate help buffers for Lisp stuff, and translate only the docstrings, when they are being inserted. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-07-06 12:07 ` Dmitry Gutov @ 2015-07-06 16:30 ` Paul Eggert 2015-07-06 22:10 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-07-06 16:30 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel Dmitry Gutov wrote: > Why not put `escaped' (or rename that `translated', maybe) on those generated > regions as well? Yes, in theory it could be done. But see below. >> Second, and more generally, the overall approach seems error prone. It >> asks programmers to mark every quote character that should not be >> transformed. But characters can come from many different sources, and >> it's hard to keep track of each place that can insert user data of some >> sort. > > So far I've only seen a few places of complication nearby: key translations, > keymap translations, and the escaping mechanism itself. I'm afraid this is because you've only started looking. Even if we limit ourselves to the regions you mention, the relevant code is scattered all over the place and it's hard to find exactly where to put 'escaped' or 'translated' into those regions. For example, one place might be the following code in keymap.c's single_key_description function: Lisp_Object result; char *buffer = SAFE_ALLOCA (sizeof "<>" + SBYTES (SYMBOL_NAME (key))); esprintf (buffer, "<%s>", SDATA (SYMBOL_NAME (key))); result = build_string (buffer); SAFE_FREE (); return result; Since KEY can be an arbitrary symbol, quite possibly its characters should be marked as 'escaped' or 'translated', which would mean adding this: put_text_property (1, 1 + SCHARS (SYMBOL_NAME (key)), Qescaped, Qt, result); before the return. Unfortunately it's not at all obvious whether this is needed unless one examines all the ways that C-h can put text into the *Help* buffer (which I haven't done). And one must do this potentially every time a string or symbol name is looked at. Plus, there are a lot of possibilities for off-by-one errors: for example, that '1 +' might easily be forgotten. Plus, even then there are opportunities for bugs: the above call to 'put_text_property' is not correct if the symbol name contains a NUL byte. Plus, there are other areas that will require this sort of complication, e.g., button labels, *Apropos* buffers. In contrast, it's much easier to look through the code for ` inside a string, and mark the exceptional characters that are intended to be quotes and that are not automatically translated already. > (we don't know all the possible sources the characters can > come from? that's not very good). No, actually, it's a good thing. It's nice that programs can put arbitrary text into *Help* buffers, and that that we don't need to worry about where the text came from: it just works. That's a simple interface, and simple interfaces are good. > By the way, when doing translation in Lisp, instead of using help-mode-finish, > we can instead examine all the functions that generate help buffers for Lisp > stuff, and translate only the docstrings, when they are being inserted. That's what the master branch is doing now, no? ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-07-06 16:30 ` Paul Eggert @ 2015-07-06 22:10 ` Dmitry Gutov 2015-07-07 7:54 ` Paul Eggert 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-07-06 22:10 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 07/06/2015 07:30 PM, Paul Eggert wrote: > I'm afraid this is because you've only started looking. Even if we > limit ourselves to the regions you mention, the relevant code is > scattered all over the place and it's hard to find exactly where to put > 'escaped' or 'translated' into those regions. I meant complications related to `substitute-command-keys'. That function should know exactly where to put them, because it expands \\[command] and similar syntax. But if you were looking for consumers of `key-description' in help-fns.el, these are concentrated in `help-fns--key-bindings'. And it's only used in one place: `describe-function-1'. Putting `help-value' on it is trivial. > For example, one place > might be the following code in keymap.c's single_key_description function: That doesn't sound right to me. `key-description' should continue returning a plain string. > Since KEY can be an arbitrary symbol, quite possibly its characters > should be marked as 'escaped' or 'translated', which would mean adding > this: I never was proposing a "dirty" string tagging throughout all functions that deal with them. Only in functions that output to Help buffers (and know about it), that deal with `' markup. > put_text_property (1, 1 + SCHARS (SYMBOL_NAME (key)), Qescaped, Qt, > result); > > before the return. Unfortunately it's not at all obvious whether this > is needed unless one examines all the ways that C-h can put text into > the *Help* buffer (which I haven't done). And one must do this > potentially every time a string or symbol name is looked at. I'm afraid I don't understand you here. > Plus, > there are a lot of possibilities for off-by-one errors: for example, > that '1 +' might easily be forgotten. That's one of the reasons to implement as little as possible in C. > Plus, even then there are > opportunities for bugs: the above call to 'put_text_property' is not > correct if the symbol name contains a NUL byte. Plus, there are other > areas that will require this sort of complication, e.g., button labels, > *Apropos* buffers. Apropos buffers - maybe. But since when do button labels have quotes in them? > In contrast, it's much easier to look through the code for ` inside a > string, and mark the exceptional characters that are intended to be > quotes and that are not automatically translated already. Sorry, I don't understand this either. Mark? Automatically translated? >> (we don't know all the possible sources the characters can >> come from? that's not very good). > > No, actually, it's a good thing. It's nice that programs can put > arbitrary text into *Help* buffers, and that that we don't need to worry > about where the text came from: it just works. That's a simple > interface, and simple interfaces are good. Well, it's one way of looking at it. >> we can instead examine all the functions that generate help buffers >> for Lisp >> stuff, and translate only the docstrings, when they are being inserted. > > That's what the master branch is doing now, no? That would be closer, but the current master implements more in C, which means fewer people who can change or maintain the code. And it complicates the API of a low-level function (substitute-command-keys), in a way that seems incompatible with radically changing the output later. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-07-06 22:10 ` Dmitry Gutov @ 2015-07-07 7:54 ` Paul Eggert 2015-07-07 8:39 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-07-07 7:54 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel Dmitry Gutov wrote: > That doesn't sound right to me. `key-description' should continue returning a > plain string. Perhaps you're right, I haven't looked into key-description carefully enough. I gave it only as an example of the sorts of problems we'd run into. > since when do button labels have quotes in them? In customization buffers. >> In contrast, it's much easier to look through the code for ` inside a >> string, and mark the exceptional characters that are intended to be >> quotes and that are not automatically translated already. > > Sorry, I don't understand this either. Mark? Automatically translated? I meant that although normally doc strings are translated and one can quote with either grave accent and apostrophe or curved quotation marks and they will be translated automatically to the user preferred style, occasionally one wants an actual grave accent or curved quotation mark to be output as-is regardless of user preference and these exceptional cases need to be marked in the doc strings. > That would be closer, but the current master implements more in C, which means > fewer people who can change or maintain the code. And it complicates the API of > a low-level function (substitute-command-keys), in a way that seems incompatible > with radically changing the output later. We can't anticipate radical changes that future maintainers might want to do. Worrying about that is likely to lead to overengineering and wasted effort. We'll have enough trouble just solving today's problems. As for whether the implementation should be in C -- some parts have to be used by C, since C code generates quoted strings on occasion. How much should be in C vs Lisp is an implementation detail that is no big deal. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-07-07 7:54 ` Paul Eggert @ 2015-07-07 8:39 ` Dmitry Gutov 2015-08-01 1:36 ` Paul Eggert 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-07-07 8:39 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 07/07/2015 10:54 AM, Paul Eggert wrote: > In customization buffers. Ok. We haven't considered those so far. So yeah, if there are a lot of places where the docstrings are displayed, it's probably better to perform the translation of docstring markup in a centralized way. > I meant that although normally doc strings are translated and one can > quote with either grave accent and apostrophe or curved quotation marks > and they will be translated automatically to the user preferred style, > occasionally one wants an actual grave accent or curved quotation mark > to be output as-is regardless of user preference and these exceptional > cases need to be marked in the doc strings. I sounds like you're describing a use case for an escaping mechanism. But what is the point of that? We've already agreed on a need for it. > We can't anticipate radical changes that future maintainers might want > to do. Worrying about that is likely to lead to overengineering and > wasted effort. We'll have enough trouble just solving today's problems. Concern about the API complication is not over-engineering. We can totally worry about it now. And one alternative use has already been mentioned (at least twice): don't use the quotes in the output at all, and instead highlight the quoted expressions with color; and possibly a different font-face. > As for whether the implementation should be in C -- some parts have to > be used by C, since C code generates quoted strings on occasion. Not necessarily, C code is perfectly able to use Lisp functions. You'd have to look at what the diagnostics formatting will do anyway (would it have to support escaping, for instance). Even so, some duplication might be in order: docstrings and disgnostics can do different things in the output; you cannot reliably use colors and fonts in the latter. > How much should be in C vs Lisp is an implementation detail that is no big > deal. No big deal for you? I hope we can agree, at least, that substitute-command-keys shouldn't perform the translation itself. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-07-07 8:39 ` Dmitry Gutov @ 2015-08-01 1:36 ` Paul Eggert 2015-08-01 21:05 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-08-01 1:36 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel Dmitry Gutov wrote: > one alternative use has already been mentioned ... don't use > the quotes in the output at all, and instead highlight the quoted expressions > with color; and possibly a different font-face. We can cross that bridge if we ever need to come to it. Such a use can't be the default everywhere, since not every platform supports colors and faces (e.g., batch diagnostics). So we'll need something with quotes anyway. And we already have code that highlights the contents of quotations so that may well be good enough. > C code is perfectly able to use Lisp functions. I expect that some of the diagnostics are at a low level, and can't assume that Lisp functions are callable, and that we'll need to do some of this at the C level regardless. Once it's done there, why bother with redoing it in Lisp? > I hope we can agree, at least, that substitute-command-keys shouldn't perform > the translation itself. Whether substitute-command-keys does it directly, or via calling some other function, is an implementation detail and it's not clear to me yet which is the right way to go here. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-08-01 1:36 ` Paul Eggert @ 2015-08-01 21:05 ` Dmitry Gutov 2015-08-02 6:56 ` Paul Eggert 2015-08-02 8:49 ` Przemysław Wojnowski 0 siblings, 2 replies; 51+ messages in thread From: Dmitry Gutov @ 2015-08-01 21:05 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 08/01/2015 04:36 AM, Paul Eggert wrote: > We can cross that bridge if we ever need to come to it. Such a use > can't be the default everywhere, since not every platform supports > colors and faces (e.g., batch diagnostics). So we'll need something > with quotes anyway. And we already have code that highlights the > contents of quotations so that may well be good enough. It doesn't need to be the default, or the default everywhere. But for it to be feasible to implement at least in some places, substitute-command-keys shouldn't translate the quotes. It should limit itself to translating just the constructs it translated before, as well as putting `escaped' text property on some characters in the output string. >> C code is perfectly able to use Lisp functions. > > I expect that some of the diagnostics are at a low level, and can't > assume that Lisp functions are callable, and that we'll need to do some > of this at the C level regardless. Once it's done there, why bother > with redoing it in Lisp? Highlighting is performed in Lisp. Linkification is performed in Lisp. For instance, help-make-xrefs scans the Help buffer, the contents of which have already passed through substitute-command-keys, for matches of help-xref-symbol-regexp. Without knowing which quotes were escaped, and which appeared in the docstring as-is, it can make wrong cross-references. Take this definition: (defvar foo nil "Referencing `\\=`--pcase-macroexpander' macro.") The references to the function name is not linkified, and to solve this problem better in general, Lisp will need to know which characters were escaped and which weren't. Here's a contrived example which can't be fixed without that: (defun ’‘ (a b c) "It's called `’‘'." (+ 1 2 3)) Of course, we don't have any functions with curly quotes in the name now. But weren't some people just recently clamoring for wider use of Unicode in Emacs Lisp sources? > Whether substitute-command-keys does it directly, or via calling some > other function, is an implementation detail and it's not clear to me yet > which is the right way to go here. It shouldn't perform the translation at all. Not directly, nor via another function. Its callers can do the translation better, and maybe in different ways, depending on the context. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-08-01 21:05 ` Dmitry Gutov @ 2015-08-02 6:56 ` Paul Eggert 2015-08-02 12:51 ` Dmitry Gutov 2015-08-02 8:49 ` Przemysław Wojnowski 1 sibling, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-08-02 6:56 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel Dmitry Gutov wrote: > Here's a contrived example which can't be fixed without that: > > (defun ’‘ (a b c) > "It's called `’‘'." > (+ 1 2 3)) Yes, and one can come up with other contrived examples that fail even without putting curved quotes into the name. Elisp function names can contain any character: apostrophe, grave accent, newline, parenthesis, space, etc., and I'm sure many of these other special characters also cause problems in help buffers. While it might be worthwhile to fix this, it's an independent issue. If it is fixed, I expect you're right that substitute-command-keys will need to be teased apart; this is not just because of curved quotes, but also because its other substitutions can generate characters that also need special treatment. If someone wants to take on that task, that's great, so long as it doesn't get in the way of ordinary use of *Help* buffers. In particular, users should be able to type ‘C-h f length RET’, see this in a *Help* buffer: To get the number of bytes, use ‘string-bytes’. and if they save and later yank this text into a source-code buffer they should get what they see, not a bowdlerized version with ASCII approximations. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-08-02 6:56 ` Paul Eggert @ 2015-08-02 12:51 ` Dmitry Gutov 2015-08-02 15:13 ` Paul Eggert 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-08-02 12:51 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 08/02/2015 09:56 AM, Paul Eggert wrote: > Yes, and one can come up with other contrived examples that fail even > without putting curved quotes into the name. Elisp function names can > contain any character: apostrophe, grave accent, newline, parenthesis, > space, etc., and I'm sure many of these other special characters also > cause problems in help buffers. But we have an escaping syntax! Yet, Elisp doesn't know what's escaped and what isn't, so even this won't help: (defun ’‘ (a b c) "It's called `\\=’\\=‘'." (+ 1 2 3)) > While it might be worthwhile to fix this, it's an independent issue. If > it is fixed, I expect you're right that substitute-command-keys will > need to be teased apart; It's also a matter of readability. Take the latest related commit that you pushed. Sometime later, someone will come along and wonder: why do we need to substitute command keys in widget options? Who would put keys in there? > this is not just because of curved quotes, but > also because its other substitutions can generate characters that also > need special treatment. You might want to give an example. But in general, those characters also could have `escaped' put on them. Or `substituted', for instance. > If someone wants to take on that task, that's > great, so long as it doesn't get in the way of ordinary use of *Help* > buffers. As long as that task involves rearranging C code, you're excluding a significant portion of Emacs developers from contributing, myself included. > In particular, users should be able to type ‘C-h f length > RET’, see this in a *Help* buffer: > > To get the number of bytes, use ‘string-bytes’. > > and if they save and later yank this text into a source-code buffer they > should get what they see, not a bowdlerized version with ASCII > approximations. First, it's an arbitrary condition that you've set yourself, and we've discussed it already. If you asked all Emacs users, I suspect the majority won't care, and the rest won't reach a unanimous decision. Personally, I'd prefer that ‘string-bytes’, after copying and pasting to a "normal" buffer, turned into the original markup, which, in this case, is `string-bytes'. But that seems non-trivial to implement. Second, as long as font-lock isn't used for translation (and we've pretty much agreed that it won't), why wouldn't a Lisp solution work like you describe? ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-08-02 12:51 ` Dmitry Gutov @ 2015-08-02 15:13 ` Paul Eggert 2015-08-02 18:31 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-08-02 15:13 UTC (permalink / raw) To: Dmitry Gutov, emacs-devel Dmitry Gutov wrote: > we have an escaping syntax! Yet, Elisp doesn't know what's escaped and what > isn't, so even this won't help: > > (defun ’‘ (a b c) > "It's called `\\=’\\=‘'." > (+ 1 2 3)) Again, this problem is independent of quoting style, and has long existed in Emacs evem with the older quoting style. For example: (defun \'\` (a b c) "It's called `\\='\\=`'." (+ 1 2 3)) has even worse problems than the ’‘ example does (and these problems also exist in older Emacs). > It's also a matter of readability. Take the latest related commit that you > pushed. Sometime later, someone will come along and wonder: why do we need to > substitute command keys in widget options? Who would put keys in there? That can be addressed by renaming the function to 'substitute-doc-string'. >> this is not just because of curved quotes, but >> also because its other substitutions can generate characters that also >> need special treatment. > > You might want to give an example. (defun foo (a b c) "It's invoked by `\\[next-error]'." (+ 1 2 3)) > But in general, those characters also could > have `escaped' put on them. Or `substituted', for instance. Yes, and substituting \[...] has problems and solutions that are quite similar to substituting ` and '. So even if it makes sense to tease this functionality apart in some cases, it also makes sense to have a single function that does both subsitutions for convenience, as typically programs will not want to do one without doing the other. > As long as that task involves rearranging C code, you're excluding a significant > portion of Emacs developers from contributing, myself included. It's a simple-enough matter to add an argument to substitute-doc-string specifying which kinds of substitutions are wanted. I can volunteer to do that if it would be helpful (though I confess I don't see the use case). Or if you prefer you can rewrite substitute-doc-string in Lisp -- as long as it doesn't affect performance significantly that should be merely an implementation detail. > as long as font-lock isn't used for translation (and we've pretty much > agreed that it won't), why wouldn't a Lisp solution work like you describe? I mentioned the possibility because it's still not clear to me what a Lisp solution would be, if it's not something involving font-lock. If the Lisp solution merely translates the existing C code to Lisp, then of course your point is correct. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-08-02 15:13 ` Paul Eggert @ 2015-08-02 18:31 ` Dmitry Gutov 0 siblings, 0 replies; 51+ messages in thread From: Dmitry Gutov @ 2015-08-02 18:31 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 08/02/2015 06:13 PM, Paul Eggert wrote: > Again, this problem is independent of quoting style, and has long > existed in Emacs evem with the older quoting style. For example: We didn't have an escaping syntax for quotes before. You've increased the complexity of our handling of quoting. Might as well fix some pre-existing problems. Right? Look at it from the user's point of view: quotes can be escaped, it's documented in the substitute-command-keys docstring. And yet, it doesn't help in this kind of situations, where it seemingly should. > (defun foo (a b c) > "It's invoked by `\\[next-error]'." > (+ 1 2 3)) This works now, and would continue to work, as per my suggestion. > Yes, and substituting \[...] has problems and solutions that are quite > similar to substituting ` and '. So even if it makes sense to tease > this functionality apart in some cases, it also makes sense to have a > single function that does both subsitutions for convenience, as > typically programs will not want to do one without doing the other. When both substitutions are required, calling the second function on the result of the first function will be just as easy. Splitting the logic between two functions will make sure the first one doesn't lose information. > It's a simple-enough matter to add an argument to substitute-doc-string > specifying which kinds of substitutions are wanted. I can volunteer to > do that if it would be helpful (though I confess I don't see the use > case). It's better to keep the quote translation logic in one place (in a different function). > Or if you prefer you can rewrite substitute-doc-string in Lisp > -- as long as it doesn't affect performance significantly that should be > merely an implementation detail. Rewriting it also requires some C chops, if only to read the original. I don't know whether it'll lose performance: it might, handing certain keymaps might be intensive. Anyway, even if the resulting function is in Lisp, it won't help as long as it's just one function, and it still loses information about which characters were originally escaped. > I mentioned the possibility because it's still not clear to me what a > Lisp solution would be, if it's not something involving font-lock. If > the Lisp solution merely translates the existing C code to Lisp, then of > course your point is correct. The Lisp solution would replace actual characters with different characters. In the text, not apply the transformation via text properties (although that's also an option). ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-08-01 21:05 ` Dmitry Gutov 2015-08-02 6:56 ` Paul Eggert @ 2015-08-02 8:49 ` Przemysław Wojnowski 2015-08-02 19:16 ` Drew Adams 1 sibling, 1 reply; 51+ messages in thread From: Przemysław Wojnowski @ 2015-08-02 8:49 UTC (permalink / raw) To: Dmitry Gutov, Paul Eggert, emacs-devel Hi. Is this still thread about a change from the type of quote that is on each keyboard (`') to the other one (that is not)? IMHO it would be fantastic exercise to do a retrospective after implementing the feature. My two questions for the retrospective: 1. What was purpose of the change? To replace `' with the other one (sorry, don't have it on my keyboard)? What for? 2. *Was it worth it*? Considering number of people involved and time spent by those writing and reading emails (even I'm wasting my time now on writing this email). Don't get me wrong, I'm not saying that you shouldn't do what you are doing. Everyone can do with their time what they want, but maybe it would be good to create a Backlog for Emacs and prioritize (at least a bit) to see what's really important and _is_ worth the effort. Cheers, Przemysław ^ permalink raw reply [flat|nested] 51+ messages in thread
* RE: Escaping quotes in docstrings, Was: A simple solution to "Upcoming loss of usability ..." 2015-08-02 8:49 ` Przemysław Wojnowski @ 2015-08-02 19:16 ` Drew Adams 0 siblings, 0 replies; 51+ messages in thread From: Drew Adams @ 2015-08-02 19:16 UTC (permalink / raw) To: Przemysław Wojnowski, Dmitry Gutov, Paul Eggert, emacs-devel > 1. What was purpose of the change? > To replace `' with the other one (sorry, don't have it on my > keyboard)? What for? > > 2. *Was it worth it*? > Considering number of people involved and time spent by those > writing and reading emails (even I'm wasting my time now on > writing this email). > > Don't get me wrong, I'm not saying that you shouldn't do what > you are doing. Provided it is optional for users to suffer from it. Let them opt in, if they really want this behavior. At a minimum, let them easily opt out, pretty-please. I don't even see that possibility currently. How to opt out doesn't seem to be documented, at least, and lots of source code seems to hard-code your changes. We were told over and over that this would be just a healthy "experiment" and that people shouldn't react prematurely. Well, it's been several months now. Are you prepared to back this misguided feature out? Or were those who decried such a gratuitous & invasive development correct, in supposing that backing-out would become next to impossible and this gross hack job would be here to stay, whatever the post-mortem judgment might be? > Everyone can do with their time what they want, but maybe it > would be good to create a Backlog for Emacs and prioritize > (at least a bit) to see what's really important and _is_ > worth the effort. +1 So far, my impression is that there have been a shiPload of deep changes that try to work around all kinds of problems that have been introduced - and to work around the problems that those workarounds have introduced... I haven't seen such an invasive change in a long time (never?). Makes Rube Goldberg machines look Occam-elegant. And for what? Just to fit the esthetic, cosmetic concerns of two or three developers? Please tell users now _how to opt out completely_, at a minimum. If letting users restore the longstanding behavior means getting rid of hard-coded hacks, so be it - please do it. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-27 17:28 ` Paul Eggert 2015-06-27 17:53 ` Dmitry Gutov @ 2015-06-27 17:57 ` Dmitry Gutov 1 sibling, 0 replies; 51+ messages in thread From: Dmitry Gutov @ 2015-06-27 17:57 UTC (permalink / raw) To: Paul Eggert, emacs-devel On 06/27/2015 08:28 PM, Paul Eggert wrote: > Plus, as we've mentioned, the patch can mishandle user-supplied values > that contain grave accent and apostrophe. BTW, do you have an example we can easily refer to when testing the patches? ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 22:17 ` Paul Eggert 2015-06-25 22:38 ` Dmitry Gutov @ 2015-06-25 23:12 ` João Távora 2015-06-26 7:40 ` Oleh Krehel 2 siblings, 0 replies; 51+ messages in thread From: João Távora @ 2015-06-25 23:12 UTC (permalink / raw) To: Paul Eggert; +Cc: emacs-devel, Oleh Krehel, Dmitry Gutov On Thu, Jun 25, 2015 at 11:17 PM, Paul Eggert <eggert@cs.ucla.edu> wrote: > As I said, action-at-a-distance is not a fatal objection. But yes, that > behavior of double-quote is objectionable, and I wish that Emacs didn't do > it. I hope we don't need to add more glitches like it. Just my two cents, I largely avoid this problem using electric-pair-mode, which I designed with this use case in mind. It works in strings and comments as well. Unsure if it supports your single-quote example, but if not, it should/could. João ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 22:17 ` Paul Eggert 2015-06-25 22:38 ` Dmitry Gutov 2015-06-25 23:12 ` João Távora @ 2015-06-26 7:40 ` Oleh Krehel 2015-06-26 14:54 ` Paul Eggert 2 siblings, 1 reply; 51+ messages in thread From: Oleh Krehel @ 2015-06-26 7:40 UTC (permalink / raw) To: Paul Eggert; +Cc: emacs-devel, Dmitry Gutov Paul Eggert <eggert@cs.ucla.edu> writes: > Third-party code doesn't need to change. It'll still work reasonably > well. By "reasonably well" you mean that 3rd party will use one notation while the Emacs sources will use another. I thought the whole purpose of the change was to make things "more clear" for new users. I think that the change makes it less clear. Especially if you consider that a new user is more likely to contribute to 3rd party Elisp projects before he starts to contribute to Emacs sources (or even starts to look at them). I know this because that was the case for me. I hope most people will agree that having two notations for one thing is bad for everyone: both novices and experts. There's one popular programming language with the motto: > There should be one-- and preferably only one --obvious way to do it. Look at what happened to it when they tried to mix things up: Python 3 was released in 2008. And I'm still using 2.7.6. Granted, I'm not a Python expert, but my impression is that many people still use 2.7. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-26 7:40 ` Oleh Krehel @ 2015-06-26 14:54 ` Paul Eggert 2015-06-26 15:03 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-06-26 14:54 UTC (permalink / raw) To: Oleh Krehel; +Cc: emacs-devel, Dmitry Gutov Oleh Krehel wrote: > I hope most people will agree that having two notations for one thing is > bad for everyone: both novices and experts. Of course. The problem is that Emacs Lisp currently lacks notation and mechanism for doing the right thing with respect to user preference in quoting style. It will be a hassle to modify the old ASCII-only notation and implementation to address this problem while remaining ASCII-only. (I've started that job, but it's by no means done.) In contrast, it's quite simple to use curved quotes to denote quotes. There's no question that we'll continue to support the old ASCII-only style indefinitely, even though it's relatively clumsy and confusing. The only question is whether we'll also support a simpler style in which quotes normally stand for themselves, with the idea of moving to the simpler in the long run if it works out. That is, the question is whether the long-term gain is worth the extra short-term pain. (No matter what we do, we'll have some short-term pain; this is inevitable.) This is a judgment call, and the conservative approach is of course to add some more escape sequence complication to our ASCII-only approach, and/or to use gimmicks like font-lock mode to display characters other than what's actually in the buffer. But really, it's much simpler to use quotes to denote quotes, some of us prefer doing it the simpler way, and we should give the simpler alternative a try. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-26 14:54 ` Paul Eggert @ 2015-06-26 15:03 ` Dmitry Gutov 0 siblings, 0 replies; 51+ messages in thread From: Dmitry Gutov @ 2015-06-26 15:03 UTC (permalink / raw) To: Paul Eggert, Oleh Krehel; +Cc: emacs-devel On 06/26/2015 05:54 PM, Paul Eggert wrote: > In contrast, it's quite simple to use curved quotes to denote quotes. People voiced their concerns about discomforts when typing those already. It's only "simple" in a very narrow sense. > This is a judgment call, and the conservative approach is of course to > add some more escape sequence complication to our ASCII-only approach, > and/or to use gimmicks like font-lock mode to display characters other font-lock mode is no gimmick. But you're conflating its usage with the ASCII-only approach again. They're orthogonal: you can just as well use ASCII quotes and translate them using substitute-command-keys. Or vice versa. > than what's actually in the buffer. But really, it's much simpler to > use quotes to denote quotes, some of us prefer doing it the simpler way, > and we should give the simpler alternative a try. I really wish you gave it a try in a feature branch, and then asked for a vote before merging it into master. ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 16:36 ` Paul Eggert 2015-06-25 17:00 ` Oleh Krehel 2015-06-25 18:32 ` Dmitry Gutov @ 2015-06-25 20:58 ` Alan Mackenzie 2015-06-25 22:34 ` Paul Eggert 2 siblings, 1 reply; 51+ messages in thread From: Alan Mackenzie @ 2015-06-25 20:58 UTC (permalink / raw) To: Paul Eggert; +Cc: Oleh Krehel, emacs-devel Hello, Paul. On Thu, Jun 25, 2015 at 09:36:53AM -0700, Paul Eggert wrote: > Oleh Krehel wrote: > > (font-lock-add-keywords > > 'emacs-lisp-mode > > '(("\\(`\\)\\([a-zA-Z-0-9]+\\)\\('\\)" > The proposed approach would mishandle many cases where the things being quoted > are not typical Lisp identifiers. E.g.: > "Press ‘h’ for complete help; press ‘?’ repeatedly for a summary" > "Make ‘funcall/apply’ form to map SOURCE-ARGLIST to TARGET-ARGLIST...." > "... Example: ‘(ad-map-arglists '(a &rest args) '(w x y z))’ will return ..." I think there will be several of these cases rather than many. > Also, the proposed approach won't easily generalize to diagnostics, which often > quote non-identifiers like ‘%s’. There's also a UI problem: it would cause > action-at-a-distance, because typing an apostrophe in one place in the buffer > would visually alter a part of the line many characters away. > (Action-at-a-distance is not a fatal objection, but it is better to avoid it > when possible.) It's not a problem at all. Font lock does it all the time. For example, just type in "save-excursion" a letter at a time. Only on typing the "n" does the whole symbol get fontified. > Most of the advantages you mention for the proposed approach are also advantages > of the approach in master. With the current approach, the Emacs sources don't > need to be changed, .... they've already been massively changed. > .... quotes are just as easy to input (in Electric Quote mode), .... This is an unpleasant workaround. It violates "what you type is what you get". > .... terminal and copy-pasting work, and quotes are markup. Which is true, for certain values of "terminal" and "copy-pasting". > The main advantage of the proposed approach over the current master is that the > source code often can still contain grave accent and apostrophe unmodified, even > though people reading and editing the source code will see curved quotes. To my > mind this is more a recipe for confusion than anything else -- at least, I > wouldn't want to inflict it on Emacs newcomers. The main advantage is that non-working characters, the curly quotes, would not take a central role in Emacs Lisp source code, together with all the workarounds of questionable taste that they necessitate. It is solely these non-working characters which I take exception to, and I think the same is true of several others objecting to these changes. How about considering these other approaches, in which non-working characters would not be proliferated through the strings in our source code? -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 20:58 ` Alan Mackenzie @ 2015-06-25 22:34 ` Paul Eggert 2015-06-25 22:40 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-06-25 22:34 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel Alan Mackenzie wrote: > The main advantage is that non-working characters, the curly quotes, > would not take a central role in Emacs Lisp source code Even with the font-lock approach, curved quotes will commonly appear on the screen and users and developers will have to deal with them, regardless of whether most of the quotes are the result of on-the-fly transformations. So this is not a real advantage over the current approach. I have been seriously considering font-lock approaches but so far they appear to be more confusing and less reliable than the alternatives. For example, how would font-lock alter the quotes that Emacs outputs in batch diagnostics? ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 22:34 ` Paul Eggert @ 2015-06-25 22:40 ` Dmitry Gutov 2015-06-25 22:45 ` Paul Eggert 0 siblings, 1 reply; 51+ messages in thread From: Dmitry Gutov @ 2015-06-25 22:40 UTC (permalink / raw) To: Paul Eggert, Alan Mackenzie; +Cc: emacs-devel On 06/26/2015 01:34 AM, Paul Eggert wrote: > Even with the font-lock approach, curved quotes will commonly appear on > the screen and users and developers will have to deal with them, Not if they aren't in source files, and if the user decided to turn off their rendering. > I have been seriously considering font-lock approaches but so far they > appear to be more confusing and less reliable than the alternatives. > For example, how would font-lock alter the quotes that Emacs outputs in > batch diagnostics? It probably won't, you'll need a different function. However, substitute-command-keys wouldn't seem right for that purpose either (are there any command keys in diagnostics?). ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 22:40 ` Dmitry Gutov @ 2015-06-25 22:45 ` Paul Eggert 2015-06-25 22:55 ` Dmitry Gutov 0 siblings, 1 reply; 51+ messages in thread From: Paul Eggert @ 2015-06-25 22:45 UTC (permalink / raw) To: Dmitry Gutov; +Cc: emacs-devel Dmitry Gutov wrote: > >> I have been seriously considering font-lock approaches but so far they >> appear to be more confusing and less reliable than the alternatives. >> For example, how would font-lock alter the quotes that Emacs outputs in >> batch diagnostics? > > It probably won't, you'll need a different function. OK, that can be the format-message function already discussed. So the font-lock proposal isn't intended to address the problem of diagnostics, or of info or help buffers for that matter; it's intended only to address the issue of displaying docstrings to a developer who's editing Elisp code. Is that correct? ^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: A simple solution to "Upcoming loss of usability ..." 2015-06-25 22:45 ` Paul Eggert @ 2015-06-25 22:55 ` Dmitry Gutov 0 siblings, 0 replies; 51+ messages in thread From: Dmitry Gutov @ 2015-06-25 22:55 UTC (permalink / raw) To: Paul Eggert; +Cc: emacs-devel On 06/26/2015 01:45 AM, Paul Eggert wrote: > OK, that can be the format-message function already discussed. Indeed. > So the > font-lock proposal isn't intended to address the problem of diagnostics, > or of info or help buffers for that matter; it's intended only to > address the issue of displaying docstrings to a developer who's editing > Elisp code. Is that correct? Not correct. font-lock runs in the help buffers, as well as info (if I'm not mistaken), so that approach can be used in those too. Haven't you seen my recent message with the patch for help-mode? ^ permalink raw reply [flat|nested] 51+ messages in thread
end of thread, other threads:[~2015-08-02 19:16 UTC | newest] Thread overview: 51+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-06-25 14:59 A simple solution to "Upcoming loss of usability ..." Oleh Krehel 2015-06-25 15:37 ` Dmitry Gutov 2015-06-25 16:36 ` Paul Eggert 2015-06-25 17:00 ` Oleh Krehel 2015-06-25 20:48 ` Paul Eggert 2015-06-25 21:10 ` Dmitry Gutov 2015-06-25 22:15 ` Paul Eggert 2015-06-25 22:25 ` Dmitry Gutov 2015-06-25 22:41 ` Paul Eggert 2015-06-25 22:52 ` Dmitry Gutov 2015-06-27 15:00 ` raman 2015-06-25 18:32 ` Dmitry Gutov 2015-06-25 22:17 ` Paul Eggert 2015-06-25 22:38 ` Dmitry Gutov 2015-06-26 2:35 ` Paul Eggert 2015-06-26 12:06 ` Dmitry Gutov 2015-06-27 17:28 ` Paul Eggert 2015-06-27 17:53 ` Dmitry Gutov 2015-06-27 21:09 ` Paul Eggert 2015-06-28 1:04 ` Dmitry Gutov 2015-06-28 15:20 ` Paul Eggert 2015-06-28 20:27 ` Escaping quotes in docstrings, Was: " Dmitry Gutov 2015-06-28 23:29 ` Dmitry Gutov 2015-07-01 2:56 ` Paul Eggert 2015-07-02 0:09 ` Dmitry Gutov 2015-07-02 6:57 ` Paul Eggert 2015-07-02 9:46 ` Dmitry Gutov 2015-07-06 6:12 ` Paul Eggert 2015-07-06 12:07 ` Dmitry Gutov 2015-07-06 16:30 ` Paul Eggert 2015-07-06 22:10 ` Dmitry Gutov 2015-07-07 7:54 ` Paul Eggert 2015-07-07 8:39 ` Dmitry Gutov 2015-08-01 1:36 ` Paul Eggert 2015-08-01 21:05 ` Dmitry Gutov 2015-08-02 6:56 ` Paul Eggert 2015-08-02 12:51 ` Dmitry Gutov 2015-08-02 15:13 ` Paul Eggert 2015-08-02 18:31 ` Dmitry Gutov 2015-08-02 8:49 ` Przemysław Wojnowski 2015-08-02 19:16 ` Drew Adams 2015-06-27 17:57 ` Dmitry Gutov 2015-06-25 23:12 ` João Távora 2015-06-26 7:40 ` Oleh Krehel 2015-06-26 14:54 ` Paul Eggert 2015-06-26 15:03 ` Dmitry Gutov 2015-06-25 20:58 ` Alan Mackenzie 2015-06-25 22:34 ` Paul Eggert 2015-06-25 22:40 ` Dmitry Gutov 2015-06-25 22:45 ` Paul Eggert 2015-06-25 22:55 ` Dmitry Gutov
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).