* bug#32516: 26.1; Reshape Arabic Characters in the Terminal
@ 2018-08-23 21:06 Naheel Azawy
2018-08-24 6:28 ` Eli Zaretskii
0 siblings, 1 reply; 4+ messages in thread
From: Naheel Azawy @ 2018-08-23 21:06 UTC (permalink / raw
To: 32516
[-- Attachment #1: Type: text/plain, Size: 23660 bytes --]
The problem occurs in the terminal mode with Arabic characters. Emacs
handles the bidirectional text correctly in terms of direction but it
doesn't reshape the characters depending on its location. More details
can be seen with screenshots on my question in Emacs stack exchange:
https://emacs.stackexchange.com/questions/44144/arabic-in-terminal-mode
I have also written a little minor mode as workaround to this problem:
https://github.com/Naheel-Azawy/emacs-arabic-reshaper
but an actual solution is expected to only render the characters while
they're displayed in the screen and not reshape the entire file as I'm
doing with my minor mode.
Thanks,
Naheel
In GNU Emacs 26.1 (build 1, x86_64-redhat-linux-gnu, GTK+ Version
3.22.30)
of 2018-06-26 built on buildhw-10.phx2.fedoraproject.org
Windowing system distributor 'Fedora Project', version 11.0.11906000
System Description: Fedora release 28 (Twenty Eight)
Recent messages:
Wrote /home/naheel/Documents/orgmode/TODO-2018-summer.org
When done with a buffer, type C-x # [4 times]
previous-line: Beginning of buffer [4 times]
Auto-saving...done
previous-line: Beginning of buffer [2 times]
Auto-saving...done
previous-line: Beginning of buffer [6 times]
Saving file /home/naheel/Documents/orgmode/TODO-major.org...
Wrote /home/naheel/Documents/orgmode/TODO-major.org
(No changes need to be saved)
Configured using:
'configure --build=x86_64-redhat-linux-gnu
--host=x86_64-redhat-linux-gnu --program-prefix=
--disable-dependency-tracking --prefix=/usr --exec-prefix=/usr
--bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc
--datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64
--libexecdir=/usr/libexec --localstatedir=/var
--sharedstatedir=/var/lib --mandir=/usr/share/man
--infodir=/usr/share/info --with-dbus --with-gif --with-jpeg --with-
png
--with-rsvg --with-tiff --with-xft --with-xpm --with-x-toolkit=gtk3
--with-gpm=no --with-xwidgets --with-modules
build_alias=x86_64-redhat-linux-gnu host_alias=x86_64-redhat-linux-gnu
'CFLAGS=-DMAIL_USE_LOCKF -O2 -g -pipe -Wall -Werror=format-security
-Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions
-fstack-protector-strong -grecord-gcc-switches
-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic
-fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection'
LDFLAGS=-Wl,-z,relro
PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'
Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND DBUS GSETTINGS NOTIFY ACL
LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 MODULES THREADS XWIDGETS LCMS2
Important settings:
value of $LANG: en_US.UTF-8
value of $XMODIFIERS: @im=ibus
locale-coding-system: utf-8-unix
Major mode: Org
Minor modes in effect:
org-bullets-mode: t
yas-global-mode: t
yas-minor-mode: t
diff-auto-refine-mode: t
helm-descbinds-mode: t
helm-mode: t
helm-flx-mode: t
global-vi-tilde-fringe-mode: t
vi-tilde-fringe-mode: t
projectile-mode: t
recentf-mode: t
global-auto-complete-mode: t
xclip-mode: t
hl-todo-mode: t
winum-mode: t
winner-mode: t
volatile-highlights-mode: t
spaceline-info-mode: t
spaceline-helm-mode: t
save-place-mode: t
savehist-mode: t
popwin-mode: t
persp-mode: t
Info-breadcrumbs-in-mode-line-mode: t
flx-ido-mode: t
eyebrowse-mode: t
global-evil-surround-mode: t
evil-surround-mode: t
global-evil-search-highlight-persist: t
evil-search-highlight-persist: t
show-smartparens-global-mode: t
show-smartparens-mode: t
evil-escape-mode: t
global-anzu-mode: t
anzu-mode: t
eval-sexp-fu-flash-mode: t
clean-aindent-mode: t
holy-mode: t
which-key-mode: t
override-global-mode: t
global-undo-tree-mode: t
undo-tree-mode: t
shell-dirtrack-mode: t
evil-mode: t
evil-local-mode: t
spacemacs-leader-override-mode: t
global-spacemacs-leader-override-mode: t
global-hl-line-mode: t
xterm-mouse-mode: t
global-auto-revert-mode: t
ido-vertical-mode: t
global-page-break-lines-mode: t
page-break-lines-mode: t
global-eldoc-mode: t
eldoc-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
column-number-mode: t
line-number-mode: t
transient-mark-mode: t
Load-path shadows:
/usr/share/emacs/site-lisp/site-start.d/maxima-modes hides
/usr/share/emacs/site-lisp/maxima/site_start.d/maxima-modes
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-habit hides
/usr/share/emacs/26.1/lisp/org/org-habit
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-shen hides
/usr/share/emacs/26.1/lisp/org/ob-shen
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-latex hides
/usr/share/emacs/26.1/lisp/org/ob-latex
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-stan hides
/usr/share/emacs/26.1/lisp/org/ob-stan
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-sed hides
/usr/share/emacs/26.1/lisp/org/ob-sed
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-lua hides
/usr/share/emacs/26.1/lisp/org/ob-lua
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-element hides
/usr/share/emacs/26.1/lisp/org/org-element
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-screen hides
/usr/share/emacs/26.1/lisp/org/ob-screen
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-datetree hides
/usr/share/emacs/26.1/lisp/org/org-datetree
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-list hides
/usr/share/emacs/26.1/lisp/org/org-list
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-coq hides
/usr/share/emacs/26.1/lisp/org/ob-coq
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-tangle hides
/usr/share/emacs/26.1/lisp/org/ob-tangle
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-crypt hides
/usr/share/emacs/26.1/lisp/org/org-crypt
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-org hides
/usr/share/emacs/26.1/lisp/org/ob-org
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-maxima hides
/usr/share/emacs/26.1/lisp/org/ob-maxima
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-java hides
/usr/share/emacs/26.1/lisp/org/ob-java
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-w3m hides
/usr/share/emacs/26.1/lisp/org/org-w3m
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-calc hides
/usr/share/emacs/26.1/lisp/org/ob-calc
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-css hides
/usr/share/emacs/26.1/lisp/org/ob-css
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-archive hides
/usr/share/emacs/26.1/lisp/org/org-archive
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-info hides
/usr/share/emacs/26.1/lisp/org/org-info
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-python hides
/usr/share/emacs/26.1/lisp/org/ob-python
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-awk hides
/usr/share/emacs/26.1/lisp/org/ob-awk
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-docview hides
/usr/share/emacs/26.1/lisp/org/org-docview
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-clock hides
/usr/share/emacs/26.1/lisp/org/org-clock
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-agenda hides
/usr/share/emacs/26.1/lisp/org/org-agenda
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-macs hides
/usr/share/emacs/26.1/lisp/org/org-macs
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-table hides
/usr/share/emacs/26.1/lisp/org/ob-table
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-man hides
/usr/share/emacs/26.1/lisp/org/ox-man
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-ocaml hides
/usr/share/emacs/26.1/lisp/org/ob-ocaml
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-emacs-lisp
hides /usr/share/emacs/26.1/lisp/org/ob-emacs-lisp
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-plantuml hides
/usr/share/emacs/26.1/lisp/org/ob-plantuml
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-asymptote hides
/usr/share/emacs/26.1/lisp/org/ob-asymptote
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-publish hides
/usr/share/emacs/26.1/lisp/org/ox-publish
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob hides
/usr/share/emacs/26.1/lisp/org/ob
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-compat hides
/usr/share/emacs/26.1/lisp/org/org-compat
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-lilypond hides
/usr/share/emacs/26.1/lisp/org/ob-lilypond
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org hides
/usr/share/emacs/26.1/lisp/org/org
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-picolisp hides
/usr/share/emacs/26.1/lisp/org/ob-picolisp
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-lob hides
/usr/share/emacs/26.1/lisp/org/ob-lob
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-md hides
/usr/share/emacs/26.1/lisp/org/ox-md
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-texinfo hides
/usr/share/emacs/26.1/lisp/org/ox-texinfo
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-core hides
/usr/share/emacs/26.1/lisp/org/ob-core
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-ref hides
/usr/share/emacs/26.1/lisp/org/ob-ref
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-ebnf hides
/usr/share/emacs/26.1/lisp/org/ob-ebnf
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-js hides
/usr/share/emacs/26.1/lisp/org/ob-js
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-ascii hides
/usr/share/emacs/26.1/lisp/org/ox-ascii
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-fortran hides
/usr/share/emacs/26.1/lisp/org/ob-fortran
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-perl hides
/usr/share/emacs/26.1/lisp/org/ob-perl
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-dot hides
/usr/share/emacs/26.1/lisp/org/ob-dot
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-table hides
/usr/share/emacs/26.1/lisp/org/org-table
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-abc hides
/usr/share/emacs/26.1/lisp/org/ob-abc
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-shell hides
/usr/share/emacs/26.1/lisp/org/ob-shell
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-eww hides
/usr/share/emacs/26.1/lisp/org/org-eww
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-lint hides
/usr/share/emacs/26.1/lisp/org/org-lint
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-plot hides
/usr/share/emacs/26.1/lisp/org/org-plot
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-gnus hides
/usr/share/emacs/26.1/lisp/org/org-gnus
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-faces hides
/usr/share/emacs/26.1/lisp/org/org-faces
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-bbdb hides
/usr/share/emacs/26.1/lisp/org/org-bbdb
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-R hides
/usr/share/emacs/26.1/lisp/org/ob-R
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-icalendar hides
/usr/share/emacs/26.1/lisp/org/ox-icalendar
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-inlinetask
hides /usr/share/emacs/26.1/lisp/org/org-inlinetask
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-io hides
/usr/share/emacs/26.1/lisp/org/ob-io
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox hides
/usr/share/emacs/26.1/lisp/org/ox
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-ruby hides
/usr/share/emacs/26.1/lisp/org/ob-ruby
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-mobile hides
/usr/share/emacs/26.1/lisp/org/org-mobile
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-install hides
/usr/share/emacs/26.1/lisp/org/org-install
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-exp hides
/usr/share/emacs/26.1/lisp/org/ob-exp
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-irc hides
/usr/share/emacs/26.1/lisp/org/org-irc
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-eval hides
/usr/share/emacs/26.1/lisp/org/ob-eval
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-scheme hides
/usr/share/emacs/26.1/lisp/org/ob-scheme
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-latex hides
/usr/share/emacs/26.1/lisp/org/ox-latex
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-hledger hides
/usr/share/emacs/26.1/lisp/org/ob-hledger
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-ditaa hides
/usr/share/emacs/26.1/lisp/org/ob-ditaa
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-C hides
/usr/share/emacs/26.1/lisp/org/ob-C
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-entities hides
/usr/share/emacs/26.1/lisp/org/org-entities
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-eshell hides
/usr/share/emacs/26.1/lisp/org/org-eshell
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-bibtex hides
/usr/share/emacs/26.1/lisp/org/org-bibtex
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-attach hides
/usr/share/emacs/26.1/lisp/org/org-attach
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-J hides
/usr/share/emacs/26.1/lisp/org/ob-J
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-sql hides
/usr/share/emacs/26.1/lisp/org/ob-sql
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-groovy hides
/usr/share/emacs/26.1/lisp/org/ob-groovy
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-vala hides
/usr/share/emacs/26.1/lisp/org/ob-vala
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-id hides
/usr/share/emacs/26.1/lisp/org/org-id
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-version hides
/usr/share/emacs/26.1/lisp/org/org-version
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-rmail hides
/usr/share/emacs/26.1/lisp/org/org-rmail
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-pcomplete
hides /usr/share/emacs/26.1/lisp/org/org-pcomplete
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-colview hides
/usr/share/emacs/26.1/lisp/org/org-colview
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-clojure hides
/usr/share/emacs/26.1/lisp/org/ob-clojure
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-sqlite hides
/usr/share/emacs/26.1/lisp/org/ob-sqlite
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-gnuplot hides
/usr/share/emacs/26.1/lisp/org/ob-gnuplot
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-mhe hides
/usr/share/emacs/26.1/lisp/org/org-mhe
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-src hides
/usr/share/emacs/26.1/lisp/org/org-src
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-haskell hides
/usr/share/emacs/26.1/lisp/org/ob-haskell
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-makefile hides
/usr/share/emacs/26.1/lisp/org/ob-makefile
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-beamer hides
/usr/share/emacs/26.1/lisp/org/ox-beamer
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-timer hides
/usr/share/emacs/26.1/lisp/org/org-timer
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-comint hides
/usr/share/emacs/26.1/lisp/org/ob-comint
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-duration hides
/usr/share/emacs/26.1/lisp/org/org-duration
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-processing
hides /usr/share/emacs/26.1/lisp/org/ob-processing
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-odt hides
/usr/share/emacs/26.1/lisp/org/ox-odt
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-feed hides
/usr/share/emacs/26.1/lisp/org/org-feed
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-loaddefs hides
/usr/share/emacs/26.1/lisp/org/org-loaddefs
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-footnote hides
/usr/share/emacs/26.1/lisp/org/org-footnote
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-indent hides
/usr/share/emacs/26.1/lisp/org/org-indent
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-ctags hides
/usr/share/emacs/26.1/lisp/org/org-ctags
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-html hides
/usr/share/emacs/26.1/lisp/org/ox-html
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-octave hides
/usr/share/emacs/26.1/lisp/org/ob-octave
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-capture hides
/usr/share/emacs/26.1/lisp/org/org-capture
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-ledger hides
/usr/share/emacs/26.1/lisp/org/ob-ledger
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-keys hides
/usr/share/emacs/26.1/lisp/org/ob-keys
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-protocol hides
/usr/share/emacs/26.1/lisp/org/org-protocol
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ox-org hides
/usr/share/emacs/26.1/lisp/org/ox-org
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-sass hides
/usr/share/emacs/26.1/lisp/org/ob-sass
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-forth hides
/usr/share/emacs/26.1/lisp/org/ob-forth
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-matlab hides
/usr/share/emacs/26.1/lisp/org/ob-matlab
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-lisp hides
/usr/share/emacs/26.1/lisp/org/ob-lisp
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-macro hides
/usr/share/emacs/26.1/lisp/org/org-macro
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/org-mouse hides
/usr/share/emacs/26.1/lisp/org/org-mouse
/home/naheel/.emacs.d/elpa/org-plus-contrib-20180806/ob-mscgen hides
/usr/share/emacs/26.1/lisp/org/ob-mscgen
Features:
(shadow sort mail-extr emacsbug sendmail sparql-mode drupal-mode
drupal/emacs-drush drupal/flycheck drupal/phpcs drupal/ispell
drupal/etags drupal/eldoc sql view php-mode php-project mode-local
speedbar sb-image ezimage dframe add-log cc-langs json-mode
json-reformat json-snatcher smartparens-javascript js smartparens-html
sgml-mode dom imenu sh-script smie executable org-eldoc org-bullets
toc-org org-rmail org-mhe org-irc org-info org-gnus nnir gnus-sum
gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail mail-source
utf7 netrc nnoo gnus-spec gnus-int gnus-range message rfc822 mml mml-
sec
epa epg mailabbrev gmm-utils mailheader gnus-win gnus nnheader gnus-
util
rmail rmail-loaddefs org-docview doc-view jka-compr dired dired-
loaddefs
org-bibtex bibtex org-bbdb org-w3m mail-utils network-stream starttls
url-cache url-http tls gnutls url-gw nsm rmc puny url-auth anaconda-
mode
url url-proxy url-privacy url-expand url-methods url-history url-cookie
url-domsuf url-util mailcap pythonic evil-matchit evil-matchit-sdk
hi-lock smartparens-python python tramp-sh auto-compile packed
elisp-slime-nav vala-snippets yasnippet elec-pair misearch multi-
isearch
macrostep-c cmacexp macrostep auto-complete-c-headers tramp tramp-
compat
tramp-loaddefs trampver ucs-normalize parse-time goto-addr bug-
reference
auto-highlight-symbol highlight-numbers parent-mode
highlight-parentheses hideshow rainbow-delimiters helm-command
helm-elisp helm-eval edebug helm-info vc-git diff-mode open-junk-file
term/xterm xterm pp helm-descbinds helm-mode helm-files helm-buffers
helm-tags helm-locate helm-grep helm-regexp helm-utils helm-help
helm-types helm-flx helm helm-source helm-multi-match helm-lib async
vi-tilde-fringe diminish projectile grep ibuf-ext ibuffer
ibuffer-loaddefs recentf tree-widget ox-reveal ox-odt rng-loc rng-uri
rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns
nxml-enc xmltok nxml-util ox-latex ox-icalendar ox-html table ox-ascii
ox-publish ox htmlize ob-C cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs smartparens-org org-
element
avl-tree generator org org-macro org-footnote org-pcomplete org-list
org-faces org-entities org-version ob-emacs-lisp ob ob-tangle org-src
ob-ref ob-lob ob-table ob-keys ob-exp ob-comint ob-core ob-eval
org-compat org-macs org-loaddefs cal-menu calendar cal-loaddefs
multiple-cursors mc-hide-unmatched-lines-mode mc-separate-operations
rectangular-region-mode mc-mark-pop mc-mark-more mc-cycle-cursors
mc-edit-lines multiple-cursors-core flycheck find-func flymake-proc
flymake compile auto-complete-config auto-complete popup xclip hl-todo
server ws-butler winum winner etags xref project volatile-highlights
spaceline-config spaceline-segments spaceline powerline
powerline-separators color powerline-themes smartparens-config
smartparens-text saveplace savehist popwin persp-mode linum info+
image-mode go-rename flx-ido flx eyebrowse format-spec evil-unimpaired
f
s evil-surround evil-search-highlight-persist evil-numbers
evil-lisp-state smartparens dash evil-indent-plus evil-exchange
evil-escape evil-args evil-anzu anzu eval-sexp-fu highlight noutline
outline drupal/pcomplete rx clean-aindent-mode adaptive-wrap hybrid-
mode
exec-path-from-shell evil-evilified-state time-date which-key
use-package use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key use-package-core hydra lv cus-edit
cus-start cus-load evil evil-integration undo-tree diff evil-maps
evil-commands reveal flyspell ispell evil-jumps evil-command-window
evil-types evil-search evil-ex shell pcomplete comint ansi-color
evil-macros evil-repeat evil-states evil-core evil-common windmove
thingatpt rect evil-digraphs evil-vars ring info bind-map quelpa
help-fns radix-tree package-build mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr json
map lisp-mnt hl-line xt-mouse autorevert filenotify cl-extra disp-table
wid-edit spacemacs-dark-theme spacemacs-common finder-inf
core-configuration-layer eieio-compat ht cl help-mode warnings package
epg-config url-handlers url-parse auth-source cl-seq password-cache
url-vars eieio eieio-core eieio-loaddefs ido-vertical-mode ido seq
byte-opt bytecomp byte-compile cconv core-spacemacs core-use-package-
ext
core-transient-state core-micro-state core-toggle core-keybindings
core-fonts-support core-spacemacs-buffer core-funcs core-themes-support
core-display-init core-jump core-auto-completion core-release-
management
core-dotspacemacs core-command-line pcase core-debug edmacro kmacro
derived advice profiler easymenu page-break-lines easy-mmode subr-x
clang-format cl-macs gv xml cl-loaddefs cl-lib mule-util tooltip eldoc
electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win
x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt
fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page menu-bar rfn-eshadow isearch timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite charscript charprop case-table epa-hook jka-cmpr-hook
help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs
button faces cus-face macroexp files text-properties overlay sha1 md5
base64 format env code-pages mule custom widget hashtable-print-
readable
backquote dbusbind inotify lcms2 dynamic-setting system-font-setting
font-render-setting xwidget-internal move-toolbar gtk x-toolkit x
multi-tty make-network-process emacs)
Memory information:
((conses 16 1001845 884166)
(symbols 48 72147 14)
(miscs 40 1551 5209)
(strings 32 224843 89466)
(string-bytes 1 7600056)
(vectors 16 133549)
(vector-slots 8 2944967 187560)
(floats 8 810 9223)
(intervals 56 3566 1991)
(buffers 992 55))
[-- Attachment #2: Type: text/html, Size: 29036 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#32516: 26.1; Reshape Arabic Characters in the Terminal
2018-08-23 21:06 bug#32516: 26.1; Reshape Arabic Characters in the Terminal Naheel Azawy
@ 2018-08-24 6:28 ` Eli Zaretskii
2018-08-24 22:25 ` Naheel Azawy
0 siblings, 1 reply; 4+ messages in thread
From: Eli Zaretskii @ 2018-08-24 6:28 UTC (permalink / raw
To: Naheel Azawy; +Cc: 32516
> From: Naheel Azawy <naheelazawy@gmail.com>
> Date: Fri, 24 Aug 2018 00:06:19 +0300
>
> The problem occurs in the terminal mode with Arabic characters. Emacs
> handles the bidirectional text correctly in terms of direction but it
> doesn't reshape the characters depending on its location. More details
> can be seen with screenshots on my question in Emacs stack exchange:
> https://emacs.stackexchange.com/questions/44144/arabic-in-terminal-mode
> I have also written a little minor mode as workaround to this problem:
> https://github.com/Naheel-Azawy/emacs-arabic-reshaper
> but an actual solution is expected to only render the characters while
> they're displayed in the screen and not reshape the entire file as I'm
> doing with my minor mode.
Does it help to turn off auto-composition-mode?
If that doesn't help, then I'm afraid you will have to look for a
terminal emulator that supports character composition and Arabic
shaping, but can let you turn off its bidi reordering. (PuTTY can do
that, but it's for logging from Windows into Unix systems, so AFAIK
will not run natively on Posix hosts.)
You see, Emacs supports Arabic shaping by using a shaping engine
(a.k.a. "font backend") that works with OTF/TTF fonts, which know what
glyphs are needed to represent a correctly-shaped Arabic letter or
ligature composed from certain codepoints. But this only works on GUI
frames, because on text-mode frames, Emacs just writes the codes of
the characters to the terminal driver, it cannot specify font glyphs
to display those characters.
As you have discovered, disabling bidi-display-reordering is not the
solution, because there's much more to bidi editing support in Emacs
than just reordering characters for display. That is why we need
bidi-aware display engine in Emacs in the first place, and cannot rely
on external solutions like what exists in Pango etc., or in terminal
emulators, for that matter.
If BiCon can let you disable its reordering, and still perform
shaping, then that's your solution. If it doesn't, then maybe asking
its developers to provide such a feature, or coding it yourself, is
the way forward for you and other Arabic-speaking users of text-mode
frames in Emacs.
Bottom line: this isn't a bug in Emacs, this is how the code was
designed and supposed to work on TTY frames.
Of course, if someone knows a way to communicate character shaping to
a terminal driver, we could think of implementing that in Emacs. But
does such a protocol exist?
Thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#32516: 26.1; Reshape Arabic Characters in the Terminal
2018-08-24 6:28 ` Eli Zaretskii
@ 2018-08-24 22:25 ` Naheel Azawy
2018-08-25 7:03 ` Eli Zaretskii
0 siblings, 1 reply; 4+ messages in thread
From: Naheel Azawy @ 2018-08-24 22:25 UTC (permalink / raw
To: eliz; +Cc: 32516
[-- Attachment #1: Type: text/plain, Size: 2918 bytes --]
Thanks for you quick reply!
Nope, auto-composition-mode didn't help.
But https://github.com/behdad/bicon/pull/20 did!
Now `bicon.bin --reshape-only emacsclient -nw $@` is pretty ok.
It still has some issues but that should be fixed in bicon.
Thanks,
On Fri, Aug 24, 2018 at 9:29 AM Eli Zaretskii <eliz@gnu.org> wrote:
> > From: Naheel Azawy <naheelazawy@gmail.com>
> > Date: Fri, 24 Aug 2018 00:06:19 +0300
> >
> > The problem occurs in the terminal mode with Arabic characters. Emacs
> > handles the bidirectional text correctly in terms of direction but it
> > doesn't reshape the characters depending on its location. More details
> > can be seen with screenshots on my question in Emacs stack exchange:
> > https://emacs.stackexchange.com/questions/44144/arabic-in-terminal-mode
> > I have also written a little minor mode as workaround to this problem:
> > https://github.com/Naheel-Azawy/emacs-arabic-reshaper
> > but an actual solution is expected to only render the characters while
> > they're displayed in the screen and not reshape the entire file as I'm
> > doing with my minor mode.
>
> Does it help to turn off auto-composition-mode?
>
> If that doesn't help, then I'm afraid you will have to look for a
> terminal emulator that supports character composition and Arabic
> shaping, but can let you turn off its bidi reordering. (PuTTY can do
> that, but it's for logging from Windows into Unix systems, so AFAIK
> will not run natively on Posix hosts.)
>
> You see, Emacs supports Arabic shaping by using a shaping engine
> (a.k.a. "font backend") that works with OTF/TTF fonts, which know what
> glyphs are needed to represent a correctly-shaped Arabic letter or
> ligature composed from certain codepoints. But this only works on GUI
> frames, because on text-mode frames, Emacs just writes the codes of
> the characters to the terminal driver, it cannot specify font glyphs
> to display those characters.
>
> As you have discovered, disabling bidi-display-reordering is not the
> solution, because there's much more to bidi editing support in Emacs
> than just reordering characters for display. That is why we need
> bidi-aware display engine in Emacs in the first place, and cannot rely
> on external solutions like what exists in Pango etc., or in terminal
> emulators, for that matter.
>
> If BiCon can let you disable its reordering, and still perform
> shaping, then that's your solution. If it doesn't, then maybe asking
> its developers to provide such a feature, or coding it yourself, is
> the way forward for you and other Arabic-speaking users of text-mode
> frames in Emacs.
>
> Bottom line: this isn't a bug in Emacs, this is how the code was
> designed and supposed to work on TTY frames.
>
> Of course, if someone knows a way to communicate character shaping to
> a terminal driver, we could think of implementing that in Emacs. But
> does such a protocol exist?
>
> Thanks.
>
[-- Attachment #2: Type: text/html, Size: 3860 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#32516: 26.1; Reshape Arabic Characters in the Terminal
2018-08-24 22:25 ` Naheel Azawy
@ 2018-08-25 7:03 ` Eli Zaretskii
0 siblings, 0 replies; 4+ messages in thread
From: Eli Zaretskii @ 2018-08-25 7:03 UTC (permalink / raw
To: Naheel Azawy; +Cc: 32516-done
tags 32516 notabug
thanks
> From: Naheel Azawy <naheelazawy@gmail.com>
> Date: Sat, 25 Aug 2018 01:25:22 +0300
> Cc: 32516@debbugs.gnu.org
>
> Nope, auto-composition-mode didn't help.
> But https://github.com/behdad/bicon/pull/20 did!
Yes, this is exactly what I was talking about.
> Now `bicon.bin --reshape-only emacsclient -nw $@` is pretty ok.
> It still has some issues but that should be fixed in bicon.
Thanks, I'm therefore closing this bug.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-08-25 7:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-08-23 21:06 bug#32516: 26.1; Reshape Arabic Characters in the Terminal Naheel Azawy
2018-08-24 6:28 ` Eli Zaretskii
2018-08-24 22:25 ` Naheel Azawy
2018-08-25 7:03 ` Eli Zaretskii
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.