Browse Source

org-link-edit.el: Sync with upstream

Update to version 1.2.1 (b5493e2).
Kyle Meyer 5 years ago
parent
commit
f874b69560
1 changed files with 30 additions and 26 deletions
  1. 30 26
      contrib/lisp/org-link-edit.el

+ 30 - 26
contrib/lisp/org-link-edit.el

@@ -1,12 +1,12 @@
 ;;; org-link-edit.el --- Slurp and barf with Org links  -*- lexical-binding: t; -*-
 ;;; org-link-edit.el --- Slurp and barf with Org links  -*- lexical-binding: t; -*-
 
 
-;; Copyright (C) 2015-2017 Kyle Meyer <kyle@kyleam.com>
+;; Copyright (C) 2015-2020 Kyle Meyer <kyle@kyleam.com>
 
 
 ;; Author:  Kyle Meyer <kyle@kyleam.com>
 ;; Author:  Kyle Meyer <kyle@kyleam.com>
-;; URL: https://gitlab.com/kyleam/org-link-edit
+;; URL: https://git.kyleam.com/org-link-edit/about
 ;; Keywords: convenience
 ;; Keywords: convenience
-;; Version: 1.1.1
-;; Package-Requires: ((cl-lib "0.5") (org "8.2.10"))
+;; Version: 1.2.1
+;; Package-Requires: ((cl-lib "0.5") (org "9.3"))
 
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; it under the terms of the GNU General Public License as published by
@@ -19,7 +19,7 @@
 ;; GNU General Public License for more details.
 ;; GNU General Public License for more details.
 
 
 ;; You should have received a copy of the GNU General Public License
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 
 ;;; Commentary:
 ;;; Commentary:
 
 
@@ -67,12 +67,7 @@
 (require 'cl-lib)
 (require 'cl-lib)
 
 
 (defun org-link-edit--on-link-p (&optional element)
 (defun org-link-edit--on-link-p (&optional element)
-  (let ((el (or element (org-element-context))))
-    ;; Don't use `org-element-lineage' because it isn't available
-    ;; until Org version 8.3.
-    (while (and el (not (memq (car el) '(link))))
-      (setq el (org-element-property :parent el)))
-    (eq (car el) 'link)))
+  (org-element-lineage (or element (org-element-context)) '(link) t))
 
 
 (defun org-link-edit--link-data ()
 (defun org-link-edit--link-data ()
   "Return list with information about the link at point.
   "Return list with information about the link at point.
@@ -90,13 +85,13 @@ The list includes
        ;; Use match-{beginning,end} because match-end is consistently
        ;; Use match-{beginning,end} because match-end is consistently
        ;; positioned after ]], while the :end property is positioned
        ;; positioned after ]], while the :end property is positioned
        ;; at the next word on the line, if one is present.
        ;; at the next word on the line, if one is present.
-       ((looking-at org-bracket-link-regexp)
+       ((looking-at org-link-bracket-re)
         (list (match-beginning 0)
         (list (match-beginning 0)
               (match-end 0)
               (match-end 0)
               (save-match-data
               (save-match-data
                 (org-link-unescape (match-string-no-properties 1)))
                 (org-link-unescape (match-string-no-properties 1)))
               (or (match-string-no-properties 2) "")))
               (or (match-string-no-properties 2) "")))
-       ((looking-at org-plain-link-re)
+       ((looking-at org-link-plain-re)
         (list (match-beginning 0)
         (list (match-beginning 0)
               (match-end 0)
               (match-end 0)
               (match-string-no-properties 0)
               (match-string-no-properties 0)
@@ -170,7 +165,7 @@ If N is negative, slurp leading blobs instead of trailing blobs."
         (setq desc (concat desc slurped)
         (setq desc (concat desc slurped)
               end (+ end (length slurped)))
               end (+ end (length slurped)))
         (delete-region beg (point))
         (delete-region beg (point))
-        (insert (org-make-link-string link desc))
+        (insert (org-link-make-string link desc))
         (goto-char beg)
         (goto-char beg)
         slurped)))))
         slurped)))))
 
 
@@ -212,7 +207,7 @@ If N is negative, slurp trailing blobs instead of leading blobs."
         (setq desc (concat slurped desc)
         (setq desc (concat slurped desc)
               beg (- beg (length slurped)))
               beg (- beg (length slurped)))
         (delete-region (point) end)
         (delete-region (point) end)
-        (insert (org-make-link-string link desc))
+        (insert (org-link-make-string link desc))
         (goto-char beg)
         (goto-char beg)
         slurped)))))
         slurped)))))
 
 
