[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mhc:00653] mhc-sync execute by elisp (was: High-speed and improved MHC)



From: TSUCHIYA Masatoshi <tsuchiya@xxxxxxxxxxxxxxxxxxxxxxx> さん曰く
Subject: [mhc:00650] Re: High-speed and improved MHC
Message-ID: <mpau2ff8mr9.fsf@xxxxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 31 May 2000 11:41:21 +0900

nom> まず、白井さんと、寺西さんに、抱えているコードを
nom> 幹に入れて欲しいです。

土> 遅くなりましたが、できれば TSU_SPEED 枝にも入れて貰えないでしょうか。
土> 不明な点などあれば、お手伝い致します。

らじゃ。しばらくお待ち下さいませ

抱えているコードといえば、mhc-sync を elisp から動かすのを作って
あるのですが、自分以外の環境で動くかどうか良くわからなかったりし
ているので、どなたか実験していただけないでしょうか?

~/.emacs でこんなふうに設定して使います。
(setq mhc-sync-id "notepc")
(setq mhc-sync-remote "shirai@xxxxxxxxxxxxxx")

mhc-sync-localdir は設定してもしなくてもどっちでもいいです。

# mhc-sync 自体は ID がなくても動作しますが、elisp からは事故防
# 止のため許していません。(めんどくさいからともいう)

-- 
白井秀行 (mailto:shirai@xxxxxxxxxxxxxxxxxxx)

こんなの↓

(defvar mhc-sync-id nil "*Identical id (-x option)")
(defvar mhc-sync-remote nil "*Remote server repository ([user@]remote.host[:dir])")
(defvar mhc-sync-localdir nil "*Local repository directory (-r option)")

;; ;; Ruby script enable to execute for Meadow.
;; (eval-after-load "mw32script"
;;   '(setq mw32script-argument-editing-alist
;; 	    (append '(("/ruby$" . "ruby.exe")
;; 		      ("/rubyw$" . "rubyw.exe"))
;; 		    mw32script-argument-editing-alist)))

(defconst mhc-sync-passwd-regex "password:\\|passphrase:\\|Enter passphrase for RSA")
(defvar mhc-sync-process nil)
(defvar mhc-sync-read-passwd nil)

(defun mhc-sync ()
  (interactive)
  (if (and (stringp mhc-sync-remote) (stringp mhc-sync-id))
      (if (processp mhc-sync-process)
	  (message "another mhc-sync running.")
	(let ((buf (get-buffer-create "*mhc-sync*"))
	      (ldir (expand-file-name
		     (if mhc-sync-localdir mhc-sync-localdir "~/Mail/schedule"))))
	  (pop-to-buffer buf)
	  (setq buffer-read-only nil)
	  (erase-buffer)
	  (setq buffer-read-only t)
	  (message "mhc-sync ...")
	  (setq mhc-sync-process
		(apply (function start-process)
		       "mhc-sync" buf "mhc-sync"
		       (list "-x" mhc-sync-id "-r" ldir mhc-sync-remote)))
	  (set-process-filter mhc-sync-process 'mhc-sync-filter)
	  (set-process-sentinel mhc-sync-process 'mhc-sync-sentinel)))
    (message "No remote server specified.")))

(defun mhc-sync-filter (process string)
  (if (bufferp (process-buffer process))
      (let ((obuf (buffer-name)))
	(unwind-protect
	    (progn
	      (set-buffer (process-buffer process))
	      (let ((buffer-read-only nil)
		    passwd)
		(goto-char (point-max))
		(insert string)
		(if (string-match mhc-sync-passwd-regex string)
		  (progn
		    (setq passwd (mhc-sync-read-passwd string))
		    (process-send-string process (concat passwd "\n"))))))
	  (if (get-buffer obuf)
	      (set-buffer obuf))))))

(defun mhc-sync-sentinel (process event)
  (if (bufferp (process-buffer process))
      (progn
	(pop-to-buffer (process-buffer process))
	(let ((buffer-read-only nil))
	  (goto-char (point-max))
	  (insert "<<<転送終了>>>"))))
  (setq mhc-sync-process nil)
  (message "mhc-sync ... done."))

;; ちょっとしつこいなぁ。
(defun mhc-sync-read-passwd (string)
  (if mhc-sync-read-passwd
      ()
    (cond
     ((fboundp 'mew-read-passwd)
      (setq mhc-sync-read-passwd 'mew-read-passwd))
     ((fboundp 'elmo-read-passwd)
      (setq mhc-sync-read-passwd 'elmo-read-passwd))
     ((fboundp 'nnmail-read-passwd)
      (setq mhc-sync-read-passwd 'nnmail-read-passwd))
     ((fboundp 'pop3-read-passwd)
      (setq mhc-sync-read-passwd 'pop3-read-passwd))
     ((fboundp 'read-passwd)
      (setq mhc-sync-read-passwd (lambda (string)
				   (condition-case nil
				       (read-passwd string)
				     (error "")))))))
  (funcall mhc-sync-read-passwd string))