スキップしてメイン コンテンツに移動

xyzzy のファイラ上でデコードやハッシュ値を

 BASE64 ,uuencode のエンコードやデコードをしたり、 MD5 などのハッシュ値を得たい場合はどうすれば?

……微妙にマイナーな気もしますが、好きなエディタ?ですので。
カスタマイズが LISP を切り貼りしなきゃいけないのが、ちょっと難易度高いんでしょうか。設定自体はテキストなので、バックアップなどはむしろ、やり易いと思うのですが……。

ファイラ上で Ctrl+8 を押すとメニューが出て、下記の事が出来るようになります。

エンコード、デコード
  • BASE64
  • uu encode
ハッシュ値生成
  • MD5
  • SHA-1
以下コード。
uubase64.l とでも名前を付けて site-lisp に保存し、siteinit.l に、(require "uubase64") とでも書いて再ダンプすれば動くでしょう、たぶん。
(provide "uubase64")

;;; BASE64 and UU エンコード、デコードメニュー
;; ファイラーに表示する一覧 Ctrl+8
(defvar *get-filer-file-endecode* nil)
(define-key filer-keymap #\C-8
     #'(lambda () (interactive)
  (unless *get-filer-file-endecode*
    (setq *get-filer-file-endecode*
   (define-popup-menu
     (:item nil "BASE64 エンコード (&E)"
      #'(lambda () (interactive) (filer-set-file-endecode 11)))
     (:item nil "BASE64 デコード (&D)"
      #'(lambda () (interactive) (filer-set-file-endecode 12)))
     (:item nil "UU エンコード (&E)"
      #'(lambda () (interactive) (filer-set-file-endecode 21)))
     (:item nil "UU デコード (&D)"
      #'(lambda () (interactive) (filer-set-file-endecode 22)))
     (:item nil "MD5 作成 (&M)"
      #'(lambda () (interactive) (filer-set-file-endecode 30)))
     (:item nil "SHA-1 作成 (&S)"
      #'(lambda () (interactive) (filer-set-file-endecode 40)))
     )))
  (track-popup-menu *get-filer-file-endecode*)))

;;filerでMD5ファイル作成
(defun filer-make-md5-string (name)
  (long-operation
    (with-open-stream (stream (open name :direction :input :encoding :binary))
      (si:md5 stream))))
(defun filer-make-md5-file ()
  (let* ((name (ed::filer-get-current-file))
         (name5 (concat name ".md5")))
    (if (ed::file-directory-p name)
        (message "フォルダはできません.")
        (when (or (null ed::*filer-query-before-process*)
                  (if (ed::file-exist-p name5)
                      (no-or-yes-p "~A~%のMD5は既にあります.~%MD5の生成を続けますか?" name)
                      (yes-or-no-p "~A~%のMD5を生成しますか?" name)))
              (message "MD5 creating...")
              (with-open-stream (stream (open name5 :direction :output :encoding :binary))
                (princ (filer-make-md5-string name) stream))
              (ed::filer-reload)      ; 再表示
              (message "MD5 done.")))))
;;filerでSHA-1ファイル作成
(defun filer-make-sha1-string (name)
  (long-operation
    (with-open-stream (stream (open name :direction :input :encoding :binary))
      (si:sha-1 stream))))
(defun filer-make-sha1-file ()
  (let* ((name (ed::filer-get-current-file))
         (namesha1 (concat name ".sha1")))
    (if (ed::file-directory-p name)
        (message "フォルダはできません.")
        (when (or (null ed::*filer-query-before-process*)
                  (if (ed::file-exist-p namesha1)
                      (no-or-yes-p "~A~%のSHA-1は既にあります.~%SHA-1の生成を続けますか?" name)
                      (yes-or-no-p "~A~%のSHA-1を生成しますか?" name)))
              (message "SHA-1 creating...")
              (with-open-stream (stream (open namesha1 :direction :output :encoding :binary))
                (princ (filer-make-sha1-string name) stream))
              (ed::filer-reload)      ; 再表示
              (message "SHA-1 done.")))))

;; BASE64 decode
(defun filer-decode-BASE64-string (name)
  (long-operation
    (with-open-stream (stream (open name :direction :input :encoding :binary))
      (si:base64-decode stream))))
(defun filer-decode-BASE64-file ()
  (let* ((name (ed::filer-get-current-file))
  (nameDEC (concat name ".dec")))
    (if (ed::file-directory-p name)
 (message "フォルダはできません.")
      (when (or (null ed::*filer-query-before-process*)
  (if (ed::file-exist-p nameDEC)
      (no-or-yes-p "~A~%と同じファイルがあります。~% BASE64 デコードを続けますか?" name)
    (yes-or-no-p "~A~%の BASE64 デコードを行いますか?" name)))
 (message "BASE64 decoding...")
 (with-open-stream (stream (open nameDEC :direction :output :encoding :binary))
   (princ (filer-decode-BASE64-string name) stream))
 (ed::filer-reload)
 (message "BASE64 decode done.")))))
;; BASE64 encode
(defun filer-encode-BASE64-string (name)
  (long-operation
    (with-open-stream (stream (open name :direction :input :encoding :binary))
      (si:base64-encode stream))))
(defun filer-encode-BASE64-file ()
  (let* ((name (ed::filer-get-current-file))
  (nameBASE64 (concat name ".base64")))
    (if (ed::file-directory-p name)
 (message "フォルダはできません.")
      (when (or (null ed::*filer-query-before-process*)
  (if (ed::file-exist-p nameBASE64)
      (no-or-yes-p "~A~% と同じファイルがあります。~%BASE64 エンコードを続けますか?" name)
    (yes-or-no-p "~A~%の BASE64 エンコードファイルを作成しますか?" name)))
 (message "BASE64 encoding...")
 (with-open-stream (stream (open nameBASE64 :direction :output :encoding :binary))
   (princ (filer-encode-BASE64-string name) stream))
 (ed::filer-reload)
 (message "BASE64 encode done.")))))
;; UU decode
(defun filer-decode-UU-string (name)
  (long-operation
    (with-open-stream (stream (open name :direction :input :encoding :binary))
      (si:uudecode stream))))
(defun filer-decode-UU-file ()
  (let* ((name (ed::filer-get-current-file))
  (nameDEC (concat name ".dec")))
    (if (ed::file-directory-p name)
 (message "フォルダはできません.")
      (when (or (null ed::*filer-query-before-process*)
  (if (ed::file-exist-p nameDEC)
      (no-or-yes-p "~A~%と同じファイルがあります。~% UU デコードを続けますか?" name)
    (yes-or-no-p "~A~%の UU デコードを行いますか?" name)))
 (message "UU decoding...")
 (with-open-stream (stream (open nameDEC :direction :output :encoding :binary))
   (princ (filer-decode-UU-string name) stream))
 (ed::filer-reload)
 (message "UU decode done.")))))
;; UU encode
(defun filer-encode-UU-string (name)
  (long-operation
    (with-open-stream (stream (open name :direction :input :encoding :binary))
      (si:uuencode stream))))
(defun filer-encode-UU-file ()
  (let* ((name (ed::filer-get-current-file))
  (nameUU (concat name ".uue")))
    (if (ed::file-directory-p name)
 (message "フォルダはできません.")
      (when (or (null ed::*filer-query-before-process*)
  (if (ed::file-exist-p nameUU)
      (no-or-yes-p "~A~%と同じファイル名があります。~%UU エンコードを続けますか?" name)
    (yes-or-no-p "~A~%の UU エンコードファイルを作成しますか?" name)))
 (message "UU encoding...")
 (with-open-stream (stream (open nameUU :direction :output :encoding :binary))
   (princ (filer-encode-UU-string name) stream))
 (ed::filer-reload)
 (message "UU encode done.")))))
;;;
;; 分岐
(defun filer-set-file-endecode (type)
  (interactive)
  (let ((n (filer-get-current-file)) str)
    (cond
     ((= type 11)(filer-encode-BASE64-file))
     ((= type 12)(filer-decode-BASE64-file))
     ((= type 21)(filer-encode-UU-file))
     ((= type 22)(filer-decode-UU-file))
     ((= type 30)(filer-make-md5-file))
     ((= type 40)(filer-make-sha1-file))
     )))

コメント

このブログの人気の投稿

Arch Linux - linux-firmware を分割したから

 NVIDIA firmware が入っていると、更新できないから気をつけろよ? エラー: 処理を完了できませんでした (衝突しているファイル) linux-firmware-nvidia: /usr/lib/firmware/nvidia/ad103 がファイルシステムに存在しています linux-firmware-nvidia: /usr/lib/firmware/nvidia/ad104 がファイルシステムに存在しています linux-firmware-nvidia: /usr/lib/firmware/nvidia/ad106 がファイルシステムに存在しています linux-firmware-nvidia: /usr/lib/firmware/nvidia/ad107 がファイルシステムに存在しています エラーが発生したため、パッケージは更新されませんでした。 公式アナウンス https://archlinux.org/news/linux-firmware-2025061312fe085f-5-upgrade-requires-manual-intervention/ 先に言って(ry ……まぁ、対処法も含めて書いてくれているから、親切かもしれんが……パッケージとしてどうにかならんかったのか。 pacman -Rdd linux-firmware pacman -Syu linux-firmware

無効にしたアプリ等

ドコモさん,消せない電話帳アプリとか入れないで下さい。要らないものは消せるようにして下さい。要らないから。常駐もしないで下さい,邪魔だから。 2014/02/15:追記 DcmWapPushHelper は,spモードメール等のドコモ謹製アプリでdocomo.ne.jpメールを使っている場合は,メール受信通知が遅い場合があるかもしれないので,使っている人は無効にしない方がいいかもしれません。 IMAP 経由で使ってりゃ関係なし。 無効にしたけど,本当は抹殺したい茸アプリ オートGPS しゃべって検索 スケジュール&メモ デコメ絵文字マネージャー ドコモバックアップ ドコモ位置情報 ドコモ位置情報SUB ドコモ音声入力 ドコモ文字編集 メディアプレイヤー 取扱説明書 電話帳サービス DcmWapPushHelper(spモードメール使ってるなら無効を非推奨 DOCOMO Initialization iコンシェル iコンシェルコンテンツ NOTTV SDカードバックアップ エリア連動Wi-Fi 使わないから無効にしているアプリ 赤外線 Gガイド番組表DL 電子書籍 Reader by Sony Eメール Facebook mora Music Extension Music Unlimited Socialife Xperia AppShare (Facebook) Xperia Calendar Sync (Facebook) Xperia FB Setup Xperia Friends' Music Xperia Music Likes Xperia Proxy (Facebook) Xperia Proxy (Twitter) Xperia Social Engine Photos (Facebook) Xperia Social Engine Photos (Music Unlimited) Xperia Social Engine Sharing (Facebook) Xperia Social Engine Sharing (Twitter) Xperia Twitter Setup TV番組プレーヤー Sony Select 無効...

ナンバープレートのボルト交換

これまで錆びたことなど無かったんだけど,今度の車は海とか釣りとか行ってたからなのかな。 ボルトの頭部分がサビだらけになってしまった。 さびさび コレはいかん,いかんですよ。 いくら丁寧に乗っていても,ナンバープレートのサビで台無しですよ。 ディーラーに,ボルト無い?って聞いたら,「うちだと工賃掛かるから,ホームセンターで買って自分で換えた方が良いよ。」 実際どれくらいなのか,コ○ナンで見てみる。 通常のナンバープレートの場合は次の寸のネジを買えば良いらしい。 6mm径で,長さは15mm,ピッチが1mm。 M6x15って奴ですね。 バラで買えるのが素晴らしい。1個15円。ワッシャーも買っとこ。一個4円。 これなら何度交換しても惜しくないね! さて,スパナでこいつらを外す。まー見事に真っ茶色だな。 ねじ穴があるんだから,ドライバーでやりたくなるだろうけれど,錆びたネジにドライバーはお勧めしません。面倒でもスパナかレンチで回しましょう。できればモンキレンチも避けて。 無事取れました。片方はねじ穴が塞がりかけてるくらい錆びてますな……。 ナンバープレートを外した後の車体ですが……サビが裏側に付いているのは別に驚くことでは無いのですが,隠された部分が発泡スチロールだったことにちょっとビックリ。 さぁ!新しいネジとワッシャーよ!(計38円) レジに並んだとき,正直辛かった。 さて取り付けるまえに,試しにナンバープレートのネジ穴に通してみよう……あれ? ……ワッシャーのサイズが小さすぎですがな…… 大きいワッシャーを買いに走る。1個20円でした。 取り付ける前に,錆落とし。取りづらかったが何とか除去。 うむ。見栄えが復活。