refile: Never change the current folder
authormarkus schnalke <meillo@marmaro.de>
Thu, 21 Apr 2016 14:43:25 +0000 (16:43 +0200)
committermarkus schnalke <meillo@marmaro.de>
Thu, 21 Apr 2016 14:43:25 +0000 (16:43 +0200)
Refile is different to all other tools, as its +folder arguments
are destination folders, not source folders (it even supports
multiple of them). A source folder can be specified with -src.
Refile used to change the current folder to the source folder.
It does not do so anymore.

Most often the current folder is used as the source folder; this is
the default. Hence changing the current folder is a no-op. But if
one refiles from some other source folder, changing to that folder
is seldom useful. Consider the scenario where one wants to collect
the last messages of a set of folders in some other folder. The
old behavior required to know where you are to collect the messages,
because after the first refile you'd be somewhere else:

for i in one two three ; do
refile -src +$i l +lastmsgs
done
# now we are in +three, hence go back where we were
folder +lastmsgs

The new behavior allows to move the messages just here (@), no
matter where that is:

for i in one two three ; do
refile -src +one l @
done
# now we still are where we were

Refiling actions do no more affect the current folder, hence one
may securely refile with different -src +folder many times in one
row, without having to care for changing locations.

man/refile.man1
test/tests/refile/test-refile [new file with mode: 0755]
uip/refile.c

index a82d1da..b19b1c0 100644 (file)
@@ -119,17 +119,13 @@ folder(1), rmf(1), rmm(1)
 
 .SH DEFAULTS
 .nf
-.RB ` "\-src\ +folder" "' defaults to the current folder"
+.RB ` "\-src\ \fI+folder\fP" "' defaults to the current folder"
 .RB ` msgs "' defaults to the current message"
 .RB ` \-nolink '
 .fi
 
 .SH CONTEXT
 If
-.B \-src
-.I +folder
-is given, it will become the current folder.
-If
 .B \-link
 is specified, the current message in the
 source folder will be set to the last message specified; otherwise, the
@@ -142,3 +138,11 @@ will also define
 those sequences for the destination folders.  See
 .B mh\-sequence (7)
 for information concerning the previous sequence.
