[mew-dist 26404] Re: namazu

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
2005年 6月 2日 (木) 19:41:43 JST


From: Kazu Yamamoto (山本和彦) <kazu at example.com> さん曰く
Subject: [mew-dist 26397] namazu
Message-ID: <20050602.163804.225794400.kazu at example.com>
Date: Thu, 02 Jun 2005 16:38:04 +0900 (JST)

> namazu ですが、インデックスをバックグラウンドで作ることはできないでしょ
> うか?

Emacs の中で、ということですよね?

# そういえば、cron でたたく shell script 書かないといけないのだ
# よな。

> "kM" と違うのは、
> 
> * タイマーを使いバックグランドで作る (ユーザはコマンドを入力しない)
> * すべてのフォルダが対象

こんな感じ↓で良いならあとでマージしてみます。

(1) "kA" で mew-nmz-mknmz-interval-time で指定した時間(分)間隔で、
    すべての folder のインデックス作成を繰り返します。
    
(2) "kS" で止まります。

(3)  mew-nmz-mknmz-automatically に時間(分)を書くと、Mew を立ち
    上げて、n分後に自動的に開始します。

(4) folder 構成が変わったら、適当なときに "ks" しておくと、次に
    mknmz がはじまったときに反映されます。または、"C-ukA" で動か
    すと OK。

(5) どこかで mknmz/gcnmz が動いているときは、mode-line に "NMZ"
    と表示します。(mew-nmz.xpm 募集中)
    
## indicator つくったから、mew-nmz 中の (ding) やめよう。。。

> # めざせ spotlight です。

# めざせ google desktop とか

-- 
白井秀行 (mailto:shirai at example.com)

(defcustom mew-nmz-mknmz-automatically nil
  "*Automatic mknmz start delay. If `nil' don't execute automatically."
  :group 'mew-nmz
  :type '(choice (const :tag "Not use"nil)
		 (integer :tag "Delay time (minutes)")))

(defcustom mew-nmz-mknmz-interval-time 120
  "*Minute of interval time to execute automatic mknmz."
  :group 'mew-nmz
  :type '(integer :tag "interval time (minutes)"))

(define-key mew-summary-mode-map "kA" 'mew-nmz-auto-mknmz-start)
(define-key mew-summary-mode-map "kS" 'mew-nmz-auto-mknmz-stop)

(defvar mew-nmz-check-timer nil)
(defvar mew-nmz-auto-timer nil)
(defvar mew-nmz-format nil)
(defvar mew-nmz-format2 nil)

(defvar mew-nmz-process nil)
(defvar mew-nmz-process-regex (concat "^" (regexp-opt `(,mew-nmz-prog-mknmz
							,mew-nmz-prog-gcnmz))
				      "-"))

(cond
 (mew-gemacs-p
  (setq mew-nmz-format nil)
  (setq mew-nmz-format2
	(if (display-graphic-p)
	    (let ((data-directory mew-icon-directory))
	      (concat " "
		      (propertize "NMZ" 'display
				  (find-image '((:type xpm :file "mew-nmz.xpm" :ascent center))))))
	  " [NMZ]")))
 (mew-xemacs-p
  (setq mew-nmz-format
	(if window-system
	    (let ((data-directory mew-icon-directory))
	      (make-glyph [xpm :file "mew-nzm.xpm"]))
	  " [NMZ]"))
  (setq mew-nmz-format2 nil))
 (t
  (setq mew-nmz-format " [NMZ]")
  (setq mew-nmz-format2 nil)))

;; これ↓ Emacs22 だと "l%l" を最後にした方が見やすくない?
(setq mew-mode-line-format
      `(""
	(mew-summary-buffer-raw "*")
	(mew-summary-buffer-secure-process ,mew-secure-format2)
	(mew-nmz-process ,mew-nmz-format2)
	(mew-summary-buffer-left-msgs mew-summary-buffer-left-msgs "L%l")))

(setq mew-mode-line-process
      '((mew-summary-buffer-secure-process mew-secure-format)
	(mew-summary-buffer-process mew-summary-buffer-process-status)
	(mew-nmz-process mew-nmz-format)))

(defun mew-nmz-get-process ()
  (setq mew-nmz-process
	(or mew-nmz-mknmz-all-folders
	    (let ((procs (process-list))
		  procname)
	      (catch 'detect
		(while (and procs (setq procname (process-name (car procs))))
		  (setq procs (cdr procs))
		  (and (string-match mew-nmz-process-regex procname)
		       (throw 'detect t))))))))

(unless mew-nmz-check-timer
  (setq mew-nmz-check-timer (mew-timer 1 'mew-nmz-get-process)))

(defun mew-nmz-auto-mknmz-start (&optional args)
  "Start automatic mknmz for full folders."
  (interactive "P")
  (if args (mew-nmz-auto-mknmz-stop))
  (if mew-nmz-auto-timer
      (if (interactive-p)
	  (message "Another automatic mknmz running"))
    (let ((min (* mew-nmz-mknmz-interval-time 60)))
      (setq mew-nmz-auto-timer (mew-timer min 'mew-nmz-auto-mknmz)))
    (mew-nmz-auto-mknmz args)
    (message "Automatic mknmz start")))

(defun mew-nmz-auto-mknmz-stop ()
  "Stop automatic mknmz for full folders."
  (interactive)
  (when mew-nmz-auto-timer
    (cancel-timer mew-nmz-auto-timer))
  (setq mew-nmz-auto-timer nil)
  (when mew-nmz-mknmz-all-folders
    (mew-nmz-mknmz-kill-process))
  (if (interactive-p)
      (message "Automatic mknmz stop")))

(defun mew-nmz-auto-mknmz (&optional args)
  "Automatic mknmz for full folders."
  (unless mew-nmz-mknmz-all-folders
    (let ((ifile (expand-file-name mew-nmz-mknmz-index-file mew-conf-path))
	  (inbox (mew-inbox-folder (and (mew-summary-or-virtual-p)
					(mew-case:folder-case (buffer-name)))))
	  allflds)
      (if (and (file-readable-p ifile)
	       (not args))
	  (with-temp-buffer
	    (mew-frwlet
	     mew-nmz-mknmz-index-file-coding-system mew-cs-text-for-write
	     (insert-file-contents ifile)
	     (goto-char (point-min))
	     (while (not (eobp))
	       (when (looking-at "^\\([^\t]+\\)\t")
		 (setq allflds (cons (match-string 1) allflds)))
	       (forward-line 1))
	     (setq mew-nmz-mknmz-all-folders (nreverse allflds))))
	(mew-nmz-setup)
	(setq mew-nmz-mknmz-all-folders (mew-nmz-mknmz-get-all-folders)))
      (when mew-nmz-mknmz-all-folders
	(setq mew-nmz-mknmz-all-folders
	      (cons inbox
		    (delete inbox mew-nmz-mknmz-all-folders)))
	(setq current-prefix-arg nil)
	(mew-nmz-mknmz (car mew-nmz-mknmz-all-folders) 'all)))))

;; auto run when mew start.
(when (and mew-nmz-mknmz-automatically
	   (numberp mew-nmz-mknmz-automatically))
    (run-at-time (* mew-nmz-mknmz-automatically 60) nil 'mew-nmz-auto-mknmz))



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