Następująca funkcja elisp pobierze łącze wokół bieżącego punktu rozpoznanego przez org-bracket-link-regexp
, więc albo [[Link][Description]]
albo [[Link]]
, i zastąpi go Description
w pierwszym przypadku lub Link
w drugim przypadku.
(defun afs/org-replace-link-by-link-description ()
"Replace an org link by its description or if empty its address"
(interactive)
(if (org-in-regexp org-bracket-link-regexp 1)
(let ((remove (list (match-beginning 0) (match-end 0)))
(description (if (match-end 3)
(org-match-string-no-properties 3)
(org-match-string-no-properties 1))))
(apply 'delete-region remove)
(insert description))))
[[LINK]]
również linki do formatu org. Dowiedziałem sięmatch-beginning
imatch-end
od twojej odpowiedzi.Próbowałem dodać to do odpowiedzi od @Andrew, ale było za długo na komentarz ...
Naprawdę podobało mi się jego rozwiązanie, tyle że przesunęło kursor. (Technicznie wydaje mi się, że przesunęło to punkt. W każdym razie ...) Na szczęście łatwo było dodać,
save-excursion
aby tego uniknąć:źródło
Wywołaj to polecenie, gdy punkt znajduje się w dowolnym miejscu po pierwszych
[[
nawiasach org-link (lub w dowolnym miejscu na / po hiperłączonym org-link).Powiązanie org zostanie usunięty, jeśli jest z formatem
[[LINK][DESCRIPTION]]
lub[[LINK]]
worg-mode
buforze; inaczej nic się nie wydarzy.Ze względów bezpieczeństwa odrzucone LINK z org-link jest zapisywane
kill-ring
w przypadku, gdy zajdzie potrzeba użycia tego linku w innym miejscu.źródło
Istnieje rozwiązanie, które pozwala uniknąć niestandardowego parsowania z wyrażeniami regularnymi i bezpośrednio korzysta z wbudowanego
org-element
interfejsu API:źródło
Najszybszym może być umieszczenie kursora przed linkiem, a następnie wpisz
C-M-space
(mark-sexp
), co spowoduje zaznaczenie całego linku. Następnie usuń go, wpisując backspace (jeśli używaszdelete-selection-mode
) lubC-w
.źródło
To bardzo szybkie i bardzo brudne makro byłoby jednym sposobem, a nie najlepszym:
źródło