@@ -282,7 +277,7 @@ If N is negative, barf leading blobs instead of trailing blobs."
         (unless new-desc (user-error "Not enough blobs in description"))
         (unless new-desc (user-error "Not enough blobs in description"))
         (goto-char beg)
         (goto-char beg)
         (delete-region beg end)
         (delete-region beg end)
-        (insert (org-make-link-string link new-desc))
+        (insert (org-link-make-string link new-desc))
         (when (string= new-desc "")
         (when (string= new-desc "")
           (setq barfed (concat " " barfed)))
           (setq barfed (concat " " barfed)))
         (insert barfed)
         (insert barfed)
@@ -321,7 +316,7 @@ If N is negative, barf trailing blobs instead of leading blobs."
         (unless new-desc (user-error "Not enough blobs in description"))
         (unless new-desc (user-error "Not enough blobs in description"))
         (goto-char beg)
         (goto-char beg)
         (delete-region beg end)
         (delete-region beg end)
-        (insert (org-make-link-string link new-desc))
+        (insert (org-link-make-string link new-desc))
         (when (string= new-desc "")
         (when (string= new-desc "")
           (setq barfed (concat barfed " ")))
           (setq barfed (concat barfed " ")))
         (goto-char beg)
         (goto-char beg)
@@ -331,12 +326,12 @@ If N is negative, barf trailing blobs instead of leading blobs."
 (defun org-link-edit--next-link-data (&optional previous)
 (defun org-link-edit--next-link-data (&optional previous)
   (save-excursion
   (save-excursion
     (if (funcall (if previous #'re-search-backward #'re-search-forward)
     (if (funcall (if previous #'re-search-backward #'re-search-forward)
-                 org-any-link-re nil t)
+                 org-link-any-re nil t)
         (org-link-edit--link-data)
         (org-link-edit--link-data)
       (user-error "No %s link found" (if previous "previous" "next")))))
       (user-error "No %s link found" (if previous "previous" "next")))))
 
 
 ;;;###autoload
 ;;;###autoload
-(defun org-link-edit-transport-next-link (&optional previous beg end)
+(defun org-link-edit-transport-next-link (&optional previous beg end overwrite)
   "Move the next link to point.
   "Move the next link to point.
 
 
 If the region is active, use the selected text as the link's
 If the region is active, use the selected text as the link's
@@ -346,11 +341,16 @@ With prefix argument PREVIOUS, move the previous link instead of
 the next link.
 the next link.
 
 
 Non-interactively, use the text between BEG and END as the
 Non-interactively, use the text between BEG and END as the
-description, moving the next (or previous) link relative BEG and
-END."
-  (interactive (cons current-prefix-arg
-                     (and (use-region-p)
-                          (list (region-beginning) (region-end)))))
+description, moving the next (or previous) link relative to BEG
+and END.  By default, refuse to overwrite an existing
+description.  If OVERWRITE is `ask', prompt for confirmation
+before overwriting; for any other non-nil value, overwrite
+without asking."
+  (interactive `(,current-prefix-arg
+                 ,@(if (use-region-p)
+                       (list (region-beginning) (region-end))
+                     (list nil nil))
+                 ask))
   (let ((pt (point))
   (let ((pt (point))
         (desc-bounds (cond
         (desc-bounds (cond
                       ((and beg end)
                       ((and beg end)
@@ -374,10 +374,14 @@ END."
     (goto-char (or (car desc-bounds) pt))
     (goto-char (or (car desc-bounds) pt))
     (cl-multiple-value-bind (link-beg link-end link orig-desc)
     (cl-multiple-value-bind (link-beg link-end link orig-desc)
         (org-link-edit--next-link-data previous)
         (org-link-edit--next-link-data previous)
-      (unless (or (not desc-bounds) (= (length orig-desc) 0))
+      (unless (or (not desc-bounds)
+                  (= (length orig-desc) 0)
+                  (if (eq overwrite 'ask)
+                      (y-or-n-p "Overwrite existing description?")
+                    overwrite))
         (user-error "Link already has a description"))
         (user-error "Link already has a description"))
       (delete-region link-beg link-end)
       (delete-region link-beg link-end)
-      (insert (org-make-link-string
+      (insert (org-link-make-string
                link
                link
                (if desc-bounds
                (if desc-bounds
                    (delete-and-extract-region (car desc-bounds)
                    (delete-and-extract-region (car desc-bounds)