summary refs log tree commit diff stats
path: root/lib/system/avltree.nim
Commit message (Expand)AuthorAgeFilesLines
* make AVL tree node part of the memory regions; fixes hard to reproduce channe...Araq2017-01-311-1/+1
* improvements to memtrackingAndreas Rumpf2017-01-261-0/+6
* fixes serious regressionAndreas Rumpf2016-09-241-1/+1
* bugfix: bottom of AVL tree is now threadsafeAndreas Rumpf2016-09-241-3/+3
* lib: Trim .nim files trailing whitespaceAdam Strzelecki2015-09-041-2/+2
* lib/system/a-e - Dropped 'T' from typespdw2015-06-041-2/+2
* introduced 'benign' pragmaAraq2014-10-251-2/+2
* the big renamefest: first stepsAraq2014-08-221-1/+1
* New concurrency model: next stepsAraq2014-04-191-2/+2
* case consistency part 1Araq2013-12-271-5/+5
* docgen2 improvementsAraq2012-06-231-1/+1
* year 2012 for most copyright headersAraq2012-01-021-1/+1
* GC: use simple balanced tree instead of AVL treeAraq2011-12-301-226/+66
* GC: AVL tree uses unsigned comparisonsAraq2011-12-301-7/+7
* GC stack scanning cares about interior pointersAraq2011-12-301-0/+251
d } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
package compose

import (
	"fmt"
	"strings"

	"git.sr.ht/~sircmpwn/aerc/commands"
	"git.sr.ht/~sircmpwn/aerc/widgets"
	"git.sr.ht/~sircmpwn/getopt"
)

type Header struct{}

var (
	headers = []string{
		"From",
		"To",
		"Cc",
		"Bcc",
		"Subject",
		"Comments",
		"Keywords",
	}
)

func init() {
	register(Header{})
}

func (Header) Aliases() []string {
	return []string{"header"}
}

func (Header) Complete(aerc *widgets.Aerc, args []string) []string {
	return commands.CompletionFromList(headers, args)
}

func (Header) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) < 2 {
		return fmt.Errorf("Usage: %s [-f] field [value]", args[0])
	}

	opts, optind, err := getopt.Getopts(args, "f")
	if err != nil {
		return err
	}
	var (
		force bool = false
	)
	for _, opt := range opts {
		switch opt.Option {
		case 'f':
			force = true
		}
	}

	composer, _ := aerc.SelectedTab().(*widgets.Composer)

	if !force {
		headers, _, err := composer.PrepareHeader()
		if err != nil {
			return err
		}

		if headers.Has(strings.Title(args[optind])) {
			return fmt.Errorf("Header %s already exists", args[optind])
		}
	}

	composer.AddEditor(strings.Title(args[optind]),
		strings.Join(args[optind+1:], " "), false)

	return nil
}