+
+.SH HISTORY
+Since mmh-0.3,
+.B refile
+does never change the current folder.
+(It used to change it when
+.BI \-src\  +folder
+was given, but this behavior had usability disadvantages.)
diff --git a/test/tests/refile/test-refile b/test/tests/refile/test-refile
new file mode 100755 (executable)
index 0000000..9dd852a
--- /dev/null
@@ -0,0 +1,135 @@
+#!/bin/sh
+######################################################
+#
+# Test refile
+#
+######################################################
+
+. "$MH_TEST_COMMON"
+
+
+runandcheck "scan +inbox" <<!
+   1  2006-09-29 00:00  Test1              Testing message 1
+   2  2006-09-29 00:00  Test2              Testing message 2
+   3  2006-09-29 00:00  Test3              Testing message 3
+   4  2006-09-29 00:00  Test4              Testing message 4
+   5  2006-09-29 00:00  Test5              Testing message 5
+   6  2006-09-29 00:00  Test6              Testing message 6
+   7  2006-09-29 00:00  Test7              Testing message 7
+   8  2006-09-29 00:00  Test8              Testing message 8
+   9  2006-09-29 00:00  Test9              Testing message 9
+  10  2006-09-29 00:00  Test10             Testing message 10
+!
+
+
+# refile one msg from cur folder into one other folder
+
+folder +inbox >/dev/null
+runandcheck "refile 4 +fol1" <<!
+!
+runandcheck folder <<!
+inbox+ has 9 messages  (1-10)
+!
+runandcheck "scan +inbox" <<!
+   1  2006-09-29 00:00  Test1              Testing message 1
+   2  2006-09-29 00:00  Test2              Testing message 2
+   3  2006-09-29 00:00  Test3              Testing message 3
+   5  2006-09-29 00:00  Test5              Testing message 5
+   6  2006-09-29 00:00  Test6              Testing message 6
+   7  2006-09-29 00:00  Test7              Testing message 7
+   8  2006-09-29 00:00  Test8              Testing message 8
+   9  2006-09-29 00:00  Test9              Testing message 9
+  10  2006-09-29 00:00  Test10             Testing message 10
+!
+runandcheck "scan +fol1" <<!
+   1  2006-09-29 00:00  Test4              Testing message 4
+!
+
+
+# refile one msg from cur folder into two other folders
+
+folder +inbox >/dev/null
+runandcheck "refile 6 +fol1 +fol2" <<!
+!
+runandcheck folder <<!
+inbox+ has 8 messages  (1-10)
+!
+runandcheck "scan +inbox" <<!
+   1  2006-09-29 00:00  Test1              Testing message 1
+   2  2006-09-29 00:00  Test2              Testing message 2
+   3  2006-09-29 00:00  Test3              Testing message 3
+   5  2006-09-29 00:00  Test5              Testing message 5
+   7  2006-09-29 00:00  Test7              Testing message 7
+   8  2006-09-29 00:00  Test8              Testing message 8
+   9  2006-09-29 00:00  Test9              Testing message 9
+  10  2006-09-29 00:00  Test10             Testing message 10
+!
+runandcheck "scan +fol1" <<!
+   1  2006-09-29 00:00  Test4              Testing message 4
+   2  2006-09-29 00:00  Test6              Testing message 6
+!
+runandcheck "scan +fol2" <<!
+   1  2006-09-29 00:00  Test6              Testing message 6
+!
+
+
+# refile two msg from cur folder into two other folders
+
+folder +inbox >/dev/null
+runandcheck "refile 8 9 +fol1 +fol2" <<!
+!
+runandcheck folder <<!
+inbox+ has 6 messages  (1-10)
+!
+runandcheck "scan +inbox" <<!
+   1  2006-09-29 00:00  Test1              Testing message 1
+   2  2006-09-29 00:00  Test2              Testing message 2
+   3  2006-09-29 00:00  Test3              Testing message 3
+   5  2006-09-29 00:00  Test5              Testing message 5
+   7  2006-09-29 00:00  Test7              Testing message 7
+  10  2006-09-29 00:00  Test10             Testing message 10
+!
+runandcheck "scan +fol1" <<!
+   1  2006-09-29 00:00  Test4              Testing message 4
+   2  2006-09-29 00:00  Test6              Testing message 6
+   3  2006-09-29 00:00  Test8              Testing message 8
+   4  2006-09-29 00:00  Test9              Testing message 9
+!
+runandcheck "scan +fol2" <<!
+   1  2006-09-29 00:00  Test6              Testing message 6
+   2  2006-09-29 00:00  Test8              Testing message 8
+   3  2006-09-29 00:00  Test9              Testing message 9
+!
+
+
+# refile one msg from other folder into one other folder
+
+folder +inbox >/dev/null
+runandcheck "refile -src +fol1 1 +fol2" <<!
+!
+# Check new behavior as of mmh-0.3: Current folder stays the same!
+runandcheck folder <<!
+inbox+ has 6 messages  (1-10)
+!
+runandcheck "scan +inbox" <<!
+   1  2006-09-29 00:00  Test1              Testing message 1
+   2  2006-09-29 00:00  Test2              Testing message 2
+   3  2006-09-29 00:00  Test3              Testing message 3
+   5  2006-09-29 00:00  Test5              Testing message 5
+   7  2006-09-29 00:00  Test7              Testing message 7
+  10  2006-09-29 00:00  Test10             Testing message 10
+!
+runandcheck "scan +fol1" <<!
+   2  2006-09-29 00:00  Test6              Testing message 6
+   3  2006-09-29 00:00  Test8              Testing message 8
+   4  2006-09-29 00:00  Test9              Testing message 9
+!
+runandcheck "scan +fol2" <<!
+   1  2006-09-29 00:00  Test6              Testing message 6
+   2  2006-09-29 00:00  Test8              Testing message 8
+   3  2006-09-29 00:00  Test9              Testing message 9
+   4  2006-09-29 00:00  Test4              Testing message 4
+!
+
+
+
index 4e1d065..182f315 100644 (file)
@@ -225,7 +225,6 @@ main(int argc, char **argv)
        }
        seq_save(mp);
 
-       context_replace(curfolder, folder);
        context_save();
        folder_free(mp);
        return 0;