This gist will show the support of BiDirectional text in the terminal emulators and console programs. You can read more about the standardization efforts at the dedicated page of FreeDesktop Terminal BiDi working group.
Logical Order | ◀ ◀ ◀ RTL | LTR ▶ ▶ ▶ |
---|---|---|
WHAT IS UNICODE؟ in arabic | in arabic ؟EDOCINU SI TAHW | ؟EDOCINU SI TAHW in arabic |
ما هو الترميز الموحد يونيكود؟ in Arabic | ما هو الترميز الموحد يونيكود؟ in Arabic |
According to a new standard
Please note, that specification is preliminary yet, and VTE implementation is still work in progress:
- all libvte based terminals - https://gitlab.gnome.org/GNOME/vte/issues/53
- libvte-based Gnome Terminal - https://bugs.launchpad.net/ubuntu/+source/vte/+bug/263822
- libvte-based sakura
- libvte-based xfce4-terminal
- libvte-based Terminator
- libvte-based Tilix - written in D. Similar user interface as for Terminator.
- libvte-based Lilyterm - https://github.com/Tetralet/LilyTerm/
- libvte-based ROXTerm
- libvte-based evilvte https://github.com/caleb-/evilvte
- libvte-based Termit
- libvte-based Tilda
- libvte-based tinyterm
- libvte-based Pantheon Terminal
- libvte-based lxterminal
Incompatible and incomplete implementations
- neatvi - Vi-like editor aligrudi/neatvi#8
- another libvte-based Termite
- st (from suckless)
- xst fork of st gnotclub/xst#55
- iterm2
- alacritty - written in Rust alacritty/alacritty#663
- kitty - uses OpenGL kovidgoyal/kitty#2109
- cool-retro-term
- Termux - Android platform
- Black Screen - crossplatform, HTML/CSS/JS-based
- Hyper.app - crossplatform, HTML/CSS/JS-based (Electron)
- hterm - HTML/CSS/JS-based (ChromeOS)
- Windows Terminal - Windows platform, standard terminal microsoft/terminal#538
- Tera Term - Windows platform
- ConEmu - Windows platform Maximus5/ConEmu#1665
- FinalTerm - abandoned, iTerm2 borrowing it's ideas and features.
- MacTerm - Mac OS X platform
- Windows 10 bash and cmd.exe console - https://wpdev.uservoice.com/forums/266908-command-prompt-console-windows-subsystem-for-l/suggestions/34937857-bidirectional-text-support
- tmux - not yet tmux/tmux#1936
- screen - not yet
- pymux - not yet prompt-toolkit/pymux#77
- dvtm - not yet martanne/dvtm#99
- neovim - neovim/neovim#553
- vim - vim/vim#204
- radare2 - https://github.com/radare/radare2/issues/2032
- irssi - irssi/irssi#1133
I've spent the last few months studying and evaluating the only document about BiDi in terminals that I could locate, as well as existing implementations. Unfortunately I have severe problems with all of them.
The most important problem with all the self-claimed BiDi-aware terminals is that they always apply the Unicode BiDi algorithm on the contents, giving no way for applications to switch it off. This way they literally, mathematically provably become a platform on top of which it's impossible to implement proper BiDi-aware text viewing/editing experience. (In most terminals you can disable BiDi in the settings, but it's an unacceptable user experience if people have to do so every time they start up or quit a text editor.)
They also work on lines of text rather than paragraphs, lack support for overall RTL direction, and suffer from various one-off problems as well.
Thus I'd make the bold claim that the terminals mentioned above as supporting BiDi actually don't. Supporting BiDi doesn't mean unconditionally doing it, since it does about as much harm as good. Supporting BiDi means (among plenty of other things) knowing when to do it and when not to.
I came up with a draft specification on how BiDi should be done in terminal emulators, it's at https://terminal-wg.pages.freedesktop.org/bidi/ . Feedback about this spec is welcome over there. I'm making a somewhat bold, but well supported claim that only terminals that implement BiDi according to this spec should be called BiDi-aware.
Recently Mintty did a couple of improvements, partially along the lines of the new specs. I haven't yet had a chance to evaluate what it supports now and what it still doesn't.