[Mew-dist 06866] Re: mew-refile-view.el (Re: mew-refile.el)

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
1998年 11月 4日 (水) 09:31:34 JST


白井です。

# ふと気付くと結構ハードな仕事をしていたので、使用したご報告が遅
# くなってしまいました。

From: "Takashi P.KATOH" <p-katoh at example.com> さん曰く
Subject: [Mew-dist 06790] Re: mew-refile-view.el (Re: mew-refile.el)
Message-ID: <19981025140505L.p-katoh at example.com>
Date: Sun, 25 Oct 1998 14:05:10 +0900

加藤> しばらく手をつけるつもりはなかったのですが、なぜだか code が
加藤> 倍近くなっちゃいました ;-)

感謝、感謝です。

加藤> From: Hideyuki SHIRAI (白井秀行) <shirai at example.com>
加藤> Subject: [Mew-dist 06772] Re: mew-refile-view.el (Re: mew-refile.el)
加藤> 3. *Mew refile view* buffer で `l', `.', `q' とかを試してみま
加藤> しょう :-)
加藤> (Menu を見る、も可)

"." がめちゃくちゃ便利なので、調子にのって "u","o","d" などを追
加してしまいました。さすがに "x" は止めましたが。^^;
それと、"q" をちょっと変えました。

加藤> Known Problem:
加藤>   "o" mark が無くなった後で mew-refile-view-again をしても、
加藤>   以前の buffer が残って、ちょっとイヤ。

"u" を加えたことにより、どうにかしなければならなくなったため
ad-hoc に対応してしまいました。とっても汚いのですが、いかがでしょ
う。

加藤> なお、もはや現実逃避する暇すらなくなってしまったので (;_;)、
加藤> 次に手をつけるのはしばらく後になると思います。

今日もしごとだぁ〜。しかし、あまりにつらいと現実逃避をしたくなる
かもしれません。:)

-------------- next part --------------
--- mew-refile-view.el.orig	Wed Nov  4 09:09:18 1998
+++ mew-refile-view.el	Wed Nov  4 08:52:40 1998
@@ -29,9 +29,14 @@
     ["Prev page"    scroll-down t]
     ["Top"          beginning-of-buffer t]
     ["Bottom"       end-of-buffer t]
+    ["Prev message" mew-refile-view-prev-msg t]
+    ["Next message" mew-refile-view-next-msg t]
     "----"
     ["Show again"   mew-refile-view-again t]
     ["Goto summary" mew-refile-view-goto-summary t]
+    ["Unmark"	    mew-refile-view-unmark t]
+    ["Refile"	    mew-refile-view-refile t]
+    ["Delete"	    mew-refile-view-delete t]
     ["Quit"         mew-refile-view-quit t]
     ))
 
