Create a new zettel with a given title

Signed-off-by: Oliver Davies <oliver@oliverdavies.uk>
This commit is contained in:
Oliver Davies 2025-09-26 09:33:16 +01:00
parent 59c4d132b2
commit b2f7f7af7f
3 changed files with 78 additions and 0 deletions

32
cmd/create.go Normal file
View file

@ -0,0 +1,32 @@
package cmd
import (
"strings"
"github.com/spf13/cobra"
"code.oliverdavies.uk/opdavies/cmd-zet/internal/lib"
)
var createCmd = &cobra.Command{
Use: "create",
Aliases: []string{"e"},
Short: "A brief description of your command",
Long: `A longer description that spans multiple lines and likely contains examples
and usage of using your command. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
Run: func(cmd *cobra.Command, args []string) {
title := ""
if len(args) > 0 {
title = strings.Join(args, " ")
}
lib.CreateZet(title)
// TODO: Edit the file
// TODO: Commit the changes
},
}

View file

@ -31,6 +31,7 @@ func Execute() {
} }
func init() { func init() {
rootCmd.AddCommand(createCmd)
rootCmd.AddCommand(editCmd) rootCmd.AddCommand(editCmd)
rootCmd.AddCommand(findCmd) rootCmd.AddCommand(findCmd)
rootCmd.AddCommand(titlesCmd) rootCmd.AddCommand(titlesCmd)

View file

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"log" "log"
"os" "os"
"os/exec"
"path" "path"
"regexp" "regexp"
"sort" "sort"
@ -12,6 +13,32 @@ import (
"strings" "strings"
) )
func CreateZet(title string) {
zid := newZid()
fmt.Println(title, zid)
path := path.Join(GetZetDir(), strconv.Itoa(zid))
os.Mkdir(path, 0750)
filePath := fmt.Sprintf("%s/index.adoc", path)
file, err := os.Create(filePath)
if err != nil {
log.Fatal(err)
}
defer file.Close()
_, err = fmt.Fprintf(file, "= %s", title)
if err != nil {
log.Fatal(err)
}
}
func EditZet(id int) { func EditZet(id int) {
zetPath := path.Join(GetZetDir(), strconv.Itoa(id), "index.adoc") zetPath := path.Join(GetZetDir(), strconv.Itoa(id), "index.adoc")
@ -139,6 +166,24 @@ func getTitleFromFile(filePath string) string {
return "" return ""
} }
func newZid() int {
cmd := exec.Command("ls", GetZetDir())
output, _ := cmd.CombinedOutput()
zets := strings.Split(string(output), "\n")
var zetCount int
for _, zet := range zets {
num, err := strconv.Atoi(zet)
if err == nil && num > zetCount {
zetCount = num
}
}
return zetCount + 1
}
func onSave(id int) { func onSave(id int) {
title := getTitle(id) title := getTitle(id)