3 Commits
v3 ... main

Author SHA1 Message Date
5e5999676d feat: add --indent flag to control line indentation in remind output
- Introduces an 'indent' integer flag to the CLI for specifying the
  number of spaces to indent lines in the remind output.
- Updates Task.ToRemind to accept an indent parameter and apply heading
  spaces accordingly.
- Adjusts main.go to pass the indent value from the flag to ToRemind.
2026-01-15 00:13:24 +01:00
1099f4ab97 Revert "fix(parser): exclude "url" metadata from Remind output (since version 06.02.02 of remind)"
This reverts commit ec9df87d68.
2026-01-14 23:30:45 +01:00
ec9df87d68 fix(parser): exclude "url" metadata from Remind output (since version 06.02.02 of remind)
Previously, only "due" metadata was excluded when generating Remind
output. This change also skips "url" metadata, preventing it from
appearing in the Remind string.

Version 06.02.02 of remind supports "url" metadata.
2026-01-11 21:54:39 +01:00
2 changed files with 8 additions and 4 deletions

View File

@@ -26,7 +26,7 @@ type Task struct {
Metadata map[string][]string `json:"metadata"` Metadata map[string][]string `json:"metadata"`
} }
func (t Task) ToRemind() string { func (t Task) ToRemind(indent int) string {
var sb strings.Builder var sb strings.Builder
sb.WriteString("REM TODO ") sb.WriteString("REM TODO ")
if t.DueDate == nil { if t.DueDate == nil {
@@ -87,6 +87,8 @@ func (t Task) ToRemind() string {
sb.WriteString(" (%b)") sb.WriteString(" (%b)")
} }
headingSpaces := strings.Repeat(" ", indent)
if len(t.Metadata) > 0 { if len(t.Metadata) > 0 {
for k, values := range t.Metadata { for k, values := range t.Metadata {
if k == "due" { if k == "due" {
@@ -95,11 +97,11 @@ func (t Task) ToRemind() string {
// uppercase first letter for Remind // uppercase first letter for Remind
kUpper := strings.ToUpper(k[:1]) + k[1:] kUpper := strings.ToUpper(k[:1]) + k[1:]
if len(values) == 1 { if len(values) == 1 {
sb.WriteString(fmt.Sprintf("%%_%s: %%<%s>", kUpper, kUpper)) sb.WriteString(fmt.Sprintf("%%_%s%s: %%<%s>", headingSpaces, kUpper, kUpper))
} else { } else {
for i := range values { for i := range values {
kNumbered := fmt.Sprintf("%s%d", kUpper, i+1) kNumbered := fmt.Sprintf("%s%d", kUpper, i+1)
sb.WriteString(fmt.Sprintf("%%_%s: %%<%s>", kNumbered, kNumbered)) sb.WriteString(fmt.Sprintf("%%_%s%s: %%<%s>", headingSpaces, kNumbered, kNumbered))
} }
} }
} }

View File

@@ -14,6 +14,7 @@ var (
inputFile string inputFile string
outputFile string outputFile string
debug bool debug bool
indent int
version = "v3.0.0" version = "v3.0.0"
) )
@@ -59,7 +60,7 @@ func main() {
} }
for _, t := range tasks { for _, t := range tasks {
rem := t.ToRemind() rem := t.ToRemind(indent)
if rem == "" { if rem == "" {
continue continue
} }
@@ -71,6 +72,7 @@ func main() {
rootCmd.Flags().StringVarP(&inputFile, "input", "i", "", "Input file (default: stdin)") rootCmd.Flags().StringVarP(&inputFile, "input", "i", "", "Input file (default: stdin)")
rootCmd.Flags().StringVarP(&outputFile, "output", "o", "", "Output file (default: stdout)") rootCmd.Flags().StringVarP(&outputFile, "output", "o", "", "Output file (default: stdout)")
rootCmd.Flags().BoolVar(&debug, "debug", false, "Print intermediate JSON to stderr") rootCmd.Flags().BoolVar(&debug, "debug", false, "Print intermediate JSON to stderr")
rootCmd.Flags().IntVar(&indent, "indent", 0, "Number of spaces to indent lines (from second line onward)")
rootCmd.Version = version rootCmd.Version = version
rootCmd.Flags().BoolP("version", "v", false, "Show version and exit") rootCmd.Flags().BoolP("version", "v", false, "Show version and exit")
rootCmd.SetVersionTemplate(fmt.Sprintf("todotxt2remind version %s\n", version)) rootCmd.SetVersionTemplate(fmt.Sprintf("todotxt2remind version %s\n", version))