summary refs log tree commit diff stats
path: root/commands/compose/abort.go
blob: 74d0395397916c39150b94a9009ba224fc239bc6 (plain) (blame)
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
package compose

import (
	"errors"

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

type Abort struct{}

func init() {
	register(Abort{})
}

func (Abort) Aliases() []string {
	return []string{"abort"}
}

func (Abort) Complete(aerc *widgets.Aerc, args []string) []string {
	return nil
}

func (Abort) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) != 1 {
		return errors.New("Usage: abort")
	}
	composer, _ := aerc.SelectedTab().(*widgets.Composer)

	aerc.RemoveTab(composer)
	composer.Close()

	return nil
}
>stream: (stream byte 0x100) var in-stream-addr/esi: (addr stream byte) <- address in-stream write in-stream-addr, in var out-stream: (stream byte 0x100) var out-stream-addr/edi: (addr stream byte) <- address out-stream $substring:core: { # skip 'start' graphemes var i/eax: int <- copy 0 { compare i, start break-if->= { var dummy/eax: grapheme <- read-grapheme in-stream-addr compare dummy, 0xffffffff/end-of-file break-if-= $substring:core } i <- increment loop } # copy 'len' graphemes i <- copy 0 { compare i, len break-if->= { var g/eax: grapheme <- read-grapheme in-stream-addr compare g, 0xffffffff/end-of-file break-if-= $substring:core write-grapheme out-stream-addr, g } i <- increment loop } } stream-to-array out-stream-addr, out-ah } fn test-substring { var out-h: (handle array byte) var out-ah/edi: (addr handle array byte) <- address out-h # prefix substrings substring 0, 0, 3, out-ah var out/eax: (addr array byte) <- lookup *out-ah check-strings-equal out, "", "F - test-substring/null" substring "", 0, 3, out-ah var out/eax: (addr array byte) <- lookup *out-ah #? print-string-to-real-screen out #? print-string-to-real-screen "\n" check-strings-equal out, "", "F - test-substring/empty" # substring "abcde", 0, 3, out-ah var out/eax: (addr array byte) <- lookup *out-ah #? print-string-to-real-screen out #? print-string-to-real-screen "\n" check-strings-equal out, "abc", "F - test-substring/truncate" # substring "abcde", 0, 5, out-ah var out/eax: (addr array byte) <- lookup *out-ah check-strings-equal out, "abcde", "F - test-substring/all" # substring "abcde", 0, 7, out-ah var out/eax: (addr array byte) <- lookup *out-ah check-strings-equal out, "abcde", "F - test-substring/too-small" # substrings outside string substring "abcde", 6, 1, out-ah var out/eax: (addr array byte) <- lookup *out-ah check-strings-equal out, "", "F - test-substring/start-too-large" # trim prefix substring "", 2, 3, out-ah var out/eax: (addr array byte) <- lookup *out-ah check-strings-equal out, "", "F - test-substring/middle-empty" # substring "abcde", 1, 2, out-ah var out/eax: (addr array byte) <- lookup *out-ah check-strings-equal out, "bc", "F - test-substring/middle-truncate" # substring "abcde", 1, 4, out-ah var out/eax: (addr array byte) <- lookup *out-ah check-strings-equal out, "bcde", "F - test-substring/middle-all" # substring "abcde", 1, 5, out-ah var out/eax: (addr array byte) <- lookup *out-ah check-strings-equal out, "bcde", "F - test-substring/middle-too-small" } fn split-string in: (addr array byte), delim: grapheme, out: (addr handle array (handle array byte)) { var in-stream: (stream byte 0x100) var in-stream-addr/esi: (addr stream byte) <- address in-stream write in-stream-addr, in var tokens-stream: (stream (handle array byte) 0x100) var tokens-stream-addr/edi: (addr stream (handle array byte)) <- address tokens-stream var curr-stream: (stream byte 0x100) var curr-stream-addr/ecx: (addr stream byte) <- address curr-stream $split-string:core: { var g/eax: grapheme <- read-grapheme in-stream-addr compare g, 0xffffffff break-if-= #? print-grapheme-to-real-screen g #? print-string-to-real-screen "\n" compare g, delim { break-if-!= # token complete; flush var token: (handle array byte) var token-ah/eax: (addr handle array byte) <- address token stream-to-array curr-stream-addr, token-ah write-to-stream tokens-stream-addr, token-ah clear-stream curr-stream-addr loop $split-string:core } write-grapheme curr-stream-addr, g loop } stream-to-array tokens-stream-addr, out } fn test-split-string { var out-h: (handle array (handle array byte)) var out-ah/edi: (addr handle array (handle array byte)) <- address out-h # prefix substrings split-string "bab", 0x61, out-ah # no crash }