summary refs log tree commit diff stats
path: root/CHANGELOG
diff options
context:
space:
mode:
Diffstat (limited to 'CHANGELOG')
-rw-r--r--CHANGELOG46
1 files changed, 46 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
index 00000000..f1417fee
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,46 @@
+This log only documents changes between stable versions.
+
+From 1.2 on, odd minor version numbers (1.3, 1.5, 1.7,..) are assigned to the
+fresh git snapshots while stable versions will have even minor numbers.
+
+1.1.2 -> 1.2:
+* !!! Changed the default configuration directory to ~/.config/ranger !!!
+* Removed "Console Modes", each old mode is now a simple command
+* Disabled file previews by default if ranger is used by root
+* Allow to jump to specific help sections by typing two numbers, e.g. 13?
+* Added keys: da, dr, ya, yr for adding and removing files from copy buffer
+* Added keys: gl and gL to resolve links, see 11?
+* Added key: pL to create a relative symlink
+* Added %<LETTER> and %<N><LETTER> macros for the console, see 33?
+* Fixed ansi codes for colors in the pager
+* Use the file ~/.mime.types for mime type detection
+* Several clean-ups and fixes
+
+1.1.1 -> 1.1.2:
+* Fix crash when using scrollwheel to scroll down in some cases
+* The command "ranger dir1 dir2 ..." opens multiple directories in tabs
+* Removed pydoc html documentation by default, re-create it with "make doc"
+* Minor fixes
+
+1.1.0 -> 1.1.1:
+* New install script, "setup.py"
+* New flag for running programs: "w" (waits for enter press)
+* Minor fixes
+
+1.0.4 -> 1.1.0:
+* Added a man page
+* Tab support
+* Improved directory loading performance
+* Commands are definable in ~/.ranger/commands.py
+* Case insensitive sorting (type zs)
+* Better UTF support
+* Possibility to turn off previews (zp and zP)
+* Changing options with :set (e.g. :set column_ratios=1,2,3,4)
+* Ask for confirmation when using :delete
+* New invocation flag: --fail-unless-cd
+* New hotkeys, commands, options.
+* New syntax for ~/.ranger/keys.py
+* Several user contributions
+* And tons of general improvements
+
+NOTE: The syntax for configuration is still subject to change.
e='Blame the previous revision' href='/akspecs/aerc/blame/worker/imap/flags.go?id=05f00f0153066b9bb527773927a3244dad28ef4f'>^
df5d9a3 ^


6271d45 ^

df5d9a3 ^











6271d45 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77


            
             

                                     
                                               




                                                                          

                                                                             






























                                                                                      







                                                                      
                                  
                                    



                                                      


                                                                             

                      











                                                                                        
 
package imap

import (
	"fmt"
	"github.com/emersion/go-imap"

	"git.sr.ht/~sircmpwn/aerc/worker/types"
)

func (imapw *IMAPWorker) handleDeleteMessages(msg *types.DeleteMessages) {
	item := imap.FormatFlagsOp(imap.AddFlags, true)
	flags := []interface{}{imap.DeletedFlag}
	uids := toSeqSet(msg.Uids)
	if err := imapw.client.UidStore(uids, item, flags, nil); err != nil {
		imapw.worker.PostMessage(&types.Error{
			Message: types.RespondTo(msg),
			Error:   err,
		}, nil)
		return
	}
	var deleted []uint32
	ch := make(chan uint32)
	done := make(chan interface{})
	go func() {
		for seqNum := range ch {
			i := seqNum - 1
			deleted = append(deleted, imapw.seqMap[i])
			imapw.seqMap = append(imapw.seqMap[:i], imapw.seqMap[i+1:]...)
		}
		done <- nil
	}()
	if err := imapw.client.Expunge(ch); err != nil {
		imapw.worker.PostMessage(&types.Error{
			Message: types.RespondTo(msg),
			Error:   err,
		}, nil)
	} else {
		<-done
		imapw.worker.PostMessage(&types.MessagesDeleted{
			Message: types.RespondTo(msg),
			Uids:    deleted,
		}, nil)
		imapw.worker.PostMessage(&types.Done{types.RespondTo(msg)}, nil)
	}
}

func (imapw *IMAPWorker) handleReadMessages(msg *types.ReadMessages) {
	item := imap.FormatFlagsOp(imap.AddFlags, true)
	flags := []interface{}{imap.SeenFlag}
	if !msg.Read {
		item = imap.FormatFlagsOp(imap.RemoveFlags, true)
		flags = []interface{}{imap.SeenFlag}
	}
	uids := toSeqSet(msg.Uids)
	emitErr := func(err error) {
		imapw.worker.PostMessage(&types.Error{
			Message: types.RespondTo(msg),
			Error:   err,
		}, nil)
	}
	if err := imapw.client.UidStore(uids, item, flags, nil); err != nil {
		emitErr(err)
		return
	}
	imapw.worker.PostAction(&types.FetchMessageHeaders{
		Uids: msg.Uids,
	}, func(_msg types.WorkerMessage) {
		switch m := _msg.(type) {
		case *types.Error:
			err := fmt.Errorf("handleReadMessages: %v", m.Error)
			imapw.worker.Logger.Printf("could not fetch headers: %s", err)
			emitErr(err)
		case *types.Done:
			imapw.worker.PostMessage(&types.Done{types.RespondTo(msg)}, nil)
		}
	})
}