@@ -46,6 +51,11 @@
   (define-key mew-refile-view-mode-map "h"    'mew-refile-view-goto-summary)
   (define-key mew-refile-view-mode-map "."    'mew-refile-view-goto-summary)
   (define-key mew-refile-view-mode-map "q"    'mew-refile-view-quit)
+  (define-key mew-refile-view-mode-map "n"    'mew-refile-view-next-msg)
+  (define-key mew-refile-view-mode-map "p"    'mew-refile-view-prev-msg)
+  (define-key mew-refile-view-mode-map "u"    'mew-refile-view-unmark)
+  (define-key mew-refile-view-mode-map "o"    'mew-refile-view-refile)
+  (define-key mew-refile-view-mode-map "d"    'mew-refile-view-delete)
   (if mew-temacs-p
       (easy-menu-define
        mew-refile-view-mode-menu
@@ -82,7 +92,16 @@
   (interactive)
   (mew-summary-only
    (if (null mew-summary-buffer-refile)
-       (message "No refile marks")
+       (let* ((folder (buffer-name))
+	      (bufname (format "*Mew refile view* (%s)" folder)))
+	 (message "No refile marks")
+	 (if (not (buffer-live-p (get-buffer bufname)))
+	     ()
+	   (set-buffer bufname)
+	   (setq buffer-read-only nil)
+	   (erase-buffer)
+	   (insert "No refile marks\n")
+	   (setq buffer-read-only nil)))
      (save-restriction
        (widen)
        (let* ((folder (buffer-name))
@@ -128,9 +147,12 @@
       (setq num (if (looking-at mew-summary-message-regex)
 		    (mew-match 1))))
     (if (not (and original-folder (get-buffer original-folder)))
-	(message "No Summary mode for %s" original-folder)
+	(progn
+	  (message "No Summary mode for %s" original-folder)
+	  nil)
       (mew-pop-to-buffer original-folder)
-      (if num (mew-summary-jump-message num)))))
+      (if num (mew-summary-jump-message num))
+      t)))
 
 (defun mew-refile-view-again ()
   (interactive)
@@ -142,10 +164,76 @@
 (defun mew-refile-view-quit ()
   "Exit from mew-refile-view-mode."
   (interactive)
-  (delete-window)
-  ;; and/or do `kill-buffer'?
-  ;; (kill-buffer (current-buffer))
-  )
+  (condition-case nil
+      (delete-window)
+    ;; and/or do `kill-buffer'?
+    ;; (kill-buffer (current-buffer))
+    (error
+     (if (not (and original-folder (get-buffer original-folder)))
+	 (progn
+	   (message "No Summary mode for %s" original-folder)
+	   (kill-buffer (current-buffer)))
+       (mew-pop-to-buffer original-folder)
+       (delete-other-windows)))))
+
+(defun mew-refile-view-next-msg ()
+  "Next message search in mew-refile-view-mode."
+  (interactive)
+  (let ((orig (point)))
+    (end-of-line)
+    (if (re-search-forward mew-summary-message-regex nil t)
+	(beginning-of-line)
+      (goto-char orig))))
+	
+(defun mew-refile-view-prev-msg ()
+  "Previous message search in mew-refile-view-mode."
+  (interactive)
+  (let ((orig (point)))
+    (beginning-of-line)
+    (if (re-search-backward mew-summary-message-regex nil t)
+	(beginning-of-line)
+      (goto-char orig))))
+
+(defun mew-refile-view-unmark ()
+  "Unmark this message."
+  (interactive)
+  (mew-refile-view-msg 'undo))
+
+(defun mew-refile-view-refile ()
+  "Refile this message."
+  (interactive)
+  (mew-refile-view-msg 'refile))
+
+(defun mew-refile-view-delete ()
+  "Delete this message."
+  (interactive)
+  (mew-refile-view-msg 'delete))
+
+(defun mew-refile-view-msg (msg-com)
+  "New mark on this message."
+  (interactive)
+  (beginning-of-line)
+  (let ((orig-point (point))
+	(orig-buff (current-buffer)))
+    (if (not (looking-at mew-summary-message-regex))
+	(message "No message here.")
+      ;; in mew summary buffer
+      (if (mew-refile-view-goto-summary)
+	  (mew-summary-only
+	   (cond
+	    ((eq msg-com 'refile)
+	     (mew-summary-refile))
+	    ((eq msg-com 'undo)
+	     (mew-summary-undo 1))
+	    ((eq msg-com 'delete)
+	     (mew-summary-delete 1)))
+	   (mew-refile-view)))
+      ;; out mew summary buffer
+      (mew-pop-to-buffer orig-buff)
+      (if (< orig-point (point-max))
+	  (goto-char orig-point)
+	(goto-char (point-max)))
+      (beginning-of-line))))
 
 (defun mew-refile-view-mode (&optional folder)
   "Major mode for display refile alist.
@@ -153,8 +241,13 @@
 
 SPC	Scroll up this message.
 DEL	Back-scroll this message.
+n	Next message show.
+p	Previous message show.
 h	Get back to Summary mode.
-l	Reshow.
+u	Unmark this message.
+o	Refile this message.
+d	Delete this message.
+l	Reshow this message.
 q	Quit.
 <	Go to top.
 >	Go to bottom.


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