« ^ »

diredで選択したPDFのパスワードを除去する

所要時間: 約 1分

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

qpdf.el