diredからファイルを選択し、そのファイル名やパスを指定してコマンドを実行したい事がある。例えば dired-do-rename
は、 dired
のバッファ上で R
を入力すると呼び出され、ファイル名を変更する。ファイル名の変更だけじゃなくて、削除や権限の変更などのコマンドも用意されているが、自分の要望に合うコマンドを追加したくなる事もある。
今回はPDFファイルに設定されたパスワードを除去するEmacs Lispを実装した。 shell-command
などを使っているためイマイチな所もあるが、自分で使うだけなので良しとする。
;;; qpdf --- PDF Utility. -*- lexical-binding: t -*-
;; Copyright (C) 2023 TakesxiSximada
;; Author: TakesxiSximada
;; Maintainer: TakesxiSximada
;; Version: 1
;; Package-Version: 20231125.0000
;; Package-Requires: ((emacs "29.1"))
;; Date: 2023-11-25
;; This file is part of qpdf.
;; This software is free software: you can redistribute it and/or
;; modify it under the terms of the GNU Affero General Public License as
;; published by the Free Software Foundation, either version 3 of the
;; License, or (at your option) any later version.
;; This software is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Affero General Public License for more details.
;; You should have received a copy of the GNU Affero General Public
;; License along with this program. If not, see
;; <https://www.gnu.org/licenses/>.
;;;###autoload
(defun qpdf-dired-remove-password (&optional arg)
(interactive)
(let ((cmd-list
(let ((password (read-passwd "PDF Password: ")))
(mapcar (lambda (file)
(format "qpdf --password=%s --decrypt %s %s"
password
file
(replace-regexp-in-string "\\\.pdf$" ".plain.pdf" file)
))
(dired-get-marked-files nil arg)))))
(mapcar #'shell-command cmd-list)))
(provide 'qpdf)
;;; qpdf.el ends here