[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))