summary refs log tree commit diff stats
ModeNameSize
-rw-r--r--.gitignore23log stats plain blame
-rw-r--r--LICENSE1061log stats plain blame
-rw-r--r--README.md500log stats plain blame
-rw-r--r--aerc.go2109log stats plain blame
d---------commands355log stats plain
d---------config236log stats plain
d---------contrib109log stats plain
-rw-r--r--go.mod1233log stats plain blame
-rw-r--r--go.sum7493log stats plain blame
d---------lib68log stats plain
d---------widgets416log stats plain
d---------worker100log stats plain
wn.com> 2019-03-21 16:30:23 -0400 committer Drew DeVault <sir@cmpwn.com> 2019-03-21 16:30:23 -0400 Add context-specific commands' href='/akspecs/aerc/commit/aerc.go?h=0.5.0&id=8126d82956636a2525263e2d0d985d721fdb8074'>8126d82 ^
8126d82 ^
10dd23f ^

577248f ^

f37508a ^
577248f ^

5d0402a ^




fa04a1e ^
10dd23f ^


8126d82 ^





aeb7005
648ca98 ^



a21afda ^




1767e4f ^
a21afda ^

a0be5e8 ^

a755608 ^

39c93d2 ^
60b351b ^
f406bf5 ^



b60999c ^
8126d82 ^



a755608 ^
8126d82 ^




de122b1 ^
8126d82 ^





f406bf5 ^
8126d82 ^
b60999c ^

f406bf5 ^
77a0f68 ^


1418e1b ^
60b351b ^
de122b1 ^
1418e1b ^
661e3ec ^

305446a ^
6394e38 ^
aeb7005
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107


            
             



                   
              
 

                                    
                                            
                                                    
                                                    
                                                    
                                                     
                                          

                                                

 



                                                                
                                                

                                                

                                            
                                                

                                                




                                                    
                               


                                                  





                                                                    
             



                                  




                                               
                                                   

                                          

                                           

                                                              
         
 



                                  
                                                                     



                                                                      
                                                     




                                                                         
                                         





                                              
                 
                          

          
                                              


                          
                        
 
                              
                               

                                                         
                 
         
 
package main

import (
	"fmt"
	"io"
	"io/ioutil"
	"log"
	"os"
	"time"

	"github.com/mattn/go-isatty"

	"git.sr.ht/~sircmpwn/aerc2/commands"
	"git.sr.ht/~sircmpwn/aerc2/commands/account"
	"git.sr.ht/~sircmpwn/aerc2/commands/compose"
	"git.sr.ht/~sircmpwn/aerc2/commands/msgview"
	"git.sr.ht/~sircmpwn/aerc2/commands/terminal"
	"git.sr.ht/~sircmpwn/aerc2/config"
	libui "git.sr.ht/~sircmpwn/aerc2/lib/ui"
	"git.sr.ht/~sircmpwn/aerc2/widgets"
)

func getCommands(selected libui.Drawable) []*commands.Commands {
	switch selected.(type) {
	case *widgets.AccountView:
		return []*commands.Commands{
			account.AccountCommands,
			commands.GlobalCommands,
		}
	case *widgets.Composer:
		return []*commands.Commands{
			compose.ComposeCommands,
			commands.GlobalCommands,
		}
	case *widgets.MessageViewer:
		return []*commands.Commands{
			msgview.MessageViewCommands,
			commands.GlobalCommands,
		}
	case *widgets.Terminal:
		return []*commands.Commands{
			terminal.TerminalCommands,
			commands.GlobalCommands,
		}
	default:
		return []*commands.Commands{commands.GlobalCommands}
	}
}

func main() {
	var (
		logOut io.Writer
		logger *log.Logger
	)
	if !isatty.IsTerminal(os.Stdout.Fd()) {
		logOut = os.Stdout
	} else {
		logOut = ioutil.Discard
	}
	logger = log.New(logOut, "", log.LstdFlags)
	logger.Println("Starting up aerc")

	conf, err := config.LoadConfig(nil)
	if err != nil {
		fmt.Printf("Failed to load config: %v\n", err)
		os.Exit(1)
	}

	var (
		aerc *widgets.Aerc
		ui   *libui.UI
	)
	aerc = widgets.NewAerc(conf, logger, func(cmd string) error {
		cmds := getCommands(aerc.SelectedTab())
		for i, set := range cmds {
			err := set.ExecuteCommand(aerc, cmd)
			if _, ok := err.(commands.NoSuchCommand); ok {
				if i == len(cmds)-1 {
					return err
				} else {
					continue
				}
			} else if _, ok := err.(commands.ErrorExit); ok {
				ui.Exit()
				return nil
			} else if err != nil {
				return err
			} else {
				break
			}
		}
		return nil
	})

	ui, err = libui.Initialize(conf, aerc)
	if err != nil {
		panic(err)
	}
	defer ui.Close()

	for !ui.ShouldExit() {
		if !ui.Tick() {
			// ~60 FPS
			time.Sleep(16 * time.Millisecond)
		}
	}
}