Compare commits
	
		
			6 Commits
		
	
	
		
			local
			...
			dc88d5a965
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| dc88d5a965 | |||
| cdc008e361 | |||
| 7549acb20c | |||
| aee1a1bf24 | |||
| 4ebcbe36e3 | |||
| acc231027b | 
@@ -1,4 +1,7 @@
 | 
				
			|||||||
A [fzf](https://github.com/junegunn/fzf)-based **calendar** application with CalDav support.
 | 
					A [fzf](https://github.com/junegunn/fzf)-based **calendar** application with CalDav support.
 | 
				
			||||||
 | 
					If you are interested in this, then you may also be interested in the
 | 
				
			||||||
 | 
					corresponding journaling application
 | 
				
			||||||
 | 
					[fzf-vjour](https://github.com/baumea/fzf-vjour).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Description and Use Case
 | 
					Description and Use Case
 | 
				
			||||||
------------------------
 | 
					------------------------
 | 
				
			||||||
@@ -81,10 +84,12 @@ Here is the list of available keybindings:
 | 
				
			|||||||
| `ctrl-alt-u` | week view | Go back one month |
 | 
					| `ctrl-alt-u` | week view | Go back one month |
 | 
				
			||||||
| `ctrl-alt-d` | week view | Go forth one month |
 | 
					| `ctrl-alt-d` | week view | Go forth one month |
 | 
				
			||||||
| `ctrl-s` | week view | Run the synchronization command |
 | 
					| `ctrl-s` | week view | Run the synchronization command |
 | 
				
			||||||
| `ctrl-l` | week view | Go to current week |
 | 
					| `ctrl-r` | week view | Go to current week |
 | 
				
			||||||
| `ctrl-g` | week view | Goto date |
 | 
					| `ctrl-g` | week view | Goto date |
 | 
				
			||||||
| `enter` | day view | Open selected  calendar entry in your favorite `$EDITOR` |
 | 
					| `enter` | day view | Open selected  calendar entry in your favorite `$EDITOR` |
 | 
				
			||||||
| `ctrl-n` | day view | Make a new entry |
 | 
					| `ctrl-n` | day view | Make a new entry |
 | 
				
			||||||
 | 
					| `ctrl-l` | day view | Move to next day |
 | 
				
			||||||
 | 
					| `ctrl-h` | day view | Move to previous day |
 | 
				
			||||||
| `esc`, `backspace` or `q` | day view | Go back to week view |
 | 
					| `esc`, `backspace` or `q` | day view | Go back to week view |
 | 
				
			||||||
| `ctrl-s` | day view | Run the synchronization command |
 | 
					| `ctrl-s` | day view | Run the synchronization command |
 | 
				
			||||||
| `ctrl-alt-d` | day view | Delete selected entry |
 | 
					| `ctrl-alt-d` | day view | Delete selected entry |
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ function slice(start, stop, desc) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
function hrline(hour) {
 | 
					function hrline(hour) {
 | 
				
			||||||
  hour = hour < 10 ? "0"hour : hour
 | 
					  hour = hour < 10 ? "0"hour : hour
 | 
				
			||||||
  print hour, "", "", "", FAINT hour ":00           ----------------------" OFF
 | 
					  print today, hour, "", "", "", FAINT hour ":00           ----------------------" OFF
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
function hrlines(start, stop, h,    starth, stoph, tmp, i) {
 | 
					function hrlines(start, stop, h,    starth, stoph, tmp, i) {
 | 
				
			||||||
  starth = substr(start, 1, 2)
 | 
					  starth = substr(start, 1, 2)
 | 
				
			||||||
@@ -39,11 +39,11 @@ BEGIN {
 | 
				
			|||||||
  OFF = "\033[m"
 | 
					  OFF = "\033[m"
 | 
				
			||||||
  OFS = "|"
 | 
					  OFS = "|"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
$1 == "00:00" && $2 == "00:00" { print $1, $3, $4, $5, allday($6);        next }
 | 
					$1 == "00:00" && $2 == "00:00" { print today, $1, $3, $4, $5, allday($6);        next }
 | 
				
			||||||
$1 == "00:00"                  { print $1, $3, $4, $5, endstoday($2, $6); next }
 | 
					$1 == "00:00"                  { print today, $1, $3, $4, $5, endstoday($2, $6); next }
 | 
				
			||||||
$1 ~ /^[0-9]{2}:[0-9]{2}$/     {
 | 
					$1 ~ /^[0-9]{2}:[0-9]{2}$/     {
 | 
				
			||||||
  daystart = hrlines($1, $2, daystart,    starth, stoph, tmp, i)
 | 
					  daystart = hrlines($1, $2, daystart,    starth, stoph, tmp, i)
 | 
				
			||||||
  print $1, $3, $4, $5, slice($1, $2, $6)
 | 
					  print today, $1, $3, $4, $5, slice($1, $2, $6)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
END {
 | 
					END {
 | 
				
			||||||
  hrlines(dayend":00", 0, daystart,    starth, stoph, tmp, i)
 | 
					  hrlines(dayend":00", 0, daystart,    starth, stoph, tmp, i)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,17 +1,27 @@
 | 
				
			|||||||
BEGIN { FS="|"; i=0; dlt = -259200; spw = 604800; }
 | 
					BEGIN { FS="|" }
 | 
				
			||||||
NR == FNR {
 | 
					NR == FNR {
 | 
				
			||||||
  i = i + 1;
 | 
					  i = i + 1;
 | 
				
			||||||
  from[i] = int(($1 + dlt)/ spw);
 | 
					  from_year[i] = $1
 | 
				
			||||||
 | 
					  from_week[i] = $2
 | 
				
			||||||
  getline;
 | 
					  getline;
 | 
				
			||||||
  to[i] = int(($1 + dlt) / spw);
 | 
					  to_year[i] = $1
 | 
				
			||||||
 | 
					  to_week[i] = $2
 | 
				
			||||||
  next
 | 
					  next
 | 
				
			||||||
} # Load start and end week numbers from first file
 | 
					} # Load start and end week numbers from first file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{ 
 | 
					{ 
 | 
				
			||||||
  if (from[FNR] > to[FNR])
 | 
					  year_i = from_year[FNR]
 | 
				
			||||||
    print "FNR", FNR, ":", from[FNR],"-",to[FNR], "    ",$0;
 | 
					  week_i = from_week[FNR]
 | 
				
			||||||
  for(i=from[FNR]; i<=to[FNR]; i++) {
 | 
					  year_end = to_year[FNR]
 | 
				
			||||||
    week[i] = week[i] " " $5
 | 
					  week_end = to_week[FNR]
 | 
				
			||||||
 | 
					  while(year_i <= year_end && (year_i < year_end || week_i <= week_end)) {
 | 
				
			||||||
 | 
					    label = year_i"|"week_i
 | 
				
			||||||
 | 
					    week[label] = week[label] " " $5
 | 
				
			||||||
 | 
					    week_i++
 | 
				
			||||||
 | 
					    if (week_i > 53) {
 | 
				
			||||||
 | 
					      week_ = 1
 | 
				
			||||||
 | 
					      year_i++
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
END { for (i in week) print i week[i]; }
 | 
					END { for (label in week) print label week[label]; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,10 +27,16 @@ BEGIN {
 | 
				
			|||||||
desc { desc = desc "\\n" $0; next; }
 | 
					desc { desc = desc "\\n" $0; next; }
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  from = substr($0, 1, 6) == "::: |>" ? substr($0, 8) : "";
 | 
					  from = substr($0, 1, 6) == "::: |>" ? substr($0, 8) : "";
 | 
				
			||||||
 | 
					  if (!from)
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
  getline
 | 
					  getline
 | 
				
			||||||
  to = substr($0, 1, 6) == "::: <|" ? substr($0, 8) : "";
 | 
					  to = substr($0, 1, 6) == "::: <|" ? substr($0, 8) : "";
 | 
				
			||||||
 | 
					  if (!to)
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
  getline
 | 
					  getline
 | 
				
			||||||
  summary = substr($0, 1, 2) == "# " ? substr($0, 3) : ""
 | 
					  summary = substr($0, 1, 2) == "# " ? substr($0, 3) : ""
 | 
				
			||||||
 | 
					  if (!summary)
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
  getline # This line should be empty
 | 
					  getline # This line should be empty
 | 
				
			||||||
  getline # First line of description
 | 
					  getline # First line of description
 | 
				
			||||||
  desc = $0;
 | 
					  desc = $0;
 | 
				
			||||||
@@ -41,7 +47,7 @@ END {
 | 
				
			|||||||
  # If nanoseconds are not 0, then we assume user enterd "tomorrow" or
 | 
					  # If nanoseconds are not 0, then we assume user enterd "tomorrow" or
 | 
				
			||||||
  # something the like, and we make this a date entry, as opposed to a
 | 
					  # something the like, and we make this a date entry, as opposed to a
 | 
				
			||||||
  # date-time entry.
 | 
					  # date-time entry.
 | 
				
			||||||
  from = from ? from : "now"
 | 
					  gsub("\"", "\\\"", from)
 | 
				
			||||||
  cmd = "date -d \"" from "\" +\"%N\"";
 | 
					  cmd = "date -d \"" from "\" +\"%N\"";
 | 
				
			||||||
  cmd | getline t
 | 
					  cmd | getline t
 | 
				
			||||||
  close(cmd)
 | 
					  close(cmd)
 | 
				
			||||||
@@ -53,10 +59,13 @@ END {
 | 
				
			|||||||
    from_type = "DATE"
 | 
					    from_type = "DATE"
 | 
				
			||||||
    cmd = "date -d \"" from "\" +\"%Y%m%d\"";
 | 
					    cmd = "date -d \"" from "\" +\"%Y%m%d\"";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  cmd | getline from
 | 
					  suc = cmd | getline from
 | 
				
			||||||
  close(cmd)
 | 
					  close(cmd)
 | 
				
			||||||
 | 
					  if (suc != 1) {
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  #
 | 
					  #
 | 
				
			||||||
  to = to ? to : "now"
 | 
					  gsub("\"", "\\\"", to)
 | 
				
			||||||
  cmd = "date -d \"" to "\" +\"%N\"";
 | 
					  cmd = "date -d \"" to "\" +\"%N\"";
 | 
				
			||||||
  cmd | getline t
 | 
					  cmd | getline t
 | 
				
			||||||
  close(cmd)
 | 
					  close(cmd)
 | 
				
			||||||
@@ -68,8 +77,11 @@ END {
 | 
				
			|||||||
    to_type = "DATE"
 | 
					    to_type = "DATE"
 | 
				
			||||||
    cmd = "date -d \"" to "\" +\"%Y%m%d\"";
 | 
					    cmd = "date -d \"" to "\" +\"%Y%m%d\"";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  cmd | getline to
 | 
					  suc = cmd | getline to
 | 
				
			||||||
  close(cmd)
 | 
					  close(cmd)
 | 
				
			||||||
 | 
					  if (suc != 1) {
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  escape(summary);
 | 
					  escape(summary);
 | 
				
			||||||
  escape(desc);
 | 
					  escape(desc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@ ENDFILE {
 | 
				
			|||||||
    # If nanoseconds are not 0, then we assume user enterd "tomorrow" or
 | 
					    # If nanoseconds are not 0, then we assume user enterd "tomorrow" or
 | 
				
			||||||
    # something the like, and we make this a date entry, as opposed to a
 | 
					    # something the like, and we make this a date entry, as opposed to a
 | 
				
			||||||
    # date-time entry.
 | 
					    # date-time entry.
 | 
				
			||||||
    from = from ? from : "now"
 | 
					    gsub("\"", "\\\"", from)
 | 
				
			||||||
    cmd = "date -d \"" from "\" +\"%N\"";
 | 
					    cmd = "date -d \"" from "\" +\"%N\"";
 | 
				
			||||||
    cmd | getline t
 | 
					    cmd | getline t
 | 
				
			||||||
    close(cmd)
 | 
					    close(cmd)
 | 
				
			||||||
@@ -48,10 +48,13 @@ ENDFILE {
 | 
				
			|||||||
      from_type = "DATE"
 | 
					      from_type = "DATE"
 | 
				
			||||||
      cmd = "date -d \"" from "\" +\"%Y%m%d\"";
 | 
					      cmd = "date -d \"" from "\" +\"%Y%m%d\"";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    cmd | getline from
 | 
					    suc = cmd | getline from
 | 
				
			||||||
    close(cmd)
 | 
					    close(cmd)
 | 
				
			||||||
 | 
					    if (suc != 1) {
 | 
				
			||||||
 | 
					      exit 1
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    to = to ? to : "now"
 | 
					    gsub("\"", "\\\"", to)
 | 
				
			||||||
    cmd = "date -d \"" to "\" +\"%N\"";
 | 
					    cmd = "date -d \"" to "\" +\"%N\"";
 | 
				
			||||||
    cmd | getline t
 | 
					    cmd | getline t
 | 
				
			||||||
    close(cmd)
 | 
					    close(cmd)
 | 
				
			||||||
@@ -63,20 +66,29 @@ ENDFILE {
 | 
				
			|||||||
      to_type = "DATE"
 | 
					      to_type = "DATE"
 | 
				
			||||||
      cmd = "date -d \"" to "\" +\"%Y%m%d\"";
 | 
					      cmd = "date -d \"" to "\" +\"%Y%m%d\"";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    cmd | getline to
 | 
					    suc = cmd | getline to
 | 
				
			||||||
    close(cmd)
 | 
					    close(cmd)
 | 
				
			||||||
 | 
					    if (suc != 1) {
 | 
				
			||||||
 | 
					      exit 1
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    escape(summary);
 | 
				
			||||||
 | 
					    escape(desc);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  escape(summary);
 | 
					 | 
				
			||||||
  escape(desc);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NR == FNR && desc { desc = desc "\\n" $0; next; }
 | 
					NR == FNR && desc { desc = desc "\\n" $0; next; }
 | 
				
			||||||
NR == FNR {
 | 
					NR == FNR {
 | 
				
			||||||
  from = substr($0, 1, 6) == "::: |>" ? substr($0, 8) : "";
 | 
					  from = substr($0, 1, 6) == "::: |>" ? substr($0, 8) : "";
 | 
				
			||||||
 | 
					  if (!from)
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
  getline
 | 
					  getline
 | 
				
			||||||
  to = substr($0, 1, 6) == "::: <|" ? substr($0, 8) : "";
 | 
					  to = substr($0, 1, 6) == "::: <|" ? substr($0, 8) : "";
 | 
				
			||||||
 | 
					  if (!to)
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
  getline
 | 
					  getline
 | 
				
			||||||
  summary = substr($0, 1, 2) == "# " ? substr($0, 3) : ""
 | 
					  summary = substr($0, 1, 2) == "# " ? substr($0, 3) : ""
 | 
				
			||||||
 | 
					  if (!summary)
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
  getline # This line should be empty
 | 
					  getline # This line should be empty
 | 
				
			||||||
  getline # First line of description
 | 
					  getline # First line of description
 | 
				
			||||||
  desc = $0;
 | 
					  desc = $0;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										88
									
								
								src/main.sh
									
									
									
									
									
								
							
							
						
						
									
										88
									
								
								src/main.sh
									
									
									
									
									
								
							@@ -144,15 +144,14 @@ __load_approx_data() {
 | 
				
			|||||||
__load_weeks() {
 | 
					__load_weeks() {
 | 
				
			||||||
  dates=$(awk -F'|' '{ print $2; print $3 }' "$APPROX_DATA_FILE")
 | 
					  dates=$(awk -F'|' '{ print $2; print $3 }' "$APPROX_DATA_FILE")
 | 
				
			||||||
  file_dates=$(mktemp)
 | 
					  file_dates=$(mktemp)
 | 
				
			||||||
  echo "$dates" | date --file="/dev/stdin" +"%s" >"$file_dates"
 | 
					  echo "$dates" | date --file="/dev/stdin" +"%G|%V" >"$file_dates"
 | 
				
			||||||
  awk "$AWK_MERGE" "$file_dates" "$APPROX_DATA_FILE"
 | 
					  awk "$AWK_MERGE" "$file_dates" "$APPROX_DATA_FILE"
 | 
				
			||||||
  rm "$file_dates"
 | 
					  rm "$file_dates"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__show_day() {
 | 
					__show_day() {
 | 
				
			||||||
  weeknr=$(date -d "$DISPLAY_DATE" +"%s")
 | 
					  weeknr=$(date -d "$DISPLAY_DATE" +"%G.%V")
 | 
				
			||||||
  weeknr=$(((weeknr - 259200) / 604800)) # shift, because epoch origin is a Thursday
 | 
					  files=$(grep "^$weeknr\ " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-)
 | 
				
			||||||
  files=$(grep "^$weeknr " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-)
 | 
					 | 
				
			||||||
  # Find relevant files in list of week files
 | 
					  # Find relevant files in list of week files
 | 
				
			||||||
  sef=$({
 | 
					  sef=$({
 | 
				
			||||||
    set -- $files
 | 
					    set -- $files
 | 
				
			||||||
@@ -163,8 +162,8 @@ __show_day() {
 | 
				
			|||||||
        "$AWK_PARSE" "$file"
 | 
					        "$AWK_PARSE" "$file"
 | 
				
			||||||
    done
 | 
					    done
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					  today=$(date -d "$DISPLAY_DATE" +"%D")
 | 
				
			||||||
  if [ -n "$sef" ]; then
 | 
					  if [ -n "$sef" ]; then
 | 
				
			||||||
    today=$(date -d "$DISPLAY_DATE" +"%D")
 | 
					 | 
				
			||||||
    sef=$(echo "$sef" | while IFS= read -r line; do
 | 
					    sef=$(echo "$sef" | while IFS= read -r line; do
 | 
				
			||||||
      set -- $line
 | 
					      set -- $line
 | 
				
			||||||
      starttime="$1"
 | 
					      starttime="$1"
 | 
				
			||||||
@@ -195,13 +194,12 @@ __show_day() {
 | 
				
			|||||||
      echo "$s|$e|$starttime|$endtime|$fpath|$description"
 | 
					      echo "$s|$e|$starttime|$endtime|$fpath|$description"
 | 
				
			||||||
    done)
 | 
					    done)
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  echo "$sef" | sort -n | awk -v daystart="$DAY_START" -v dayend="$DAY_END" "$AWK_DAYVIEW"
 | 
					  echo "$sef" | sort -n | awk -v today="$today" -v daystart="$DAY_START" -v dayend="$DAY_END" "$AWK_DAYVIEW"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__list() {
 | 
					__list() {
 | 
				
			||||||
  weeknr=$(date -d "$DISPLAY_DATE" +"%s")
 | 
					  weeknr=$(date -d "$DISPLAY_DATE" +"%G.%V")
 | 
				
			||||||
  weeknr=$(((weeknr - 259200) / 604800)) # shift, because epoch origin is a Thursday
 | 
					  files=$(grep "^$weeknr\ " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-)
 | 
				
			||||||
  files=$(grep "^$weeknr " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-)
 | 
					 | 
				
			||||||
  dayofweek=$(date -d "$DISPLAY_DATE" +"%u")
 | 
					  dayofweek=$(date -d "$DISPLAY_DATE" +"%u")
 | 
				
			||||||
  delta=$((1 - dayofweek))
 | 
					  delta=$((1 - dayofweek))
 | 
				
			||||||
  startofweek=$(date -d "$DISPLAY_DATE -$delta days" +"%D")
 | 
					  startofweek=$(date -d "$DISPLAY_DATE -$delta days" +"%D")
 | 
				
			||||||
@@ -298,19 +296,24 @@ __edit() {
 | 
				
			|||||||
  # Update only if changes are detected
 | 
					  # Update only if changes are detected
 | 
				
			||||||
  if [ "$checksum" != "$(cksum "$filetmp")" ]; then
 | 
					  if [ "$checksum" != "$(cksum "$filetmp")" ]; then
 | 
				
			||||||
    filenew="$filetmp.ics"
 | 
					    filenew="$filetmp.ics"
 | 
				
			||||||
    awk "$AWK_UPDATE" "$filetmp" "$fpath" >"$filenew"
 | 
					    if awk "$AWK_UPDATE" "$filetmp" "$fpath" >"$filenew"; then
 | 
				
			||||||
    mv "$filenew" "$fpath"
 | 
					      mv "$filenew" "$fpath"
 | 
				
			||||||
    __refresh_data
 | 
					      __refresh_data
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      rm -f "$filenew"
 | 
				
			||||||
 | 
					      err "Failed to edit entry. Press <enter> to continue."
 | 
				
			||||||
 | 
					      read -r tmp
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  rm "$filetmp"
 | 
					  rm "$filetmp"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__refresh_data() {
 | 
					__refresh_data() {
 | 
				
			||||||
  if [ -n "${APPROX_DATA_FILE:-}" ]; then
 | 
					  if [ -n "${APPROX_DATA_FILE:-}" ]; then
 | 
				
			||||||
    rm "$APPROX_DATA_FILE"
 | 
					    rm -f "$APPROX_DATA_FILE"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  if [ -n "${WEEKLY_DATA_FILE:-}" ]; then
 | 
					  if [ -n "${WEEKLY_DATA_FILE:-}" ]; then
 | 
				
			||||||
    rm "$WEEKLY_DATA_FILE"
 | 
					    rm -f "$WEEKLY_DATA_FILE"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  APPROX_DATA_FILE=$(mktemp)
 | 
					  APPROX_DATA_FILE=$(mktemp)
 | 
				
			||||||
  __load_approx_data >"$APPROX_DATA_FILE"
 | 
					  __load_approx_data >"$APPROX_DATA_FILE"
 | 
				
			||||||
@@ -380,11 +383,18 @@ if [ "${1:-}" = "--new" ]; then
 | 
				
			|||||||
  # Update only if changes are detected
 | 
					  # Update only if changes are detected
 | 
				
			||||||
  if [ "$checksum" != "$(cksum "$filetmp")" ]; then
 | 
					  if [ "$checksum" != "$(cksum "$filetmp")" ]; then
 | 
				
			||||||
    filenew="$filetmp.ics"
 | 
					    filenew="$filetmp.ics"
 | 
				
			||||||
    awk -v uid="$uuid" "$AWK_NEW" "$filetmp" >"$filenew"
 | 
					    if awk -v uid="$uuid" "$AWK_NEW" "$filetmp" >"$filenew"; then
 | 
				
			||||||
    mv "$filenew" "$fpath"
 | 
					      mv "$filenew" "$fpath"
 | 
				
			||||||
    __refresh_data
 | 
					      __refresh_data
 | 
				
			||||||
 | 
					      start=$(awk -v field="DTSTART" "$AWK_GET" "$fpath" | grep -o '[0-9]\{8\}')
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      rm -f "$filenew"
 | 
				
			||||||
 | 
					      err "Failed to create new entry. Press <enter> to continue."
 | 
				
			||||||
 | 
					      read -r tmp
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  rm "$filetmp"
 | 
					  rm "$filetmp"
 | 
				
			||||||
 | 
					  set -- "--day" "$start"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -z "${APPROX_DATA_FILE:-}" ]; then
 | 
					if [ -z "${APPROX_DATA_FILE:-}" ]; then
 | 
				
			||||||
@@ -403,23 +413,27 @@ if [ "${1:-}" = "--day" ]; then
 | 
				
			|||||||
        --no-input \
 | 
					        --no-input \
 | 
				
			||||||
        --margin='20%,5%' \
 | 
					        --margin='20%,5%' \
 | 
				
			||||||
        --border='double' \
 | 
					        --border='double' \
 | 
				
			||||||
        --border-label="🗓️ $(date -d "$DISPLAY_DATE" +"%A %e %B %Y")" \
 | 
					 | 
				
			||||||
        --color=label:bold:green \
 | 
					        --color=label:bold:green \
 | 
				
			||||||
        --border-label-pos=3 \
 | 
					        --border-label-pos=3 \
 | 
				
			||||||
        --cycle \
 | 
					        --cycle \
 | 
				
			||||||
        --delimiter='|' \
 | 
					        --delimiter='|' \
 | 
				
			||||||
        --with-nth='{5}' \
 | 
					        --with-nth='{6}' \
 | 
				
			||||||
        --accept-nth='1,2,3,4' \
 | 
					        --accept-nth='2,3,4,5' \
 | 
				
			||||||
        --preview="$0 --preview {}" \
 | 
					        --preview="$0 --preview {}" \
 | 
				
			||||||
        --expect="ctrl-n,esc,backspace,q" \
 | 
					        --expect="ctrl-n,esc,backspace,q" \
 | 
				
			||||||
 | 
					        --bind='load:transform(echo change-border-label:🗓️ $(date -d {1} +"%A %e %B %Y"))+transform(echo {} | grep \|\| || echo show-preview)' \
 | 
				
			||||||
        --bind='start:hide-preview' \
 | 
					        --bind='start:hide-preview' \
 | 
				
			||||||
 | 
					        --bind="ctrl-r:reload:$0 --show-day {1}" \
 | 
				
			||||||
        --bind='ctrl-j:down+hide-preview+transform:echo {} | grep \|\| || echo show-preview' \
 | 
					        --bind='ctrl-j:down+hide-preview+transform:echo {} | grep \|\| || echo show-preview' \
 | 
				
			||||||
        --bind='ctrl-k:up+hide-preview+transform:echo {} | grep \|\| || echo show-preview' \
 | 
					        --bind='ctrl-k:up+hide-preview+transform:echo {} | grep \|\| || echo show-preview' \
 | 
				
			||||||
 | 
					        --bind="ctrl-l:hide-preview+reload:$0 --show-day {1} '+1 day'" \
 | 
				
			||||||
 | 
					        --bind="ctrl-h:hide-preview+reload:$0 --show-day {1} '-1 day'" \
 | 
				
			||||||
        --bind="ctrl-s:execute($SYNC_CMD ; printf 'Press <enter> to continue.'; read -r tmp)" \
 | 
					        --bind="ctrl-s:execute($SYNC_CMD ; printf 'Press <enter> to continue.'; read -r tmp)" \
 | 
				
			||||||
        --bind="ctrl-alt-d:become($0 --delete {})" \
 | 
					        --bind="ctrl-alt-d:become($0 --delete {})" \
 | 
				
			||||||
        --bind="j:preview-down" \
 | 
					        --bind="j:preview-down" \
 | 
				
			||||||
        --bind="k:preview-down" \
 | 
					        --bind="k:preview-down" \
 | 
				
			||||||
        --bind="w:toggle-preview-wrap"
 | 
					        --bind="w:toggle-preview-wrap"
 | 
				
			||||||
 | 
					    #--bind="ctrl-u:unbind(load)+reload:$0 --list {2} '-1 week'" \
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
  key=$(echo "$selection" | head -1)
 | 
					  key=$(echo "$selection" | head -1)
 | 
				
			||||||
  line=$(echo "$selection" | tail -1)
 | 
					  line=$(echo "$selection" | tail -1)
 | 
				
			||||||
@@ -446,10 +460,10 @@ if [ "${1:-}" = "--date" ]; then
 | 
				
			|||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ "${1:-}" = "--preview" ]; then
 | 
					if [ "${1:-}" = "--preview" ]; then
 | 
				
			||||||
  hour=$(echo "$2" | cut -d '|' -f 1)
 | 
					  hour=$(echo "$2" | cut -d '|' -f 2)
 | 
				
			||||||
  start=$(echo "$2" | cut -d '|' -f 2)
 | 
					  start=$(echo "$2" | cut -d '|' -f 3)
 | 
				
			||||||
  end=$(echo "$2" | cut -d '|' -f 3)
 | 
					  end=$(echo "$2" | cut -d '|' -f 4)
 | 
				
			||||||
  fpath=$(echo "$2" | cut -d '|' -f 4 | sed "s/ /|/g")
 | 
					  fpath=$(echo "$2" | cut -d '|' -f 5 | sed "s/ /|/g")
 | 
				
			||||||
  if [ -n "$hour" ] && [ -n "$fpath" ]; then
 | 
					  if [ -n "$hour" ] && [ -n "$fpath" ]; then
 | 
				
			||||||
    fpath="$ROOT/$fpath"
 | 
					    fpath="$ROOT/$fpath"
 | 
				
			||||||
    start=$(__canonical_datetime "$start" "%a ")
 | 
					    start=$(__canonical_datetime "$start" "%a ")
 | 
				
			||||||
@@ -463,8 +477,8 @@ if [ "${1:-}" = "--preview" ]; then
 | 
				
			|||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
month_previous() {
 | 
					month_previous() {
 | 
				
			||||||
  month="$1"
 | 
					  month=$(echo "$1" | sed 's/^0//')
 | 
				
			||||||
  year="$2"
 | 
					  year=$(echo "$2" | sed 's/^0//')
 | 
				
			||||||
  if [ "$month" -eq 1 ]; then
 | 
					  if [ "$month" -eq 1 ]; then
 | 
				
			||||||
    month=12
 | 
					    month=12
 | 
				
			||||||
    year=$((year - 1))
 | 
					    year=$((year - 1))
 | 
				
			||||||
@@ -475,8 +489,8 @@ month_previous() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
month_next() {
 | 
					month_next() {
 | 
				
			||||||
  month="$1"
 | 
					  month=$(echo "$1" | sed 's/^0//')
 | 
				
			||||||
  year="$2"
 | 
					  year=$(echo "$2" | sed 's/^0//')
 | 
				
			||||||
  if [ "$month" -eq 12 ]; then
 | 
					  if [ "$month" -eq 12 ]; then
 | 
				
			||||||
    month=1
 | 
					    month=1
 | 
				
			||||||
    year=$((year + 1))
 | 
					    year=$((year + 1))
 | 
				
			||||||
@@ -548,7 +562,7 @@ if [ "${1:-}" = "--preview-week" ]; then
 | 
				
			|||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ "${1:-}" = "--delete" ]; then
 | 
					if [ "${1:-}" = "--delete" ]; then
 | 
				
			||||||
  fpath=$(echo "$2" | cut -d '|' -f 4 | sed "s/ /|/g")
 | 
					  fpath=$(echo "$2" | cut -d '|' -f 5 | sed "s/ /|/g")
 | 
				
			||||||
  if [ -n "$fpath" ]; then
 | 
					  if [ -n "$fpath" ]; then
 | 
				
			||||||
    fpath="$ROOT/$fpath"
 | 
					    fpath="$ROOT/$fpath"
 | 
				
			||||||
    summary=$(awk -v field="SUMMARY" "$AWK_GET" "$fpath")
 | 
					    summary=$(awk -v field="SUMMARY" "$AWK_GET" "$fpath")
 | 
				
			||||||
@@ -582,6 +596,14 @@ DISPLAY_DATE=${DISPLAY_DATE:-today}
 | 
				
			|||||||
DISPLAY_DATE=$(date -d "$DISPLAY_DATE" +"%D")
 | 
					DISPLAY_DATE=$(date -d "$DISPLAY_DATE" +"%D")
 | 
				
			||||||
DISPLAY_POS=$((8 - $(date -d "$DISPLAY_DATE" +"%u")))
 | 
					DISPLAY_POS=$((8 - $(date -d "$DISPLAY_DATE" +"%u")))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "${1:-}" = "--show-day" ]; then
 | 
				
			||||||
 | 
					  shift
 | 
				
			||||||
 | 
					  DISPLAY_DATE=${*:-today}
 | 
				
			||||||
 | 
					  DISPLAY_POS=$((8 - $(date -d "$DISPLAY_DATE" +"%u")))
 | 
				
			||||||
 | 
					  __show_day
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ "${1:-}" = "--list" ]; then
 | 
					if [ "${1:-}" = "--list" ]; then
 | 
				
			||||||
  shift
 | 
					  shift
 | 
				
			||||||
  DISPLAY_DATE=${*:-today}
 | 
					  DISPLAY_DATE=${*:-today}
 | 
				
			||||||
@@ -608,13 +630,13 @@ selection=$(
 | 
				
			|||||||
      --preview-window=up,7,border-bottom \
 | 
					      --preview-window=up,7,border-bottom \
 | 
				
			||||||
      --preview="$0 --preview-week {}" \
 | 
					      --preview="$0 --preview-week {}" \
 | 
				
			||||||
      --expect="ctrl-n" \
 | 
					      --expect="ctrl-n" \
 | 
				
			||||||
      --bind="ctrl-j:transform:[ \$FZF_POS -le 1 ] &&
 | 
					      --bind="ctrl-j:transform:([ {1} = \"+\" ] && [ \$FZF_POS -le 1 ]) &&
 | 
				
			||||||
      echo unbind\(load\)+reload:$0 --list {2} '+1 day'||
 | 
					      echo unbind\(load\)+reload:$0 --list {2} '+1 day'||
 | 
				
			||||||
      echo down" \
 | 
					      echo down" \
 | 
				
			||||||
      --bind="ctrl-k:transform:[ \$FZF_POS -ge 7 ] &&
 | 
					      --bind="ctrl-k:transform:([ {1} = \"+\" ] && [ \$FZF_POS -ge 7 ]) &&
 | 
				
			||||||
      echo unbind\(load\)+reload:$0 --list {2} '-1 day'||
 | 
					      echo unbind\(load\)+reload:$0 --list {2} '-1 day'||
 | 
				
			||||||
      echo up" \
 | 
					      echo up" \
 | 
				
			||||||
      --bind="change:reload($0 --all)+hide-preview" \
 | 
					      --bind="change:unbind(load)+reload($0 --all)+hide-preview" \
 | 
				
			||||||
      --bind="backward-eof:rebind(load)+reload($0 --list)+show-preview" \
 | 
					      --bind="backward-eof:rebind(load)+reload($0 --list)+show-preview" \
 | 
				
			||||||
      --bind="load:pos($DISPLAY_POS)" \
 | 
					      --bind="load:pos($DISPLAY_POS)" \
 | 
				
			||||||
      --bind="ctrl-u:unbind(load)+reload:$0 --list {2} '-1 week'" \
 | 
					      --bind="ctrl-u:unbind(load)+reload:$0 --list {2} '-1 week'" \
 | 
				
			||||||
@@ -623,7 +645,7 @@ selection=$(
 | 
				
			|||||||
      --bind="ctrl-alt-d:unbind(load)+reload:$0 --list {2} '+1 month'" \
 | 
					      --bind="ctrl-alt-d:unbind(load)+reload:$0 --list {2} '+1 month'" \
 | 
				
			||||||
      --bind="ctrl-s:execute($SYNC_CMD ; printf 'Press <enter> to continue.'; read -r tmp)" \
 | 
					      --bind="ctrl-s:execute($SYNC_CMD ; printf 'Press <enter> to continue.'; read -r tmp)" \
 | 
				
			||||||
      --bind="ctrl-g:become($0 --goto)" \
 | 
					      --bind="ctrl-g:become($0 --goto)" \
 | 
				
			||||||
      --bind="ctrl-l:rebind(load)+reload:$0 --list"
 | 
					      --bind="ctrl-r:rebind(load)+reload:$0 --list"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
key=$(echo "$selection" | head -1)
 | 
					key=$(echo "$selection" | head -1)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user