[Mew-Win32 00202] Re: text/x-rot13-47-48

Hideyuki SHIRAI Shirai at example.com
1998年 2月 9日 (月) 09:36:00 JST


白井です。

From: "YAMAGUCHI, Shuhei" <yamagus at example.com> さん曰く
Subject: [Mew-Win32 00198] Re: text/x-rot13-47-48
Message-ID: <19980206020312L.yamagus at example.com>
Date: Fri, 6 Feb 1998 02:03:15 +0900

引用順序を変えてます。

山口>   Shirai> というわけで、少しだけ『ワクワク』するようにしました。
山口> 
山口> とってもワクワクです。 :-)
山口> 白井さん、小関さん、ありがとうございます。

喜んでいただけて、幸いです。f(^^)

山口>   Shirai> tmとSEMI両方で対応したつもりなんですが、どなたかSEMIで使ってみて
山口>   Shirai> いただけませんか?
山口> 
山口> 今現在FreeBSD上ですが、Emacs-20.2で使えてます。
山口> tmは入れていないけどSEMIは入れた覚えがあるので、SEMIだと思います。 ^^;
山口> #この辺りが、私がGnusに惚れ込めない理由だったりします。
山口> #Gnusだけでも色々ややこしそうなのに、tm/SEMIとの関連を考えると…。

確認ありがとうございます。> 山口さん、かわのさん。

