all repos

viye @ 99e30d03dbda8110ba0f2d9bbc2f40ac733fb53d

my shot at reimplementing xiki
2 files changed, 30 insertions(+), 8 deletions(-)
add viye ls
Author: Oleksandr Smirnov olexsmir@gmail.com
Committed at: 2026-08-25 18:10:58 +0300
Authored at: 2026-08-25 17:13:35 +0300
Change ID: vroqtmruylwyokwwrxkpnomnywwklmtn
Parent: f1413a3
M internal/plumbing/shell/shell.go
···
        16
        16
         

      
        17
        17
         type Tool struct{}

      
        18
        18
         

      
        19
        
        -func (Tool) Name() string               { return "shell($, $$, kill, mkdir)" }

      
        20
        
        -func (Tool) Match(c *viye.Context) bool { return isCmd(c) || isBGCmd(c) || isKill(c) || isMkdir(c) }

      
        
        19
        +func (Tool) Name() string { return "shell($, $$, ls, kill, mkdir)" }

      
        
        20
        +func (Tool) Match(c *viye.Context) bool {

      
        
        21
        +	return isCmd(c) || isBGCmd(c) || isLs(c) || isKill(c) || isMkdir(c)

      
        
        22
        +}

      
        
        23
        +

      
        21
        24
         func (Tool) Execute(c *viye.Context) (string, error) {

      
        22
        25
         	switch {

      
        23
        26
         	case isCmd(c):

      ···
        43
        46
         		}

      
        44
        47
         		return fmt.Sprintf("| pid: %d", cmd.Process.Pid), nil

      
        45
        48
         

      
        
        49
        +	case isLs(c):

      
        
        50
        +		entries, err := os.ReadDir(c.Dir)

      
        
        51
        +		if err != nil {

      
        
        52
        +			return "", err

      
        
        53
        +		}

      
        
        54
        +		var res []string

      
        
        55
        +		for _, e := range entries {

      
        
        56
        +			name := e.Name()

      
        
        57
        +			if e.IsDir() {

      
        
        58
        +				name += "/"

      
        
        59
        +			}

      
        
        60
        +			res = append(res, name)

      
        
        61
        +		}

      
        
        62
        +		return viye.FormatOutputList(res), nil

      
        
        63
        +

      
        46
        64
         	case isKill(c):

      
        47
        65
         		pid, err := strconv.Atoi(c.Args[0])

      
        48
        66
         		if err != nil {

      ···
        71
        89
         

      
        72
        90
         func isCmd(c *viye.Context) bool   { return c.Cmd == "$" }

      
        73
        91
         func isBGCmd(c *viye.Context) bool { return c.Cmd == "$$" }

      
        
        92
        +func isLs(c *viye.Context) bool    { return c.Cmd == "ls" }

      
        74
        93
         func isKill(c *viye.Context) bool  { return c.Cmd == "kill" && len(c.Args) == 1 }

      
        75
        94
         func isMkdir(c *viye.Context) bool { return c.Cmd == "mkdir" && len(c.Args) >= 1 }

      
M internal/viye/format.go
···
        2
        2
         

      
        3
        3
         import "strings"

      
        4
        4
         

      
        5
        
        -func FormatOutput(s string) string {

      
        6
        
        -	s = strings.TrimSuffix(s, "\n")

      
        7
        
        -	if s == "" {

      
        8
        
        -		return ""

      
        9
        
        -	}

      
        10
        
        -	lines := strings.Split(s, "\n")

      
        
        5
        +func FormatOutputList(lines []string) string {

      
        11
        6
         	for i, line := range lines {

      
        12
        7
         		if line == "" {

      
        13
        8
         			lines[i] = "|"

      ···
        16
        11
         		}

      
        17
        12
         	}

      
        18
        13
         	return strings.Join(lines, "\n") + "\n"

      
        
        14
        +}

      
        
        15
        +

      
        
        16
        +func FormatOutput(s string) string {

      
        
        17
        +	s = strings.TrimSuffix(s, "\n")

      
        
        18
        +	if s == "" {

      
        
        19
        +		return ""

      
        
        20
        +	}

      
        
        21
        +	return FormatOutputList(strings.Split(s, "\n"))

      
        19
        22
         }

      
        20
        23
         

      
        21
        24
         func FormatBulletListString(s string) string {