Пример #1
0
func drawKnownMaildirs(amua *Amua, g *gocui.Gui, v *gocui.View) error {
	v.Clear()
	v.Frame = false
	w, h := v.Size()
	displayed := len(amua.knownMaildirs)
	if len(amua.knownMaildirs) > h {
		displayed = h
	}
	fillers := h - displayed
	space := 1
	for i := 0; i < displayed; i++ {
		current := amua.knownMaildirs[i].maildir == amua.curMaildirView.md
		nrMsgs := fmt.Sprintf("(%d)", len(amua.knownMaildirs[i].maildir.messages))
		availableWidth := w - space - len(nrMsgs) - 3
		strfmt := fmt.Sprintf(" %%-%ds %s ", availableWidth, nrMsgs)
		str := fmt.Sprintf(strfmt, util.TruncateString(amua.knownMaildirs[i].path, availableWidth))
		if current {
			colorstring.Fprintf(v, "[bold]%s", str)
		} else {
			fmt.Fprint(v, str)
		}
		fmt.Fprintf(v, strings.Repeat(" ", space-1))
		fmt.Fprintln(v, "|")
	}
	for i := 0; i < fillers; i++ {
		fmt.Fprintf(v, strings.Repeat(" ", w-1))
		fmt.Fprintln(v, "|")
	}
	return nil
}
Пример #2
0
func (amua *Amua) RefreshMaildir(g *gocui.Gui, v *gocui.View) error {
	md, err := LoadMaildir(amua.knownMaildirs[amua.curMaildir].path, true)
	if err != nil {
		return err
	}
	amua.knownMaildirs[amua.curMaildir].maildir = md
	mdv := &MaildirView{md: md}
	amua.curMaildirView = mdv
	v.SetCursor(0, 0)
	v.SetOrigin(0, 0)
	err = amua.curMaildirView.Draw(v)
	if err != nil {
		fmt.Fprintf(v, err.Error())
	}
	drawSlider(amua, g)

	return nil
}
Пример #3
0
func (amua *Amua) sendMailDraw(v *gocui.View) error {
	v.Clear()
	v.Frame = false
	v.Highlight = false
	v.Wrap = true
	v.SetOrigin(0, 0)

	tos := util.ConcatAddresses(amua.newMail.to)
	ccs := util.ConcatAddresses(amua.newMail.cc)
	bccs := util.ConcatAddresses(amua.newMail.bcc)
	fmt.Fprintf(v, "y: send, Ctrl+G: cancel, q: move to drafts, t: tos, c: ccs, b: bccs\n")
	fmt.Fprintf(v, "To: %s\n", tos)
	fmt.Fprintf(v, "Cc: %s\n", ccs)
	fmt.Fprintf(v, "Bcc: %s\n", bccs)
	fmt.Fprintf(v, "Subject: %s\n", amua.newMail.subject)
	fmt.Fprintf(v, "\n")
	return nil
}
Пример #4
0
func (mv *MaildirView) scroll(v *gocui.View, incr int) {
	xo, yo := v.Origin()
	x, y := v.Cursor()
	_, h := v.Size()

	str := fmt.Sprintf("0: %d, ", incr)
	if mv.cur+incr > len(mv.md.messages)-1 {
		incr = len(mv.md.messages) - 1 - mv.cur
		str += fmt.Sprintf("1: %d, ", incr)
	}
	if mv.cur+incr < 0 {
		incr = 0 - mv.cur
		str += fmt.Sprintf("2: %d, ", incr)
	}
	mv.cur += incr
	y += incr
	if y >= h || y < 0 {
		mv.curTop += incr
		if mv.curTop < 0 {
			mv.curTop = 0
		}
		yo = yo + incr
		if yo < 0 {
			yo = 0
		}
		v.SetOrigin(xo, yo)
	}
	if y < 0 {
		y = 0
	}
	v.SetCursor(x, y)

	if false {
		xo, yo = v.Origin()
		x, y = v.Cursor()
		setStatus(fmt.Sprintf("%s origin=(%d), cursor=(%d), mv=(%d, %d)", str, yo, y, mv.cur, mv.curTop))
	}
}
Пример #5
0
func (mv *MaildirView) Draw(v *gocui.View) error {
	v.Clear()
	w, h := v.Size()
	if h <= 1 {
		return fmt.Errorf("The screen is too small")
	}
	if w <= 20 {
		return fmt.Errorf("The screen is too small")
	}

	xo, _ := v.Origin()
	v.SetOrigin(xo, mv.curTop)
	xc, _ := v.Cursor()
	v.SetCursor(xc, mv.cur-mv.curTop)
	msgs := mv.md.messages
	flagsLen := 5
	indexLen := 6
	sizeLen := 5
	remW := w - indexLen - flagsLen - sizeLen + 2 /* two spaces */ + 2 /* two brackets around the size */
	fromRatio := 25
	subjRatio := 100 - fromRatio
	fromLen := (remW - 10) * fromRatio / 100.0
	subjLen := (remW - 10) * subjRatio / 100.0
	fmtString := fmt.Sprintf("%%-%dd%%-%ds%%-%ds [%%%ds] %%-%ds\n", indexLen, flagsLen, fromLen, sizeLen, subjLen)
	for i, m := range msgs {
		from := util.TruncateString(m.From, fromLen)
		subj := util.TruncateString(m.Subject, subjLen)
		flags := flagsToString(m.Flags)
		fmt.Fprintf(v, fmtString, i, flags, from, util.SiteToHuman(m.size), subj)

	}
	return nil
}