[PATCH 1/2] Add separate "Append to file" button

Wolfgang Denk <[email protected]> Wed, 13 Jun 2012 00:02:48 +0200
Newsgroups gmane.mail.exmh.devel
Message-ID <[email protected]>
There are many cases where I would like to overwrite an existing file,
but the "Save to file" funtion always appends only.  So create a new
"Append to file" button for this functionality, and make "Save to
file" just perform a plain write, overwriting any existing data.

Signed-off-by: Wolfgang Denk <[email protected]>
---
 lib/app-defaults |    4 +++-
 lib/msg.tcl      |   23 ++++++++++++++++++++++-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/lib/app-defaults b/lib/app-defaults
index 8aa01de..44bfb71 100644
--- a/lib/app-defaults
+++ b/lib/app-defaults
@@ -401,7 +401,7 @@ exmh.iconic:		0
 *Mops.spam.m.c_f_no:	Bogo_FilterFolder ham
 
 *Mops.more.text: 	More...
-*Mops.more.m.entrylist: 	print unmark clip xunseen burst distrib save use edit uudecode postscript apply1 apply2 munseen pgp uriscan uriopen partial ref post grabaddr attach
+*Mops.more.m.entrylist: 	print unmark clip xunseen burst distrib save append use edit uudecode postscript apply1 apply2 munseen pgp uriscan uriopen partial ref post grabaddr attach
 *Mops.more.m.uentrylist:
 
 *Mops.more.m.l_print: 	Print
@@ -418,6 +418,8 @@ exmh.iconic:		0
 *Mops.more.m.c_distrib:	Msg_Dist Mh_DistSetup
 *Mops.more.m.l_save: 	Save to file
 *Mops.more.m.c_save:	Msg_Save
+*Mops.more.m.l_append: 	Append to file
+*Mops.more.m.c_append:	Msg_Append
 *Mops.more.m.l_use: 	Use message as draft
 !
 ! The \$ is required because menu commands are eval'ed when the menu
diff --git a/lib/msg.tcl b/lib/msg.tcl
index e9c58bf..79f1a2e 100644
--- a/lib/msg.tcl
+++ b/lib/msg.tcl
@@ -550,13 +550,34 @@ proc Msg_BurstDigest {} {
 	}
     }
 }
+
 proc Msg_Save {} {
     global exmh mhProfile
     set files {}
     Ftoc_MsgIterate msgid {
 	lappend files $mhProfile(path)/$exmh(folder)/$msgid
     }
-    
+
+    set name [FSBox "Select file to create/save to:" ]
+    if {$name != {}} {
+	if [catch {eval {exec cat} $files {> $name}} err] {
+	    Exmh_Status $err error
+	} else {
+	    set plural [expr {([llength $files] > 1) ? "s" : ""}]
+	    Exmh_Status "Message$plural stored in $name"
+	}
+    } else {
+	Exmh_Status "canceled"
+    }
+}
+
+proc Msg_Append {} {
+    global exmh mhProfile
+    set files {}
+    Ftoc_MsgIterate msgid {
+	lappend files $mhProfile(path)/$exmh(folder)/$msgid
+    }
+
     set name [FSBox "Select file to create/append to:" "" write]
     if {$name != {}} {
 	set exists [file exists $name]
-- 
1.7.10.2