Einrückung des Zitatblocks im Org-Modus (Hervorhebung)

8

Kann der Einzug des Org-Modus-Anführungsblocks konfiguriert werden? Ich möchte Anführungszeichenblöcke mit eingerückten Rändern hervorheben, wenn möglich links und rechts:

Geben Sie hier die Bildbeschreibung ein

Das obige Beispiel zeigt org-quote Gesichtseigenschaften (z. B. :height :foregroundusw.), die in meinem Thema geändert wurden. Der im Anführungsblock angezeigte linke und rechte Rand werden jedoch mit Leerzeichen gefälscht. Vielleicht wird der Einzug durch gesetzt wrap-prefix, was eine spezielle Texteigenschaft ist ? Wenn dies die richtige Richtung ist, wie kann ich einen benutzerdefinierten wrap-prefixWert nur für org-quote-Blöcke festlegen ?

Snelephant
quelle

Antworten:

1

Dies kann ganz einfach während der Schriftsperre erfolgen, indem eine benutzerdefinierte Funktion hinzugefügt wird org-font-lock-hook. Dies funktioniert gut, es sei denn, Sie verwenden org-indent-mode, das neu berechnet und überschreibt line-prefixund wrap-prefixnach Pufferänderungen.

(add-hook 'org-font-lock-hook #'aj/org-indent-quotes)

(defun aj/org-indent-quotes (limit)
  (let ((case-fold-search t))
    (while (search-forward-regexp "^[ \t]*#\\+begin_quote" limit t)
      (let ((beg (1+ (match-end 0))))
        ;; on purpose, we look further than LIMIT
        (when (search-forward-regexp "^[ \t]*#\\+end_quote" nil t)
          (let ((end (1- (match-beginning 0)))
                (indent (propertize "    " 'face 'org-hide)))
            (add-text-properties beg end (list 'line-prefix indent
                                               'wrap-prefix indent))))))))

Ich glaube nicht, dass es eine einfache Möglichkeit gibt, es am Ende der Zeile früher umbrechen zu lassen, dh am rechten Einzug (es gibt keine " wrap-suffix" -Eigenschaft).

Anders Johansson
quelle
0

Ich denke, die gewünschte Funktion existiert noch nicht. Außerdem finde ich die Antwort von Anders Johansson großartig.

Dies ist ein etwas anderer Ansatz und nur ein Anfang mit dem org-Element api:

(defun mw-org-left-margin-for-quote-blocks ()
"Insert a tab as left margin for every org quote block."
(interactive)
(let ((data (org-element-parse-buffer)))
    (org-element-map data 'quote-block
      (lambda (ele)
        (put-text-property
         (save-excursion
           (goto-char (org-element-property :begin ele))
           (beginning-of-line 2)
           (point))
         (save-excursion
           (goto-char (org-element-property :end ele))
           (end-of-line -1)
           (point))
         'line-prefix "\t")))))
Marco Wahl
quelle