From c15d21b833f32896138afffaa9d7c9d917d52ea7 Mon Sep 17 00:00:00 2001 From: Gregory Heytings Date: Wed, 3 Nov 2021 15:58:02 +0000 Subject: [PATCH] Make bidi reordering characters visible * lisp/progmodes/prog-mode.el (bidi-reordering-characters-visible, bidi-reordering-characters-fontify, bidi-reordering-characters-toggle-visibility): New functions. --- lisp/progmodes/prog-mode.el | 47 ++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el index db350a5f70..e4f63b0645 100644 --- a/lisp/progmodes/prog-mode.el +++ b/lisp/progmodes/prog-mode.el @@ -289,6 +289,50 @@ turn-on-prettify-symbols-mode (local-variable-p 'prettify-symbols-alist)) (prettify-symbols-mode 1))) +(defvar-local bidi-reordering-characters-visible nil + "Internal variable used by `bidi-reordering-characters-visible'.") + +(defun bidi-reordering-characters-fontify () + "Fontify bidi reordering characters with `font-lock-warning-face'." + (font-lock-add-keywords + nil + '(("⁩\\|‬\\|⁨\\|⁧\\|⁦\\|‫\\|‪\\|‮\\|‭" . (0 'font-lock-warning-face t))))) + +(defun bidi-reordering-characters-visible () + "Display bidi reordering characters as arrows." + (setq buffer-display-table (or buffer-display-table + standard-display-table + (make-display-table))) + (bidi-reordering-character-toggle-visibility) + (add-hook 'font-lock-mode-hook #'bidi-reordering-characters-fontify)) + +;;;###autoload +(defun bidi-reordering-character-toggle-visibility () + "Toggle the visibility of bidi reordering characters." + (interactive) + (setq bidi-reordering-characters-visible + (not bidi-reordering-characters-visible)) + (when bidi-reordering-characters-visible + (aset buffer-display-table ?‪ [?→]) + (aset buffer-display-table ?‫ [?←]) + (aset buffer-display-table ?‭ [?→]) + (aset buffer-display-table ?‮ [?←]) + (aset buffer-display-table ?⁦ [?→]) + (aset buffer-display-table ?⁧ [?←]) + (aset buffer-display-table ?⁨ [?↓]) + (aset buffer-display-table ?‬ [?↑]) + (aset buffer-display-table ?⁩ [?↑])) + (unless bidi-reordering-characters-visible + (aset buffer-display-table ?‪ nil) + (aset buffer-display-table ?‫ nil) + (aset buffer-display-table ?‭ nil) + (aset buffer-display-table ?‮ nil) + (aset buffer-display-table ?⁦ nil) + (aset buffer-display-table ?⁧ nil) + (aset buffer-display-table ?⁨ nil) + (aset buffer-display-table ?‬ nil) + (aset buffer-display-table ?⁩ nil))) + ;;;###autoload (define-globalized-minor-mode global-prettify-symbols-mode prettify-symbols-mode turn-on-prettify-symbols-mode) @@ -300,7 +344,8 @@ prog-mode (setq-local parse-sexp-ignore-comments t) (add-hook 'context-menu-functions 'prog-context-menu 10 t) ;; Any programming language is always written left to right. - (setq bidi-paragraph-direction 'left-to-right)) + (setq bidi-paragraph-direction 'left-to-right) + (bidi-reordering-characters-visible)) (provide 'prog-mode) -- 2.33.0