山口>   Shirai> # mew-distじゃ蹴られるのが目に見えているので、mew-win32限定です。
山口>   Shirai> ## またまた、パクリばかりです。m(__)m
山口> 
山口> 多分、かずさんの方針だと、tmやSEMIに頼っている間は本体に組込まれないで
山口> しょうね。 ^^;
山口> でも、私個人としては、ぜひ欲しいです。
山口> バッファ移って、M-x toggle-read-onlyして、M-x mule-caesar-regionするっ
山口> てのは、あまりにも面倒すぎますから。 ^^;
山口> (provide 'mew-なんたら)入れるとかして、contrib入りを目指してみませんか?

調子にのって(そそのかされて?)作ってみました。
# まとわりつく子供たちを足げにしながら、土曜日に書いた……

調子が良かったら、mew-distに投げようと思います。

1. 変数名とか変えました。
 (関数名が汚いから、揃えないとだめかなぁ)

2. attach-modeのとき、
2.1. "c"、"l"で foo.rotの様に 拡張子が".rot"のファイルを指定した
ら、"context-type: Text/X-Rot13-47-48"を指定するようにしました。
(以前は".xrot"でしたが、mew-os2に揃えました。しかもバグがあったし)
元のファイルはcaesar符号化していなければダメです。
 
2.2. "R"で、"F"モードの様な感じで"xxx.rot"というファイルをオープ
ンするようにしました。"\C-cr"でそのバッファをcaesar符号化します。

# もともと、"F"でマルチパートなメールを作るのがめんどくさいので、
# "R"もめんどくさいインタフェースですけれど。
# 少しは楽かな、ということで。


-------------- next part --------------
;; -*- emacs-lisp -*-
;; mew-caesar.el --- Caesarean rotation package for Mew.
;;
;;                         "Hideyuki SHIRAI" <Shirai at example.com>
;;                                            Created: "02/07/1998"
;;                                            Revised:
;; Don't byte-compile this file.
;; 
;; To use mew-caesar.el, install (tm|SEMI) package
;; , and, put the following codes in your .emacs.
;;
;; (add-hook 'mew-init-hook
;;  	  (lambda ()
;;  	    (require 'mew-caesar)))
;; 
;; (add-hook 'mew-summary-mode-hook
;; 	  (lambda ()
;; 	    (define-key mew-summary-mode-map "\C-cr" 'mew-summary-insert-xrot)))
;; 
;; (add-hook 'mew-draft-mode-hook
;; 	  (lambda ()
;; 	    (define-key mew-draft-attach-map "R" 'mew-attach-find-new-rotfile)))
;;
;; (setq mew-caesar-use-tm t|nil)
;; ;;   caesar package select   t => tm:caesar-region
;; ;;                         nil => mule-caesar-region

(defconst mew-caesar-version "mew-caesar.el 0.01")

;; tm:caesar-region is t、mule-caesar-region is nil.
(defvar mew-caesar-use-tm nil
  "nil require \"SEMI\", t require \"tm\".")

(setq mew-mime-content-type-text-list
      (append
       '("Text/X-Rot13-47-48")
       mew-mime-content-type-text-list))

(setq mew-mime-content-type-list
      (append
       '("Text/X-Rot13-47-48")
       mew-mime-content-type-list))

(setq mew-mime-content-type
      (append
       '(("text/x-rot13-47-48" "\\.rot$" nil mew-prog-xrot mew-icon-text)
	 ("text/x-rot13.*" "\\.rot$" nil mew-prog-xrot mew-icon-text))
       mew-mime-content-type))

(defvar mew-prog-xrot '(mew-mime-text/x-rot () nil))
(defconst mew-ct-rot13 "Text/X-Rot13-47-48")
(defconst mew-rot13-suffix ".rot")

(defun mew-mime-text/x-rot (begin end &optional params)
  (if (> end begin)
      (save-excursion
	(set-buffer (mew-buffer-message))
	(let ((buffer-read-only nil))
	  (insert " #     #         ######  ####### #######    #     #####\n"
		  "  #   #          #     # #     #    #      ##    #     #\n"
		  "   # #           #     # #     #    #     # #          #\n"
		  "    #     #####  ######  #     #    #       #     #####\n"
		  "   # #           #   #   #     #    #       #          #\n"
		  "  #   #          #    #  #     #    #       #    #     #\n"
		  " #     #         #     # #######    #     #####   #####\n"
		  "\n")
	  (insert "To save this part, type "
		  (substitute-command-keys
		   "\\<mew-summary-mode-map>\\[mew-summary-save].")
		  "\nTo display this part in Message mode, type "
		  (substitute-command-keys
		   "\\<mew-summary-mode-map>\\[mew-summary-insert-xrot]."))
	  (insert "\n\n-------------------- Original \"X-ROT13\" follows --------------------\n")
	  (insert-buffer-substring (mew-current-get 'cache) begin end)
	  ))))

(defun mew-summary-insert-xrot ()
  (interactive)
  (let* ((ofld-msg (mew-current-get 'message))
	 (msg (mew-summary-message-number))
	 (part (mew-summary-part-number))
	 (buf (buffer-name)))
    (if (or msg (not part))
	(let ((mew-analysis nil))
	  (mew-summary-display))
      (unwind-protect
	  (progn
	    (mew-summary-toggle-disp-msg 'on)
	    (mew-window-configure buf 'message)
	    (set-buffer (mew-buffer-message))
	    (let* ((buffer-read-only nil)
		   (syntax (mew-cache-decode-syntax (mew-cache-hit ofld-msg)))
		   (stx (mew-syntax-get-entry-strnum syntax part))
		   (begin (mew-syntax-get-begin stx))
		   (end (mew-syntax-get-end stx)))
	      (erase-buffer)
	      (insert-buffer-substring (mew-current-get 'cache) begin end)
	      (goto-char (point-min))
	      (mew-whole-buffer-caesar)))
	(pop-to-buffer buf)))
    ))

(defun mew-attach-find-new-rotfile ()
  "Open a new Caesar rotation file into a buffer on \".\" in attachments."
  (interactive)
  (if (not (mew-attach-not-line012-1))
      (message "Can't find a new file here.")
    (let* ((nums (mew-attach-nums))
	   (subdir (mew-attach-expand-path mew-encode-syntax nums))
	   (mimedir (mew-expand-folder (mew-draft-to-mime (buffer-name))))
	   file filepath)
      ;; mimedir / {subdir/} dir
      (if (not (equal subdir "")) 
	  (setq mimedir (expand-file-name subdir mimedir)))
      ;; mimedir / file
      (setq filepath (mew-random-filename mimedir mew-rot13-suffix))
      (if (null filepath)
	  (message "Could not make a text file, sorry.")
	(setq file (file-name-nondirectory filepath))
	(setq mew-encode-syntax
	      (mew-syntax-insert-entry
	       mew-encode-syntax 
	       nums
	       (mew-encode-syntax-single file (list mew-ct-rot13))))
	(mew-encode-syntax-print mew-encode-syntax)
	;;
	(find-file filepath)
	(message " Don't forget \"mew-whole-buffer-caesar(\C-cr)\".")
	;; buffer switched
	(local-set-key "\C-c\C-q" 'mew-kill-buffer)
	(local-set-key "\C-cr" 'mew-whole-buffer-caesar)
	))
    ))

(defun mew-whole-buffer-caesar ()
  "Caesar rotation in whole buffer."
  (interactive)
  (let ()
      (save-excursion
	(if mew-caesar-use-tm
	    (progn
	      (require 'tm-def)
	      (mark-whole-buffer)
	      (tm:caesar-region))
	  (progn
	    (require 'mule-caesar)
	    (mule-caesar-region (point-min) (point-max)))))))
    
(provide 'mew-caesar)
;;
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: 無し
型:         text/x-rot13-47-48
サイズ:     134 バイト
説明:       訂正
URL:        <http://www.mew.org/pipermail/mew-win32/attachments/19980209/d2c37865/attachment.bin>
-------------- next part --------------

--
白井秀行 (Hideyuki SHIRAI)


Mew-win32 メーリングリストの案内