about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Doc/Zsh/calsys.yo4
-rw-r--r--Functions/Calendar/calendar27
3 files changed, 25 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 245791863..c91ceb9bf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2008-12-10  Peter Stephenson  <pws@csr.com>
 
+	* 26121: Doc/Zsh/calsys.yo, Functions/Calendar/calendar: add
+	-B <lines> option to calendar.
+
 	* users/13566: Etc/FAQ.yo: note problem with unsetting elements
 	of regular arrays.
 
diff --git a/Doc/Zsh/calsys.yo b/Doc/Zsh/calsys.yo
index 934746f08..05a644f2e 100644
--- a/Doc/Zsh/calsys.yo
+++ b/Doc/Zsh/calsys.yo
@@ -357,6 +357,10 @@ item(tt(-b))(
 Brief:  don't display continuation lines (i.e. indented lines following
 the line with the date/time), just the first line.
 )
+item(tt(-B) var(lines))(
+Brief: display at most the first var(lines) lines of the calendar
+entry.  `tt(-B 1)' is equivalent to `tt(-b)'.
+)
 item(tt(-C) var(calfile))(
 Explicitly specify a calendar file instead of the value of
 the tt(calendar-file) style or the the default tt(~/calendar).
diff --git a/Functions/Calendar/calendar b/Functions/Calendar/calendar
index 246cf2383..1338aa9f8 100644
--- a/Functions/Calendar/calendar
+++ b/Functions/Calendar/calendar
@@ -60,7 +60,7 @@ while [[ ${argv[opti+1]} = -* ]]; do
       ########################
       # Options with arguments
       ########################
-      ([CnS])
+      ([BCnS])
       if [[ -n $optrest ]]; then
 	optarg=$optrest
 	optrest=
@@ -72,6 +72,15 @@ while [[ ${argv[opti+1]} = -* ]]; do
 	return 1
       fi
       case $opt in
+	(B)
+	# Brief, with number of lines to show.
+	brief=$optarg
+	if (( brief <= 0 )); then
+	  print -r "$0: option -$opt requires a positive integer." >&2
+	  return 1
+	fi
+	;;
+
 	(C)
 	# Pick the calendar file, overriding style and default.
 	calendar=$optarg
@@ -289,17 +298,17 @@ fi
     fi
     (( shown = 0 ))
     if (( brief )); then
-      showline=${line%%$'\n'*}
+      showline=${(F)${${(f)line}[1,brief]}}
     else
       showline=$line
-      match=()
-      # Strip continuation lines starting " #".
-      while [[ $showline = (#b)(*$'\n')[[:space:]]##\#[^$'\n']##(|$'\n'(*)) ]]; do
-	showline="$match[1]$match[3]"
-      done
-      # Strip trailing empty lines
-      showline=${showline%%[[:space:]]#}
     fi
+    match=()
+    # Strip continuation lines starting " #".
+    while [[ $showline = (#b)(*$'\n')[[:space:]]##\#[^$'\n']##(|$'\n'(*)) ]]; do
+	  showline="$match[1]$match[3]"
+    done
+    # Strip trailing empty lines
+    showline=${showline%%[[:space:]]#}
     if (( showall || (t >= start && (remaining || t <= stop || icount < showcount)) ))
     then
       $showprog $start $stop "$showline"