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
next 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).