[LyX/master] Add LFUN_WORD_TOGGLECASE (word-togglecase)
Jean-Marc Lasgouttes
lasgouttes at lyx.org
Mon Oct 14 16:27:03 UTC 2024
commit afc524da3f981d1377667ce38c30fe430e9d74a9
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date: Mon Oct 14 18:10:05 2024 +0200
Add LFUN_WORD_TOGGLECASE (word-togglecase)
The new function word-togglecase is a companion of word-upcase and
word-lowcase: it toggles each character between lowcase and upcase,
which is useful when one FORGOT THE cAPS lOCK KEY.
Add bindings (except for emacs) and a menu entry.
---
lib/RELEASE-NOTES | 6 +++++-
lib/bind/de/menus.bind | 1 +
lib/bind/menus.bind | 1 +
lib/ui/stdmenus.inc | 1 +
src/FuncCode.h | 1 +
src/LyXAction.cpp | 11 +++++++++++
src/Paragraph.cpp | 25 +++++++++++++++----------
src/Paragraph.h | 8 +++++---
src/Text.cpp | 5 +++++
9 files changed, 45 insertions(+), 14 deletions(-)
diff --git a/lib/RELEASE-NOTES b/lib/RELEASE-NOTES
index b36b8cce74..3a6ee92d9d 100644
--- a/lib/RELEASE-NOTES
+++ b/lib/RELEASE-NOTES
@@ -13,9 +13,13 @@
!!!The following new LyX functions have been introduced in 2.5:
+- The new function word-togglecase is a companion of word-upcase and
+ word-lowcase: it toggles each character between lowcase and upcase,
+ which is useful when one FORGOT THE cAPS lOCK KEY.
+
!!!The following LyX functions have been changed in 2.5:
-- The funcion window_new does not take an optional <GEOMETRY>
+- The funcion window-new does not take an optional <GEOMETRY>
parameter anymore. This only worked in windows and existed for
internal reasons.
diff --git a/lib/bind/de/menus.bind b/lib/bind/de/menus.bind
index de19222eef..3f0b166790 100644
--- a/lib/bind/de/menus.bind
+++ b/lib/bind/de/menus.bind
@@ -154,6 +154,7 @@ Format 5
\bind "M-z Down" "word-lowcase"
\bind "M-z Up" "word-upcase"
+\bind "M-z Left" "word-togglecase"
\bind "M-z Right" "word-capitalize"
\bind "M-z space" "font-default"
diff --git a/lib/bind/menus.bind b/lib/bind/menus.bind
index fafc2d36e2..4fdda8bbfc 100644
--- a/lib/bind/menus.bind
+++ b/lib/bind/menus.bind
@@ -155,6 +155,7 @@ Format 5
\bind "M-c Down" "word-lowcase"
\bind "M-c Up" "word-upcase"
+\bind "M-c Left" "word-togglecase"
\bind "M-c Right" "word-capitalize"
\bind "M-c space" "font-default"
diff --git a/lib/ui/stdmenus.inc b/lib/ui/stdmenus.inc
index b3ed8c9c53..01a4def3ff 100644
--- a/lib/ui/stdmenus.inc
+++ b/lib/ui/stdmenus.inc
@@ -190,6 +190,7 @@ Menuset
Item "Capitalize|p" "word-capitalize"
Item "Uppercase|U" "word-upcase"
Item "Lowercase|L" "word-lowcase"
+ Item "Toggle Case|T" "word-togglecase"
End
Menu "edit_textstyles"
diff --git a/src/FuncCode.h b/src/FuncCode.h
index b8e2e0a0ac..691305274d 100644
--- a/src/FuncCode.h
+++ b/src/FuncCode.h
@@ -512,6 +512,7 @@ enum FuncCode
LFUN_REFERENCE_INSERT, // spitz, 20240728
// 400
LFUN_REFERENCE_TO_PARAGRAPH, // spitz, 20240728
+ LFUN_WORD_TOGGLECASE, // lasgouttes 20241014
LFUN_LASTACTION // end of the table
};
diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp
index d7db81fe2e..72d9598652 100644
--- a/src/LyXAction.cpp
+++ b/src/LyXAction.cpp
@@ -4654,6 +4654,17 @@ void LyXAction::init()
*/
{ LFUN_WORD_SELECT, "word-select", ReadOnly, Edit },
+/*!
+ * \var lyx::FuncCode lyx::LFUN_WORD_TOGGLECASE
+ * \li Action: Invert the case of the words in the selection or word at cursor position.
+ * \li Syntax: word-togglecase [<SEL_TYPE>]
+ * \li Params: <SEL_TYPE>: if this is equal to "partial", then the
+ * default word starts at cursor position (emacs-style).
+ * Otherwise, the whole word is considered.
+ * \endvar
+ */
+ { LFUN_WORD_TOGGLECASE, "word-togglecase", Noop, Edit },
+
/*!
* \var lyx::FuncCode lyx::LFUN_WORD_UPCASE
* \li Action: Change the words in the selection or word at cursor position
diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index 72fdd85dde..33faa59254 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -4789,18 +4789,23 @@ void Paragraph::changeCase(BufferParams const & bparams, pos_type pos,
// ignore insets and don't play with deleted text!
if (oldChar != META_INSET && !isDeleted(pos)) {
switch (action) {
- case text_lowercase:
+ case text_lowercase:
+ newChar = lowercase(oldChar);
+ break;
+ case text_capitalization:
+ if (capitalize) {
+ newChar = uppercase(oldChar);
+ capitalize = false;
+ }
+ break;
+ case text_uppercase:
+ newChar = uppercase(oldChar);
+ break;
+ case text_togglecase:
+ if (isUpperCase(oldChar))
newChar = lowercase(oldChar);
- break;
- case text_capitalization:
- if (capitalize) {
- newChar = uppercase(oldChar);
- capitalize = false;
- }
- break;
- case text_uppercase:
+ else if (isLowerCase(oldChar))
newChar = uppercase(oldChar);
- break;
}
}
diff --git a/src/Paragraph.h b/src/Paragraph.h
index 467054499c..91bc40eba2 100644
--- a/src/Paragraph.h
+++ b/src/Paragraph.h
@@ -110,11 +110,13 @@ public:
///
enum TextCase {
///
- text_lowercase = 0,
+ text_lowercase,
///
- text_capitalization = 1,
+ text_capitalization,
///
- text_uppercase = 2
+ text_uppercase,
+ ///
+ text_togglecase
};
diff --git a/src/Text.cpp b/src/Text.cpp
index 7147c15719..4c7a445fc5 100644
--- a/src/Text.cpp
+++ b/src/Text.cpp
@@ -4946,6 +4946,10 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
changeCase(cur, text_capitalization, cmd.getArg(0) == "partial");
break;
+ case LFUN_WORD_TOGGLECASE:
+ changeCase(cur, text_togglecase, cmd.getArg(0) == "partial");
+ break;
+
case LFUN_CHARS_TRANSPOSE:
charsTranspose(cur);
break;
@@ -7159,6 +7163,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
case LFUN_WORD_UPCASE:
case LFUN_WORD_LOWCASE:
case LFUN_WORD_CAPITALIZE:
+ case LFUN_WORD_TOGGLECASE:
case LFUN_CHARS_TRANSPOSE:
case LFUN_SERVER_GET_XY:
case LFUN_SERVER_SET_XY:
More information about the lyx-cvs
mailing list