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.
This commit is contained in:
Jean-Marc Lasgouttes 2024-10-14 18:10:05 +02:00
parent 3d2ffc5b53
commit afc524da3f
9 changed files with 46 additions and 15 deletions

View File

@ -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.

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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
};

View File

@ -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

View File

@ -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:
newChar = lowercase(oldChar);
break;
case text_capitalization:
if (capitalize) {
newChar = uppercase(oldChar);
capitalize = false;
}
break;
case text_uppercase:
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);
else if (isLowerCase(oldChar))
newChar = uppercase(oldChar);
break;
}
}

View File

@ -110,11 +110,13 @@ public:
///
enum TextCase {
///
text_lowercase = 0,
text_lowercase,
///
text_capitalization = 1,
text_capitalization,
///
text_uppercase = 2
text_uppercase,
///
text_togglecase
};

View File

@ -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: