On 2022-07-13, at 12:49, Juan Manuel Macías <maciasch...@posteo.net> wrote:
> Sorry for the slight offtopic. Not off-topic at all, as far as I'm concerned! (Though sending this to help-gnu-emacs might be an even better idea.) I use `C-u C-x =' pretty often, so I fully understand why someone might want to code something like this. Very nice, thanks for sharing! You might want to extend it and create a minor mode which would display data about the current character in the echo area, Eldoc-style, or in a tooltip when you hover the mouse pointer over a character. Depending on what exactly you need, these ideas might be more or less useful, of course. Also, since the answer to quite a few org-related issues seems to be "just insert a zero-width space", making those stand out (like non-breaking spaces already are) could also be useful. FWIW, I have this function in my init.el: (defun insert-zero-width-space () "Insert Unicode character \"zero-width space\"." (interactive) (insert "")) (of course, the 0-width space is invisible between the quotes). Best, mbork > Since Unicode and character issues come up here from time to time, I'm > sharing this 'homemade' function that I wrote a long time ago for my > work, in case someone finds it useful. It Shows a brief descriptive list > of all characters in a word at point. Each character includes the > Unicode name, code, and canonical decomposition. Example: > > ἄρχοντα >> > > ἄ (#1f04) ... GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ... descomp: #1f00 > #301 > ρ (#3c1) ... GREEK SMALL LETTER RHO ... descomp: #3c1 > χ (#3c7) ... GREEK SMALL LETTER CHI ... descomp: #3c7 > ο (#3bf) ... GREEK SMALL LETTER OMICRON ... descomp: #3bf > ν (#3bd) ... GREEK SMALL LETTER NU ... descomp: #3bd > τ (#3c4) ... GREEK SMALL LETTER TAU ... descomp: #3c4 > α (#3b1) ... GREEK SMALL LETTER ALPHA ... descomp: #3b1 > > > #+begin_src emacs-lisp > (defun describe-chars-word-at-point () > (interactive) > (setq chars-in-word nil) > (if > (not (current-word t t)) > (error "Not in a word at point...") > (let > ((word (current-word t t))) > (save-excursion > (with-temp-buffer > (insert word) > (goto-char (point-min)) > (while (re-search-forward "\\(.\\)" nil t) > (let* ((char-name (save-excursion > (backward-char) > (get-char-code-property (char-after > (point)) 'name))) > (char-desc (save-excursion > (backward-char) > (get-char-code-property (char-after > (point)) 'decomposition))) > (char-format (concat (match-string 1) "\s" "(" > (format "#%x" (string-to-char > (match-string 1))) > ")\s...\s" char-name > "\s...\sdecomp:\s" > (mapconcat (lambda (cod) > (format "#%x" cod)) > char-desc " ")))) > (push char-format chars-in-word))) > (when (get-buffer "*chars in word*") > (kill-buffer "*chars in word*")) > (get-buffer-create "*chars in word*") > (set-buffer "*chars in word*") > (insert (mapconcat 'identity > (reverse chars-in-word) "\n")) > (view-mode) > (temp-buffer-window-show "*chars in word*" > '((display-buffer-below-selected > display-buffer-at-bottom) > (inhibit-same-window . t) > (window-height . > fit-window-to-buffer)))) > (pop-to-buffer "*chars in word*"))))) > #+end_src -- Marcin Borkowski http://mbork.pl