unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Spencer Baugh <sbaugh@janestreet.com>
To: 66614@debbugs.gnu.org
Subject: bug#66614: 29.1.50; Support not capitalizing words inside symbols
Date: Wed, 18 Oct 2023 12:32:04 -0400	[thread overview]
Message-ID: <iero7gv51tn.fsf@janestreet.com> (raw)


Quick definitions:
- word: a sequence of characters whose syntax is word constituent
- symbol: a sequence of characters whose syntax is either word
constituent or symbol constituent

In some programming languages and styles, a symbol (or every symbol in a
sequence of symbols) might be capitalized, but the individual words
making up the symbol should never be capitalized.

For example, in OCaml, type names Look_like_this and variable names
look_like_this, but it is basically never correct for something to
Look_Like_This.  And one might have "aa_bb cc_dd ee_ff" or "Aa_bb Cc_dd
Ee_ff", but never "Aa_Bb Cc_Dd Ee_Ff".

Currently, case handling in casefiddle.c and Freplace_match always
capitalizes individual words, which has undesirable effects when
programming in these styles.  Three examples:

- If I have a variable "hash_set" and a type name "Hash_set", and I type
  "Ha" and dabbrev-expand, then depending on the context Ha may expand
  to Hash_Set instead of hash_set.  But it is never correct to
  caplitalize internal words in this style, so we could avoid this.

- If I have a variable foo and Foo, and I query-replace foo with
  bar_baz, the replacements will be bar_baz and Bar_Baz.  But again it
  is never correct to capitalize internal words in this style.

- More concretely,
  (progn 
    (string-match "az" "Az")
    (replace-match "az_bz" nil nil "Az"))
  yields Az_Bz, but in this programming style it should always yield
  Az_bz.

A naive solution is to change the syntax class of symbol constituents so
that they are treated as part of words.  Or, equivalently, to use
superword-mode.  This solution is incorrect, though: the distinction
between symbols and words is still useful for word and symbol navigation
commands, and other purposes besides.  Changing the syntax class will
break those other use cases.  The only thing that needs to be changed is
the case behavior.

This is straightforwardly solvable by supporting a behavior where symbol
constituents are treated as part of words only for case operations.

A patch follows which adds a variable which allows that.


In GNU Emacs 29.1.50 (build 11, x86_64-pc-linux-gnu, X toolkit, cairo
 version 1.15.12, Xaw scroll bars) of 2023-10-18 built on

Repository revision: 9163e634e296435aa7a78bc6b77b4ee90666d2ac
Repository branch: emacs-29
Windowing system distributor 'The X.Org Foundation', version 11.0.12011000






             reply	other threads:[~2023-10-18 16:32 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-18 16:32 Spencer Baugh [this message]
2023-10-18 17:01 ` bug#66614: 29.1.50; Support not capitalizing words inside symbols Spencer Baugh
2023-10-18 18:24   ` Eli Zaretskii
2023-10-18 18:55     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-18 18:34   ` Eli Zaretskii
2023-10-18 19:38     ` Spencer Baugh
2023-10-19  4:35       ` Eli Zaretskii
2023-10-21 15:11         ` sbaugh
2023-10-29 11:42           ` Eli Zaretskii
2023-10-19 10:54       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-21 15:13         ` sbaugh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=iero7gv51tn.fsf@janestreet.com \
    --to=sbaugh@janestreet.com \
    --cc=66614@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).