summary refs log blame commit diff stats
path: root/examples/README
blob: 8606a89d148147cb4001bb344fd77e77f50dce4b (plain) (tree)
1
2
                                                                              
                                                    
The files in this directory contain applications or extensions of ranger which
are put here for your inspiration and as references.
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





                 
                 









                                                 
                                                                  








                                                               
                        

                          



                                                          





                                                            


                                                        


                                                                                 








                                              
package commands

import (
	"errors"
	"fmt"
	"strconv"
	"strings"

	"git.sr.ht/~sircmpwn/aerc2/widgets"
)

func init() {
	Register("next-message", NextPrevMessage)
	Register("prev-message", NextPrevMessage)
}

func nextPrevMessageUsage(cmd string) error {
	return errors.New(fmt.Sprintf("Usage: %s [<n>[%%]]", cmd))
}

func NextPrevMessage(aerc *widgets.Aerc, args []string) error {
	if len(args) > 2 {
		return nextPrevMessageUsage(args[0])
	}
	var (
		n   int = 1
		err error
		pct bool
	)
	if len(args) > 1 {
		if strings.HasSuffix(args[1], "%") {
			pct = true
			args[1] = args[1][:len(args[1])-1]
		}
		n, err = strconv.Atoi(args[1])
		if err != nil {
			return nextPrevMessageUsage(args[0])
		}
	}
	acct := aerc.SelectedAccount()
	if acct == nil {
		return errors.New("No account selected")
	}
	if pct {
		n = int(float64(acct.Messages().Height()) * (float64(n) / 100.0))
	}
	for ; n > 0; n-- {
		if args[0] == "prev-message" {
			acct.Messages().Prev()
		} else {
			acct.Messages().Next()
		}
	}
	return nil
}