emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Show presence of zero width spaces using overlay


From: Kaushal Modi
Subject: Re: [O] Show presence of zero width spaces using overlay
Date: Sat, 19 Sep 2015 02:15:14 -0400

I got really interested in org-entities (to deal with the case I mentioned in the first email in this thread like \ast{}shrug\ast{}) and came up with this:

=====

(defun modi/org-entity-get-name (char)
  "Return the entity name for CHAR. For example, return \"ast\" for *."
  (let ((ll (append org-entities-user
                    org-entities))
        e name utf8)
    (catch 'break
      (while ll
        (setq e (pop ll))
        (when (not (stringp e))
          (setq utf8 (nth 6 e))
          (when (string= char utf8)
            (setq name (car e))
            (throw 'break name)))))))

(defun modi/org-insert-org-entity-maybe (orig-fun &rest args)
  "When the universal prefix C-u is used before entering any character,
insert the character's `org-entity' name if available."
  (let ((pressed-key (this-command-keys))
        entity-name)
    (when (and (listp args) (eq 4 (car args)))
      (setq entity-name (modi/org-entity-get-name pressed-key))
      (when entity-name
        (setq entity-name (concat "\\" entity-name "{}"))
        (insert entity-name)
        (message (concat "Inserted `org-entity' "
                         (propertize entity-name
                                     'face 'font-lock-function-name-face)
                         " for the symbol "
                         (propertize pressed-key
                                     'face 'font-lock-function-name-face)
                         "."))))
    (when (null entity-name)
      (apply orig-fun args))))

(advice-add 'org-self-insert-command :around #'modi/org-insert-org-entity-maybe)

=====

After evaluating the above, whenever you do C-u *, C-u /, C-u =, etc, that symbol's org-entity will be inserted (if available in either org-entities-user or org-entities).
If an org-entity match is not found, that symbol will be inserted 4 times, as C-u would usually do.

The message tells the user if the org-entity got inserted so that there is not confusion.

The advised portion gets executed only if the below 2 conditions match:
- User used C-u prefix (not M-4 or C-u C-u or anything else)
- The entered character has a match in the org entities lists.

Question to the list is: Does this advise mask any useful functionality of org-self-insert-command?


--
Kaushal Modi

On Sat, Sep 19, 2015 at 12:11 AM, Kaushal Modi <address@hidden> wrote:
Here's the MWE once again with proper indication ([ZWS]) of where you need to insert the zero width space char.

=====

* Escaping =equal= sign in verbatim formatting.
=a\equal{}b+c=
** Here's the same but using zero width spaces instead of /org entities/.
=a=[ZWS]b+c=

* Here I am trying to have double quotes in verbatim formatting.
=\quot{}This is inbetween double quotes\quot{}=.
** Here's the same but using zero width spaces instead of /org entities/.
=[ZWS]"This is inbetween double quotes"[ZWS]=.

* And here's to escapes asterisks
This is *bold*. But this is \ast{}not bold\ast{}.
This works!

=====



On Sat, Sep 19, 2015 at 12:07 AM Kaushal Modi <address@hidden> wrote:
Thanks for letting me know about org-entities. That is awesome. I now know how to escape various characters in general, but unfortunately this does not work within verbatim formatting (which makes sense).

Here's a minimum working example:

=====

* Escaping =equal= sign in verbatim formatting.
=a\equal{}b+c=
** Here's the same but using zero width spaces instead of /org entities/.
=a=b+c=

* Here I am trying to have double quotes in verbatim formatting.
=\quot{}This is inbetween double quotes\quot{}=.
** Here's the same but using zero width spaces instead of /org entities/.
=​"This is inbetween double quotes"​=.

* And here's to escapes asterisks
This is *bold*. But this is \ast{}not bold\ast{}.
This works!

=====

Here's what it looks like when exported: https://dl.dropboxusercontent.com/u/10985/escape-chars.pdf

On Fri, Sep 18, 2015 at 9:48 PM Eric Abrahamsen <address@hidden> wrote:
Kaushal Modi <address@hidden> writes:

> My most common uses are escaping double quotes (") and equals (=)
> within org verbatim blocks (=VERBATIM=)
>
> Examples:
>
> 1. =var=[ZWS]val=
> 2. =[ZWS]"something"[ZWS]=
>
> Here [ZWS] is the 0x200b zero width space unicode char.
>
> I found [ZWS] useful as a generic escape char for org mode. There are
> few other cases where this has been useful, but I can't recall right
> now.
>
> In any case, what would be the recommended way to escape " and = in
> the above 2 examples?

Check out the variable `org-entities' for all the replaceable escape
codes. It's got quotes and equal!

E




reply via email to

[Prev in Thread] Current Thread [Next in Thread]