Преглед изворни кода

org: Add "mark domain as safe" convenience action

* lisp/org.el (org--confirm-resource-safe): Pick out domains from URLs,
and provide an option of marking that domain as safe.
TEC пре 2 година
родитељ
комит
1ae801e9c8
1 измењених фајлова са 23 додато и 9 уклоњено
  1. 23 9
      lisp/org.el

+ 23 - 9
lisp/org.el

@@ -4566,6 +4566,13 @@ returns non-nil if any of them match."
   "Ask the user if URI should be considered safe, returning non-nil if so."
   (unless noninteractive
     (let ((current-file (and buffer-file-name (file-truename buffer-file-name)))
+          (domain (and (string-match
+                        (rx (seq "http" (? "s") "://")
+                            (optional (+ (not (any "@/\n"))) "@")
+                            (optional "www.")
+                            (one-or-more (not (any ":/?\n"))))
+                        uri)
+                       (match-string 0 uri)))
           (buf (get-buffer-create "*Org Remote Resource*")))
       ;; Set up the contents of the *Org Remote Resource* buffer.
       (with-current-buffer buf
@@ -4576,6 +4583,11 @@ returns non-nil if any of them match."
                 "Do you want to download this?  You can type\n "
                 (propertize "!" 'face 'success)
                 " to download this resource, and permanantly mark it as safe.\n "
+                (if domain
+                    (concat
+                     (propertize "d" 'face 'success)
+                     " to download this resource, and mark this domain as safe.\n ")
+                  "")
                 (propertize "f" 'face 'success)
                 (if current-file
                     (concat
@@ -4593,8 +4605,8 @@ returns non-nil if any of them match."
       ;; Display the buffer and read a choice.
       (save-window-excursion
         (pop-to-buffer buf)
-        (let* ((exit-chars (append '(?y ?n ?! ?\s) (and current-file '(?f))))
-               (prompt (format "Please type y, n%s, or !%s: "
+        (let* ((exit-chars (append '(?y ?n ?! ?d ?\s) (and current-file '(?f))))
+               (prompt (format "Please type y, n%s, d, or !%s: "
                                (if current-file ", f" "")
                                (if (< (line-number-at-pos (point-max))
                                       (window-body-height))
@@ -4602,15 +4614,17 @@ returns non-nil if any of them match."
                                  ", or C-v/M-v to scroll")))
                char)
           (setq char (read-char-choice prompt exit-chars))
-          (when (memq char '(?! ?f))
+          (when (memq char '(?! ?f ?d))
             (customize-push-and-save
              'org-safe-remote-resources
-             (list (concat "\\`"
-                           (regexp-quote
-                            (if (and (= char ?f) current-file)
-                                (concat "file://" current-file) uri))
-                           "\\'"))))
-          (prog1 (memq char '(?! ?\s ?y ?f))
+             (list (if (eq char ?d)
+                       (concat "\\`" (regexp-quote domain) "\\(?:/\\|\\'\\)")
+                     (concat "\\`"
+                             (regexp-quote
+                              (if (and (= char ?f) current-file)
+                                  (concat "file://" current-file) uri))
+                             "\\'")))))
+          (prog1 (memq char '(?y ?n ?! ?d ?\s ?f))
             (quit-window t)))))))
 
 (defun org-extract-log-state-settings (x)