cursor movement in right-to-left mode
-
Hi everyone,
Arrow key navigation seems to be defined so that right arrow always moves the cursor FORWARD. This is counter-intuitive in RTL mode, as “forward” is now in the LEFT direction, and all other programs I know work that way. Would the developers consider changing this? In the meantime, can anyone help with a workaround? I.e. can the arrow keys be mapped differently for RTL and LTR modes?
Thank you very much,
Nir -
you could do it with a python script
_g = globals() # global variable used to check status if not _g.get('SWITCHED_TO_RTL'): # if variable not defined yet, SWITCHED_TO_RTL = False # ----------------------------------------------------------------------------- def main(): # main function to handle start/stop behavior global SWITCHED_TO_RTL # assining to global variable if SWITCHED_TO_RTL: # if currently in RTL mode SWITCHED_TO_RTL = False # set flag to False editor.assignCmdKey(KEYS.RIGHT,2306) # and remap arrow and editor.assignCmdKey(KEYS.LEFT,2304) # left arrow key to default notepad.menuCommand(MENUCOMMAND.EDIT_LTR) # change view mode back to LTR else: # else SWITCHED_TO_RTL = True # set the flag to true editor.assignCmdKey(KEYS.RIGHT,2304) # and remap arrow and editor.assignCmdKey(KEYS.LEFT,2306) # left arrow key notepad.menuCommand(MENUCOMMAND.EDIT_RTL) # change view mode to LTR # ----------------------------------------------------------------------------- main()When running the script for the first time it remaps the left and right arrow key and changes the view to RTL,
next run would reverse the changes.Cheers
Claudia -
Thank you very much Claudia, but I since realized the problem goes deeper (or is the following a separate problem?). The “push” mechanism for RTL languages in LTR mode is a bit screwy. Here’s an example: make sure you’re in LTR mode; on a blank line, enter “א”, space, “1”; on anther, enter “1”, space, “א”. Both lines look the same: “1 א” :(.
Also, if you select the first letter in the first line, it LOOKS like the 1 is selected, but cut’n’paste it, and you’ll find the “real” first char, “א”, is the one that was selected.
Developers? Workaround? Any other insights?
Thank you,
Nir -
I’ve been working with this problem for years now… Never found a workaround - I’d love it if there was, however, it seems like most programs have this problem. Microsoft Word is one of the only programs that deal with this excellently!
-
I think this is a problem of some of the lexers because if I try to do it and having python as language set it doesn’t happen.
But if I have normal text as language, then it happens. You can workaround it by defining an empty udl and use it as “YOUR_NORMAL_TEXT”.Btw I guess there is a need to have more shortcuts reassigned. The once, I think, are useful are
_g = globals() # global variable used to check status if not _g.get('SWITCHED_TO_RTL'): # if variable not defined yet, SWITCHED_TO_RTL = False # ----------------------------------------------------------------------------- def main(): # main function to handle start/stop behavior global SWITCHED_TO_RTL # assining to global variable if SWITCHED_TO_RTL: # if currently in RTL mode SWITCHED_TO_RTL = False # set flag to False (default) editor.assignCmdKey(KEYS.LEFT, 2304) # char left editor.assignCmdKey(KEYS.LEFT + (KEYMOD.SHIFT << 16), 2305) # char left extend editor.assignCmdKey(KEYS.LEFT + (KEYMOD.SHIFT + KEYMOD.ALT << 16), 2428) # char left rect extend editor.assignCmdKey(KEYS.LEFT + (KEYMOD.CTRL << 16), 2308) # word left editor.assignCmdKey(KEYS.LEFT + (KEYMOD.SHIFT + KEYMOD.CTRL << 16), 2309) # word left extend editor.assignCmdKey(KEYS.RIGHT, 2306) # char right editor.assignCmdKey(KEYS.RIGHT + (KEYMOD.SHIFT << 16), 2307) # char right extend editor.assignCmdKey(KEYS.RIGHT + (KEYMOD.SHIFT + KEYMOD.ALT << 16), 2429) # char right rect extend editor.assignCmdKey(KEYS.RIGHT + (KEYMOD.CTRL << 16), 2310) # word right editor.assignCmdKey(KEYS.RIGHT + (KEYMOD.SHIFT + KEYMOD.CTRL << 16), 2311) # word right extend notepad.menuCommand(MENUCOMMAND.EDIT_LTR) # change view mode back to LTR else: # else SWITCHED_TO_RTL = True # set the flag to true (RTL mode) editor.assignCmdKey(KEYS.RIGHT, 2304) # editor.assignCmdKey(KEYS.RIGHT + (KEYMOD.SHIFT << 16), 2305) # editor.assignCmdKey(KEYS.RIGHT + (KEYMOD.SHIFT + KEYMOD.ALT << 16), 2428) # editor.assignCmdKey(KEYS.RIGHT + (KEYMOD.CTRL << 16), 2308) # editor.assignCmdKey(KEYS.RIGHT + (KEYMOD.SHIFT + KEYMOD.CTRL << 16), 2309) # editor.assignCmdKey(KEYS.LEFT, 2306) # editor.assignCmdKey(KEYS.LEFT + (KEYMOD.SHIFT << 16), 2307) # editor.assignCmdKey(KEYS.LEFT + (KEYMOD.SHIFT + KEYMOD.ALT << 16), 2429) # editor.assignCmdKey(KEYS.LEFT + (KEYMOD.CTRL << 16), 2310) # editor.assignCmdKey(KEYS.LEFT + (KEYMOD.SHIFT + KEYMOD.CTRL << 16), 2311) # notepad.menuCommand(MENUCOMMAND.EDIT_RTL) # change view mode to RTL # ----------------------------------------------------------------------------- main()Cheers
Claudia -
Hello all,
@Claudia,
Welcome back. :)And thanks for the script.
Two comments:editor1andeditor2if you want to apply the keys to both views.- Ctrl + (reassigned) Arrow does not work properly when using a RTL language in LTR mode (and vice versa).
@Nir,
Scintilla does not fully support RTL. We should raise the issue there more frequently.@Davey,
EditPad is quite a good editor which fully supports RTL and bidi.
You can set the behavior of the left/right arrows in Options -> Configure File Types -> Editor Options -> Default text layout -> Edit.
(I use the PRO version).
Best regards.
-
@Yaron,
Hi and thanks for the suggestion.
My problem is that I am referring to coding - i.e., in my code I have Hebrew text (e.g. messages, dialogs etc.) and it’s extremely difficult to work with!
So, since I use n++ for coding (as I developed a custom syntax using UDL2 as well as functions hints and function list), using editPad is not really relevant in my case… unless there’s more there than I expect… :)Thanks,
David -
Hello David,
You’re welcome.
NPP is undoubtedly a great editor. Combining Latin and Hebrew, however, is much easier with EditPad.
It is a developer editor and you can set a custom syntax highlight.I use a toolbar button in both editors to open the current file (and line) in the other editor.
In NPP:
<Command name="פתח ב- EditPad..." Ctrl="no" Alt="no" Shift="no" Key="0">"C:\Program Files\EditPad Pro\EditPadPro7.exe" "$(FULL_CURRENT_PATH)" /l$(CURRENT_LINE)</Command>and in EditPad:
"C:\Program Files\Notepad++\NP\notepad++.exe" "%FILE%" -n%LINE%.Best regards.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login