]> code.delx.au - gnu-emacs/blobdiff - lisp/ibuf-ext.el
Fix the prefix action of shr-copy-url
[gnu-emacs] / lisp / ibuf-ext.el
index 1d6182596ed4f0916e4e284ab45f4aae3223dc36..0baab6b2f2588750eae90945b2b7627bdc5a751f 100644 (file)
@@ -347,10 +347,14 @@ the mode if ARG is omitted or nil."
    :modifier-p nil)
   (shell-command (concat command " "
                         (shell-quote-argument
-                         (if buffer-file-name
-                             buffer-file-name
-                           (make-temp-file
-                            (substring (buffer-name) 0 (min 10 (length (buffer-name))))))))))
+                         (or buffer-file-name
+                             (let ((file
+                                    (make-temp-file
+                                     (substring
+                                      (buffer-name) 0
+                                      (min 10 (length (buffer-name)))))))
+                               (write-region nil nil file nil 0)
+                               file))))))
 
 ;;;###autoload (autoload 'ibuffer-do-eval "ibuf-ext")
 (define-ibuffer-op eval (form)
@@ -1403,7 +1407,7 @@ You can then feed the file name(s) to other commands with \\[yank]."
   (if (zerop (ibuffer-count-marked-lines))
       (message "No buffers marked; use 'm' to mark a buffer")
     (let ((ibuffer-copy-filename-as-kill-result "")
-         (type (cond ((zerop arg)
+         (type (cond ((or (null arg) (zerop arg))
                       'full)
                      ((= arg 4)
                       'relative)
@@ -1412,20 +1416,23 @@ You can then feed the file name(s) to other commands with \\[yank]."
       (ibuffer-map-marked-lines
        #'(lambda (buf _mark)
           (setq ibuffer-copy-filename-as-kill-result
-                (concat ibuffer-copy-filename-as-kill-result
-                        (let ((name (buffer-file-name buf)))
-                          (if name
-                              (pcase type
-                                (`full
-                                 name)
-                                (`relative
-                                 (file-relative-name
-                                  name (or ibuffer-default-directory
-                                           default-directory)))
-                                (_
-                                 (file-name-nondirectory name)))
-                            ""))
-                        " "))))
+                 (concat ibuffer-copy-filename-as-kill-result
+                         (let ((name (buffer-file-name buf)))
+                           (cond (name
+                                  (concat
+                                   (pcase type
+                                     (`full
+                                      name)
+                                     (`relative
+                                      (file-relative-name
+                                       name (or ibuffer-default-directory
+                                                default-directory)))
+                                     (_
+                                      (file-name-nondirectory name))) " "))
+                                 (t "")))))))
+      (when (not (zerop (length ibuffer-copy-filename-as-kill-result)))
+        (setq ibuffer-copy-filename-as-kill-result
+              (substring ibuffer-copy-filename-as-kill-result 0 -1)))
       (kill-new ibuffer-copy-filename-as-kill-result))))
 
 (defun ibuffer-mark-on-buffer (func &optional ibuffer-mark-on-buffer-mark group)