[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-B
From: |
Juri Linkov |
Subject: |
bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F |
Date: |
Tue, 03 Nov 2020 20:44:18 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) |
>> But that's not what I meant. I meant that if we want to base this on
>> text properties, we should do this via hi-lock or similar, not in the
>> display engine which treats all characters the same.
>
> Or markchars.el, or uni-confusables.el. Like these packages maybe better
> to create another package e.g. nobreak.el, based on font-lock-mode?
Now I extended markchars.el to highlight exactly the same characters
as highlighted by nobreak-char-display, and additionally highlight them
only in files names in Dired. This is configurable with such hook:
(add-hook 'dired-mode-hook
(lambda ()
(setq-local nobreak-char-display nil)
(setq-local markchars-what '(markchars-nobreak-space
markchars-nobreak-hyphen))
(markchars-mode 1)))
diff --git a/packages/markchars/markchars.el b/packages/markchars/markchars.el
index 7d7fe2982..bd902f7c7 100644
--- a/packages/markchars/markchars.el
+++ b/packages/markchars/markchars.el
@@ -31,6 +31,12 @@
;; `markchars-face-confusable' or `markchars-face-pattern'
;; respectively.
;;
+;; You can set `nobreak-char-display' to nil, and use
+;; `markchars-nobreak-space' and `markchars-nobreak-hyphen'
+;; in Dired buffers to highlight `nobreak-space' and `nobreak-hyphen'
+;; only in file names, not `nobreak-space' used by thousands separators
+;; in file sizes (bug#44236).
+;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Change log:
@@ -79,6 +85,16 @@ markchars-white
"White face for `markchars-mode' char marking."
:group 'markchars)
+(defface markchars-nobreak-space
+ '((t (:inherit nobreak-space)))
+ "Face for displaying nobreak space."
+ :group 'markchars)
+
+(defface markchars-nobreak-hyphen
+ '((t (:inherit nobreak-hyphen)))
+ "Face for displaying nobreak hyphens."
+ :group 'markchars)
+
(defcustom markchars-face-pattern 'markchars-heavy
"Pointer to face used for marking matched patterns."
:type 'face
@@ -101,12 +117,40 @@ markchars-simple-pattern
:type 'regexp
:group 'markchars)
+(defvar markchars-nobreak-space-pattern
+ (rx (any ;; ?\N{SPACE}
+ ?\N{NO-BREAK SPACE}
+ ?\N{OGHAM SPACE MARK}
+ ?\N{EN QUAD}
+ ?\N{EM QUAD}
+ ?\N{EN SPACE}
+ ?\N{EM SPACE}
+ ?\N{THREE-PER-EM SPACE}
+ ?\N{FOUR-PER-EM SPACE}
+ ?\N{SIX-PER-EM SPACE}
+ ?\N{FIGURE SPACE}
+ ?\N{PUNCTUATION SPACE}
+ ?\N{THIN SPACE}
+ ?\N{HAIR SPACE}
+ ?\N{NARROW NO-BREAK SPACE}
+ ?\N{MEDIUM MATHEMATICAL SPACE}
+ ?\N{IDEOGRAPHIC SPACE}))
+ "A list of characters with general-category `Zs' (Separator, Space).")
+
+(defvar markchars-nobreak-hyphen-pattern
+ (rx (any ?\N{SOFT HYPHEN} ?\N{HYPHEN} ?\N{NON-BREAKING HYPHEN}))
+ "A list of hyphen characters.")
+
(defcustom markchars-what
`(markchars-simple-pattern
markchars-confusables
,@(when (fboundp 'idn-is-recommended) '(markchars-nonidn-fun)))
"Things to mark, a list of regular expressions or symbols."
:type `(repeat (choice :tag "Marking choices"
+ (const :tag "Non-ASCII space chars"
+ markchars-nobreak-space)
+ (const :tag "Non-ASCII hyphen chars"
+ markchars-nobreak-hyphen)
(const
:tag "Non IDN chars (Unicode.org tr39 suggestions)"
markchars-nonidn-fun)
@@ -129,6 +173,18 @@ markchars-set-keywords
(when (eq what 'markchars-simple-pattern)
(setq what markchars-simple-pattern))
(cond
+ ((eq what 'markchars-nobreak-space)
+ (list
+ markchars-nobreak-space-pattern
+ (list 0 '(markchars--render-nobreak-space
+ (match-beginning 0)
+ (match-end 0)))))
+ ((eq what 'markchars-nobreak-hyphen)
+ (list
+ markchars-nobreak-hyphen-pattern
+ (list 0 '(markchars--render-nobreak-hyphen
+ (match-beginning 0)
+ (match-end 0)))))
((eq what 'markchars-nonidn-fun)
(list
"\\<\\w+\\>"
@@ -184,6 +240,22 @@ markchars--render-nonidn
(put-text-property (point) (1+ (point)) 'face
markchars-face-nonidn)))
(forward-char))))
+(defun markchars--render-nobreak-space (beg end)
+ "Assign markchars pattern properties between BEG and END.
+In Dired/WDired buffers, highlight nobreak-space characters
+only in file names, not anywhere else, so it doesn't highlight
+nobreak-space characters used by thousands separators in file sizes."
+ (when (or (not (derived-mode-p 'dired-mode 'wdired-mode))
+ (or (get-text-property beg 'dired-filename)
+ (get-text-property end 'dired-filename)))
+ (put-text-property beg end 'face 'markchars-nobreak-space)
+ (put-text-property beg end 'markchars 'nobreak-space)))
+
+(defun markchars--render-nobreak-hyphen (beg end)
+ "Assign markchars pattern properties between BEG and END."
+ (put-text-property beg end 'face 'markchars-nobreak-hyphen)
+ (put-text-property beg end 'markchars 'nobreak-hyphen))
+
;;;###autoload
(define-minor-mode markchars-mode
"Mark special characters.
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Juri Linkov, 2020/11/01
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Juri Linkov, 2020/11/01
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Lars Ingebrigtsen, 2020/11/01
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Eli Zaretskii, 2020/11/01
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Juri Linkov, 2020/11/01
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Eli Zaretskii, 2020/11/01
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Juri Linkov, 2020/11/01
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Eli Zaretskii, 2020/11/01
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Juri Linkov, 2020/11/01
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F,
Juri Linkov <=
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Basil L. Contovounesios, 2020/11/03
- bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Juri Linkov, 2020/11/04
bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Juri Linkov, 2020/11/01
bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Neil Roberts, 2020/11/01
bug#44236: [PATCH] xdisp: Apply nobreak-char-display also to NARROW NO-BREAK SPACE U+202F, Juri Linkov, 2020/11/01