这是命令提醒,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
提醒 - 一个复杂的提醒服务
概要
提醒 [选项] 文件名 [日期[*代表[次]
商品描述
提醒 读取提供的 文件名 并执行其中找到的命令。 命令
用于发出提醒和警报。 每个提醒或警报可以包含一条消息
发送到标准输出,或要执行的程序。
If 文件名 被指定为单个破折号“-”,然后 提醒 从标准中获取输入
输入。 这也隐含地启用 -o 选项,如下所述。
If 文件名 恰好是一个目录而不是一个普通文件,那么 提醒 阅读所有
该目录中与模式“*.rem”匹配的文件。 文件被排序读取
命令; 排序顺序可能取决于您的语言环境,但应与使用的排序顺序匹配
扩展“*.rem”的外壳。
提醒 从头到尾读取其文件,或直到遇到
唯一内容为“__EOF__”(不带引号)的行。__EOF__ 之后的任何内容
标记被完全忽略。
配置
提醒 有很多选择。 如果您是该程序的新手,请暂时忽略它们并跳过
到“提醒文件”部分。
-n - -n 选择原因 提醒 打印 下页 每个提醒在一个
简单的日历格式。 您可以通过管道输出按日期排序
分类(1).
-j[n] 运行 提醒 在“清除”模式下摆脱过期的提醒。 请参阅“清除”部分
MODE 了解详情。
-r - -r 选项禁用 跑 指令和 贝壳() 功能。 根据提醒
3.00.17、使用 -u 暗示 -r.
-c[标志]n
- -c 选择原因 提醒 生成发送到标准输出的日历。
如果你提供一个数字 n,然后将生成一个日历 n 月,开始
与当月。 默认情况下,只有当月的日历是
生产的。
你可以先 n (如果有)带有一组标志。 标志如下:
'+' 导致日历 n 周生产。
'一种' 原因 提醒 在实际发生的那一天在日历上显示提醒
as 好 as 在提醒指定的任何前几天 三角洲.
'我' 原因 提醒 使用VT100画线字绘制日历。 这
字符是硬编码的,只能在模拟 VT00 的终端上工作
线描字符集。
'你' 类似于 'l',但导致 提醒 使用UNICODE画线字符绘制
日历。 这些字符是硬编码的,只能在以下终端上工作
设置为 UTF-8 字符编码。
'c' 原因 提醒 使用 VT100 转义序列来近似特殊颜色提醒。
近似值(必然)非常粗略,因为 VT100 只有八个
不同的颜色序列,每个都有两种亮度之一。 颜色成分
大于 64 被视为“开启”,并且如果三个颜色分量中的任何一个是
大于 128,颜色被认为是“明亮的”。
-w山坳[,垫[,SPC]]]
- -w 选项指定格式化的输出宽度、填充和间距
日历输出。 关口 指定输出设备中的列数,以及
默认为 80。 垫 指定用于“填充”空日历框的行数。
这默认为 5。如果您在某些日子有很多提醒,使您的
日历太大而无法放入页面,您可以尝试缩小 垫 使空
盒子更小。 SPC 指定天数之间要留多少空行
和第一个提醒条目。 它默认为 1。
任何 山坳, 垫 or SPC 可以省略,只要您提供正确的数量
逗号。 不要在选项中使用任何空格。
-s[a]n - -s 选项非常类似于 -c 选项,除了输出日历是
没有格式化。 它以“简单格式”列出,可用作输入
更复杂的日历绘图程序。 如果 n 以“+”开头,然后是
解释为周数。
如果您立即按照 s 与信 a, 然后 提醒 显示提醒
在日历上它们实际发生的那一天 as 好 as 在任何之前的日子
由提醒的指定 三角洲.
-p[a]n - -p 选项非常类似于 -s 选项,除了输出包含
供使用的附加信息 雷姆2PS 程序,它创建一个 PostScript
日历。 对于这个选项, n 不能以“+”开头; 它必须指定一些
个月。 的格式 -p 输出在 雷姆2PS(1) 手册页。 如果
你立即按照 p 与信 a, 然后 提醒 显示提醒
它们实际发生的那一天的日历 as 好 as 在任何之前的日子
由提醒的指定 三角洲.
-l 如果将 -l 选项与 -p 选项结合使用,则 提醒 输出
后端程序的附加信息,例如 雷姆2PS. 这个额外的
信息让后端程序将提醒与源文件相关联
和产生它的行号。
-m - -m 选项导致 -c or -p 生成日历的选项,其第一列
是星期一而不是星期日。 (这符合国际标准。)
-v - -v 选项使输出 提醒 稍微详细一点。 目前,这
原因 提醒 在出现错误的情况下回显坏行,并打印安全
如果脚本测试 $RunOff 系统变量,则显示消息。
-o - -o 选择原因 提醒 忽略所有 ONCE 指令。
-t - -t 选择原因 提醒 触发所有未过期的提醒,无论
三角洲 为每个提醒提供。
-tn 如果你提供一个数字 n 后 -t 选项,然后 提醒 假装每个非
过期的提醒有 三角洲 of n 天并相应地触发提醒。
-h - -h option ("hush...") 禁止某些警告和信息消息。 在
特别是,如果没有触发提醒,则此模式不会产生任何输出。
-a - -a 选择原因 提醒 不要立即触发触发的定时提醒
在当天。 也会导致 提醒 不要将定时提醒放在
日历。 如果您提供两个或更多 -a 选项,然后 提醒 将 触发定时
未来的提醒,但不会触发其时间的定时提醒
已通过。 (无论有多少 -a 您提供的选项, 提醒 不会包括
日历中的定时提醒,如果至少有一个 -a 选项被使用。)
-q - -q 选择原因 提醒 不要排队定时提醒以供以后执行。
-f - -f 选择原因 提醒 处理排队时保持在前台
提醒,而不是分叉后台进程来处理它们。
-e - -e 选项转移错误消息(通常发送到标准错误流)
到标准输出流。
-d字符
- -d 选项启用某些调试模式。 这 字符 指定要使用的模式
使能够:
e 回显所有输入行
x 跟踪所有表达式评估
t 显示所有触发日期计算
v 执行提醒脚本后转储变量表
l 显示错误消息时的回显线
f 跟踪提醒文件的阅读
-g[一个| d[一个| d[一个| d[一个| d]]]]
通常情况下,提醒是按照它们出现的顺序发出的
提醒脚本。 这 -g 选择原因 提醒 按日期和时间对提醒进行排序
在发布它们之前。 可选的 a 和 d 字符指定排序顺序
(升序或降序)用于日期、时间和优先级字段。 见章节
“排序提醒”了解更多信息。
-b[n] 设置日历和简单日历输出的时间格式。 N 范围从
0 到 2,默认为 0。值为 0 会导致以 12 小时为单位插入时间
(am/pm) 格式。 1 导致以 24 小时格式插入时间,2 禁止
在日历输出中自动插入时间。
-x[n] 设置迭代限制 满足 a的条款 快速眼动 命令。 默认为 150。
-kCMD 而不是简单地打印 味精-type 提醒,这会导致它们被传递给
具体的 CMD. 您必须在希望正文出现的地方使用“%s”,并且可能需要
将此选项括在引号中。 请注意,正文中的所有 shell 字符
提醒用反斜杠转义,提醒的整个主体是
作为单个参数传递。 注意这个选项 覆盖 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 -r 选项和
跑 OFF 命令。
例如,假设您有一个名为的 X Window 程序 消息 弹出一个
窗口并显示其调用参数。 你可以使用:
提醒'-kxmessage %s &' ...
拥有你所有的 味精- 使用 xmessage 处理的类型提醒。
警告:很容易产生几十个 xmessage 进程。
以上技术。 所以要非常小心。 因为所有的 shell 和空白字符
被转义了,你执行的程序 -k 选项必须准备好处理
整个消息作为一个参数。
-z[n] 运行 提醒 在守护进程模式下。 如果 n
提供,它指定频率(以分钟为单位) 提醒 应该醒来检查是否
提醒脚本已更改。 N 默认为 1,范围为 1 到 60。
请注意,使用 -z 选项还启用 -f 选项。
如果您提供选项 -z0, 提醒 以一种特殊的模式运行,称为 服务器 模式.
这记录在 tkremind 手册页中; 看 提醒(1)。
-u姓名 运行 提醒 使用指定的用户的 uid 和 gid 姓名. 选项改变
uid 和 gid 如上所述,并设置环境变量 HOME、SHELL 和
USER 分别指向指定的主目录、shell 和用户名
用户。 LOGNAME 也设置为指定的用户名。 此选项用于
用于向所有用户发送提醒邮件的 shell 脚本。 请注意,截至提醒
3.00.17、使用 -u 暗示 -r -- RUN 指令和 shell() 函数是
禁用。
非root用户也可以使用 -u 选项。 但是,在这种情况下,它只会改变
环境变量如上所述。 它不会改变有效的 uid
或 gid。
-y 原因 提醒 为任何缺少 TAG 子句的提醒合成一个标签。
-iVAR=表达式
设置指定的值 VAR 至 表达式及 蜜饯 VAR. 表达式 可以是任何
有效 提醒 表达。 请参阅“在命令上初始化变量”部分
行”了解更多详情。
-iFUNC(ARGS)=定义
允许您在命令行上定义函数。
如果您提供 日期 在命令行上,它必须包括 天 月 年,其中 天 is
每月的某一天, 月 至少是英文名称的前三个字母
月,和 年 是从 4 年到大约 1990 年的年份(所有 2075 位数字)。您可以省略
天,然后默认为 1。
如果你确实提供了一个 日期 在命令行上,然后 提醒 使用它,而不是实际
系统日期,作为“今天”的概念。 这使您可以为未来几个月创建日历,
或测试以查看您的提醒在未来将如何触发。 同样,你可以
供应一个 次 (以 24 小时格式——例如,17:15)设置 提醒“现在”的概念
一个特定的时间。 供应一个 次 在命令行上也隐式启用 -q
选项并禁用 -z 选项。
如果您希望更简洁地指定日期,可以将其提供为 YYYY-MM-DD 或
YYYY/MM/DD。 您甚至可以在命令行上提供日期和时间作为一个参数:
YYYY-MM-DD@HH:MM。
此外,您可以提供一个 重复 参数,格式为 *NUM。 这导致
提醒 运行 NUM 次,日期在每次迭代中递增。 你可能不得不
将参数括在引号中以避免外壳扩展。 见小节“重复
有关更多信息,请参阅“日历模式”部分中的“执行”。
提醒 FILES
提醒 使用脚本来控制其操作。 您可以使用任何能够
创建纯 ASCII 文件以创建一个 提醒 脚本。 脚本中的命令可以
范围从非常简单和几乎立即可以理解的:
REM 6 Jan MSG Dianne 的生日
巴洛克式的和晦涩的:
REM [日期(今年, 1, 1) + 180] ++5 省略 \
sat sun BEFORE MSG [ord(thisyear-1980)] 付款到期 %b!
提醒文件由命令组成,每行一个命令。 几行可以
继续使用反斜杠字符,如上例所示。 在这种情况下,所有
连接的行被视为单行 提醒. 请注意,如果出现错误
发生, 提醒 报告连续行的最后一行的行号。
提醒 忽略空行和以“#”或“;”开头的行人物。 你可以
如果您希望传递一个分号,请使用分号作为注释字符 提醒 通过 C 编写脚本
预处理器,它将“#”字符解释为预处理的开始
指令。
需要注意的是 提醒 在其他任何事情之前处理行延续。 例如:
# 这是一条评论\
由于行延续,这一行是评论的一部分 \
等等。
REM MSG 这一行不会被忽略(上面没有\)
提醒 不区分大小写; 您通常可以使用大写或小写的任何混合
用于命令、参数、调用选项等。
“ 快速眼动 指挥
最强大的命令 提醒 脚本是 快速眼动 命令。 这个命令是
负责发出提醒。 它的语法是:
快速眼动 [ONCE[日期规格[背部[三角洲[重复[优先级 PRIO[SKIP | 之前 |
后[忽略 省略列表[省略函数 省略函数[AT 次 [三角洲[重复]]
[施德 调度函数[警告 警告功能[直到 到期日 | 通过 最后日期]
[扫描件 扫描日期 | 从 开始日期[期限 为期[行李牌 行李牌]味精 | 无国界医生 |
跑 | CAL | 满足 | 特别 特别 | PS | 文件> 身体
的部分 快速眼动 命令可以按任何顺序指定,除了 身体 必须来
之后 味精, 跑, CAL, PS, 文件 or 满足 关键词。
- 快速眼动 token 是可选的,前提是命令的其余部分不会出错
为了另一个 提醒 命令如 忽略 or 跑。 的部分 快速眼动 命令之前
味精, 无国界医生 跑, CAL or 满足 条款被称为 触发.
味精 无国界医生, 跑, 卡尔, 特别的, PS 和 文件
这些关键字表示 类型 的提醒。 (满足 更复杂,将是
稍后解释。)A 味精-type 提醒通常会向标准输出打印一条消息,
通过后 身体 通过特殊的替换过滤器,在 部分描述
“替代过滤器。” 但是,如果您使用了 -k 命令行选项,然后
味精-type 提醒被传递给适当的程序。 注意选项 -c, -s,
-p 和 -n 禁用 -k 选项。
请注意,您可以省略提醒类型,在这种情况下,它默认为 味精. 这样你就可以
写:
6 月 XNUMX 日黛安诞辰
虽然不推荐这样做。
- 无国界医生 关键字几乎与 味精 关键字,除了提醒是
格式化以适应类似段落的格式。 三个系统变量控制
格式化 无国界医生- 类型提醒 - 他们是 $第一缩进, $Subs缩进 和 $表格宽度.
它们在“系统变量”一节中讨论。 这 无国界医生 关键字导致间距
您要更改的提醒 - 多余的空格被丢弃,并放置两个空格
在句点和其他字符之后,由系统变量指定 $结束发送 和
$EndSentIg. 请注意,如果提醒正文包含换行符(放置
有 %_ 序列),然后换行符被视为新的开始
段落,以及 $第一缩进 缩进用于下一行。 你可以用两个
连续的换行符从单个提醒正文发出间隔的段落。
A 跑- 类型提醒也通过 身体 通过替换过滤器,然后
将结果作为系统命令执行。 一种 CAL-type提醒仅用于放置
日历中的条目何时产生 提醒 与运行 -c, -s or -p 选项。
A PS or 文件-type 提醒用于在以下情况下将 PostScript 代码直接传递给打印机
制作 PostScript 日历。 这可用于为某些日历条目添加阴影(请参阅
psshade() 函数),包括日历中的图形,或几乎任何其他目的
能想到。 除非您是专家,否则不应使用这些类型的提醒
PostScript 程序员。 这 PS 和 文件 提醒将被忽略,除非 提醒 运行
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 -p 选项。 有关详细信息,请参阅“有关 PostScript 的更多信息”部分。
A 特别-type 提醒用于从“带外”信息传递 提醒 到
日历制作后端。 后面应该跟一个表示类型的词
正在传递的特殊数据。 特殊提醒的类型取决于后端。 为了
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 雷姆2PS 后端, 特别 的PostScript 相当于一个 PS- 类型提醒,和 特别
PS文件 相当于一个 文件- 类型提醒。 一个身体 特别 提醒是
显然依赖于后端。
日期 产品规格
A 日期规格 由零到四部分组成。 这些部分是 天 (每月的第几天), 月
(月份名称), 年 和 工作日。 月 和 平日 是月份的英文名称和
平日。 至少必须使用前三个字符。 以下是例子
的各个部分 日期规格:
天: 1,22,31,14,3
月: 一月、二月、三月、四月、五月、八月
年: 1990、1993、2030、95(解释为1995)。 年份的范围可以从 1990 年到 2075 年。
工作日:
周一、周二、周三、周四、周五、周六、周日
请注意,可以有多个 平日 在 a 中由空格分隔的组件 日期规格。
解释 OF 日期 产品规格
以下示例显示了如何解释日期规范。
1.空日期规范-每天触发提醒。 触发日期
具体运行只是当前系统日期。
2。 只要 天 展示。 提醒在每个月的指定日期触发。 这
特定运行的触发日期是最接近当前系统日期的日期。 为了
例:
REM 1 MSG 每个月的第一个。
REM 31 MSG 每个月的第 31 天,有 31 天。
3。 只要 月 展示。 提醒在指定月份的每一天触发。
计费示例:
REM 二月味精二月的每一天
4. 天 和 月 展示。 例子:
REM 6 Jan MSG 每年 6 月 XNUMX 日
REM 29 月 29 日 MSG 每年 XNUMX 月 XNUMX 日
5。 只要 年 展示。 例子:
REM 1991 MSG 1991 年的每一天
6. 年 和 天 展示。 例子:
REM 1 1990 MSG 1 年每个月的第一天
REM 1992 23 MSG 23 年每月 1992 日
7. 年 和 月 展示。 例子:
REM 1991 年 1991 月 MSG XNUMX 年 XNUMX 月的每一天
REM 1992 年 1992 月 MSG XNUMX 年 XNUMX 月的每一天
8. 年, 月 和 天 展示。 例子:
REM 8 年 1991 月 8 日 MSG 1991 年 XNUMX 月 XNUMX 日。
REM 1992 年 9 月 9 日 MSG 1992 年 XNUMX 月 XNUMX 日。
9. 平日 只要。 例子:
REM 每周六周六 MSG
REM Mon Tue Wed Thu Fri MSG 每个工作日
REM 周一 周三 MSG 每周一和周三
10. 平日 和 天 展示。 例子:
REM 星期六 1 MSG 每个月的第一个星期六
REM 周一周二周三周四周五 15 \
MSG 每月 1 日后的第一个工作日
11. 平日 和 月 展示。 例子:
REM Mon March MSG 三月的每个星期一
REM Mon Tue Wed Thu Fri Feb 味精二月的每个工作日
12. 工作日, 月 和 天 展示。 例子:
REM 星期一 1 月 XNUMX 日 MSG 三月的第一个星期一
REM 15 月 15 日周六周日 MSG XNUMX 月 XNUMX 日或之后的第一个周六或周日
13. 平日 和 年 展示。 例子:
REM Sat Sun 1991 MSG 1991 年每周六和周日
14. 工作日, 天 和 年 展示。 例子:
REM Mon 15 1990 MSG 1 年每个月 15 日之后的第一个星期一
REM 周一 周二 周三 周四 周五 1 1990 \
MSG 1 年每个月的第一个工作日
15. 工作日, 月 和 年 展示。 例子:
REM Mon Wed 1991 Feb 1991 年 XNUMX 月每个星期一和星期三的味精。
16. 工作日, 一天, 月 和 年 展示。 例子:
REM 星期一星期二星期三星期四星期五 28 年 1990 月 XNUMX 日 \
MSG 1 年 28 月 1990 日或之后的第一个工作日。
请注意,当两者 平日 和 天 被指定, 提醒 选择第一个日期或
指定后 天 这也满足 平日 约束。 它通过
选择指定日期或之后的第一个日期 天 列表中列出的
平日。 因此,提醒如下:
REM 星期一 星期二 28 年 1990 月 XNUMX 日
将仅在 29 年 1990 月 30 日星期一发行。它将不会在 XNUMX 日星期二发行
1990 年 29 月,由于 XNUMX 日是第一个满足 平日 限制。
速记 日期 产品规格
除了分别拼写日月年之外,还可以指定YYYY-MM-DD
或 YYYY/MM/DD。 例如,以下语句是等效的:
REM 5 年 2010 月 XNUMX 日 MSG 酷!
REM 2010-06-05 味精酷!
您还可以将日期和时间指定为 YYYY-MM-DD@HH:MM。 这些陈述是
当量:
REM 19 年 2010 月 16 日 45:XNUMX
REM 2010-12-19@16:45 味精嗨
简写日期规范有一个微妙之处:以下陈述是
而不去 当量:
REM 19 年 2010 月 16 日 45:60 +XNUMX MSG 嗨
REM 2010-12-19@16:45 +60 味精嗨
在第二个语句中,“+60”是一个 三角洲 适用于日期而不是
三角洲 这适用于时间。 我们建议明确使用 AT 关键字和 timed
提醒。
“ 提醒 算法
提醒 使用以下算法计算触发日期:从当前开始
日期,它每天检查一次,直到找到满足日期的日期
规范,或向自己证明不存在这样的日期。 (实际上, 提醒 仅仅
表现 好像它使用了这个算法; 在实践中它会太慢。 在内部,
提醒 使用更快的技术来计算触发日期。)请参阅详细信息
触发计算了解更多信息。
落后 扫描
有时,需要将日期指定为在另一个日期之前的一定时间
日期。 例如,给定月份的最后一个星期一计算为
下个月,减 7 天。 这 背部 提醒中的规范用于此
案件:
REM Mon 1 -7 MSG 每个月的最后一个星期一。
A 背部 由一个或两个破折号后跟一个整数指定。 这引起 提醒 至
从通常的触发日期“向后”移动。 --7的区别
-7 将在 忽略 关键字进行了描述。
ADVANCE 警告
对于一些提醒,接收事件的预先警告是合适的。 为了
例如,您可能希望提前几天提醒某人的生日。 这
三角洲 的一部分 快速眼动 命令实现了这一点。 它被指定为一个或两个“+”号
后跟一个数字 n. 同样,“+”和“++”形式之间的区别将是
在下解释 忽略 关键词。 提醒 将在计算触发器上触发提醒
日期,以及在每个 n 活动前几天。 这里有些例子:
REM 6 Jan +5 MSG 提前 5 天提醒我生日。
上面的例子将在每年 6 月 1 日以及 5 日到 XNUMX 日触发
一月
定期 REMINDERS
我们已经看到了某些类型的定期提醒的一些内置机制。
例如,每周三发生的事件可以指定为:
REM 周三 MSG 活动!
但是,不每天、每周、每月或每年重复的事件需要另一个
方法。 这 重复 的组成部分 快速眼动 命令满足了这个需求。 要使用它,您必须
完全指定日期(年、月和日,以及可选的工作日。) 重复
组件是一个星号,后跟一个数字,以天为单位指定重复周期。
例如,假设您每第二个星期三获得报酬,而您的最后一个发薪日是
28 年 1992 月 XNUMX 日,星期三。您可以使用:
REM 28 年 1992 月 14 日 *XNUMX MSG 发薪日
从计算的触发日期开始,每 14 天发出一次提醒。 你
可以使用 三角洲 和 背部 - 重复。 但是,请注意, 背部 仅用于计算
初始触发日期; 此后,提醒会在指定的时间段内重复。
同样,如果指定工作日,则仅用于计算初始日期,并且
不影响重复周期。
扫描件 和 从
- 扫描件 和 从 关键字用于高级 提醒 仅限程序员,并且将
在本手册末尾附近的“有关触发器计算的详细信息”部分中进行了解释。
需要注意的是 扫描件 仅在以下版本中可用 提醒 从 03.00.04 起。 从 is
仅从 03.01.00 及以后可用。
优先级
- 优先级 关键字后面必须跟一个从0到9999的数字。它用于日历
模式和排序提醒时。 如果两个提醒的触发日期和时间相同,
然后它们按优先级排序。 如果 优先级 未提供关键字,默认值
使用优先级 5000。 (可以通过调整系统变量来改变这个默认值
$默认优先级. 有关详细信息,请参阅“系统变量”部分。)
到期 日期
某些提醒应在特定时间内定期发出,但随后会过期。 为了
例如,假设您每周五都有一节课,最后一节课是在 11 月 XNUMX 日
1992. 您可以使用:
REM 周五直到 11 年 1992 月 XNUMX 日今天的味精课。
另一个例子:假设您在 30 年 1992 月 4 日至 1992 年 XNUMX 月 XNUMX 日期间担任陪审员职责。
以下提醒将在您的陪审员职责的每一天发出消息,以及 2
提前几天:
REM 1992-11-30 *1 +2 直到 1992-12-04 MSG 陪审员职责
请注意 重复 需要*1的; 没有它,提醒只会在
30 月 XNUMX 日(以及前两天)
作为特殊情况,您可以使用 通过 关键字而不是 *1 和 直到。 下列
二 快速眼动 命令是等效的:
REM 1992-11-30 *1 +2 直到 1992-12-04 MSG 陪审员职责
REM 1992-11-30 +2 到 1992-12-04 MSG 陪审员职责
“ ONCE 关键字
有时,有必要确保提醒在给定的一天只运行一次。 为了
例如,如果您有每周五备份文件的提醒:
REM 星期五 RUN do_backup
(这里, 做备份 假定为执行该工作的程序或 shell 脚本。)如果您
运行 提醒 例如,从您的 .login 脚本中,每天登录几次,
做备份 程序将在您每次登录时运行。但是,如果您使用 ONCE 关键词
在提醒中, 提醒 检查提醒脚本的最后访问日期。 如果是
与当前日期相同, 提醒 假设它已经运行,并且不会
发出包含以下内容的提醒 ONCE 关键词。
请注意,如果您查看或编辑您的提醒脚本,最后访问日期将被更新,
和 ONCE 关键字将无法正常运行。 如果你开始 提醒 与 -o 选项,
那么 ONCE 关键字将被忽略。
本地 省略 工作日
- 忽略 的一部分 快速眼动 命令用于在计数时“省略”某些日子 三角洲
or 背部. 它是使用关键字指定的 忽略 然后是工作日列表。 它的
行动最好通过例子来说明:
REM 1 +1 OMIT 周六周日 MSG 重要事件
此提醒通常在每个月的第一天触发,以及当天
在它之前。 但是,如果一个月的第一天是星期日或星期一,则
提醒从上周五开始触发。 这是因为 三角洲 的+1
从触发日期向后计数时不计算星期六或星期日
确定给予多少提前警告。
将此与上述命令中使用“++1”进行对比。 在这种情况下,提醒是
在每个月的第一天以及它的前一天触发。 省略的日子
被计算在内。
REM 1 -1 OMIT Sat Sun MSG 每月最后一个工作日
同样,在上面的例子中, 背部 -1 通常导致触发日期为
本月的最后一天。 然而,由于 忽略 条款,如果是一个月的第一天
落在星期日或星期一,触发日期将向后移动到周末
星期五。 (如果您全局省略了假期,提醒将被移回过去
他们,也。 有关详细信息,请参阅“OMIT 命令”。)
相比之下,如果我们使用“--1”,则提醒会在最后一天触发
月份,无论 忽略.
计算 局部 省略
- 省略函数 的短语 快速眼动 命令允许您提供一个函数来确定
是否省略日期。 该函数传递了一个类型的参数 日期,
如果日期被认为是“省略”,则必须返回一个非零整数,否则返回 0。
下面是一个例子:
FSET _third(x) (天(x) % 3) || \
(周数(x) == 0) || \
(周数(x) == 6)
REM OMITFUNC _third AFTER MSG 工作日可被 3 整除
在上面的例子中,提醒在每周一到周五触发
数可以被三整除。 这是它的工作原理:
o - 省略函数 _第三 部分导致所有天 _第三(x) 返回非零到
被视为“省略”。 这会导致所有日期为月数的天 而不去 a
三的倍数被省略。 请注意,如果
工作日是星期日或星期六。
o - 后 关键字会导致在一段省略的天数之后移动提醒。
OMITFUNC 和 AFTER 关键字的组合导致全天发出提醒
其月数可被 XNUMX 整除,但不能在星期六或星期日整除。
请注意,如果您使用 省略函数, 那么本地 忽略 is 忽视 就好像 所有 全球化 省略号。 如果
你想省略特定的工作日,你的省略函数需要测试它们
具体来说。 如果你想考虑全球 忽略 上下文,然后你的省略
函数将需要明确测试(使用 被隔离() 功能。)
注意一个不正确的 省略函数 可能会导致所有天都被视为省略。 为了那个原因
原因,当 提醒 搜索省略的天数,它会在搜索结束后终止搜索
满足 迭代限制(命令行选项 -x.)
定时的 REMINDERS
定时提醒是那些有 AT 关键字后跟 次 和可选项 三角洲
和 重复。 该 次 必须以 24 小时格式指定,0:00 代表
午夜,12:00 代表中午,23:59 代表一分钟到午夜。 你可以
使用冒号或句点将小时与分钟分开。 也就是说,13:39 和
13.39个是等价的。
提醒 特别对待定时提醒。 如果定时提醒的触发日期是
与当前系统日期相同,提醒排队等待稍后激活。 什么时候 提醒
已完成处理提醒文件,它会将自己置于后台,并激活
当系统时间到达指定时间时定时提醒。
如果触发日期是 而不去 与系统日期相同,提醒不排队。
比如下面的提醒,每个工作日触发,会发出一条消息
告诉你下午 5:00 离开:
REM 星期一星期二星期三星期四星期五 17:00 MSG 是时候离开了!
以下提醒会在周四和周五触发,但只会排队
在周五:
REM Fri ++1 AT 13:00 MSG 午餐,周五下午 1 点。
- 三角洲 和 重复 具有与 a 相同的形式 重复 和 三角洲,但在
分钟。 例如,此提醒将在中午 12:00 以及 45 分钟触发
前:
REM AT 12:00 +45 MSG 示例
以下将在 10:45 开始发布,每半小时发布一次,直到 11:45,然后再次发布
中午。
REM AT 12:00 +75 *30 MSG 示例2
“+75”表示从中午前75分钟开始发出提醒; 其他
话,在 10:45。 *30 指定该提醒随后每
30分钟。 请注意,提醒总是在指定的时间发出,即使
三角洲 不是的倍数 重复. 所以上面的例子是在上午10:45发出的,
上午 11:15、上午 11:45 和下午 12:00。 注意,在时间规范中,没有
“+”和“++”形式的区别 三角洲.
通常情况下, 提醒 也会在处理提醒脚本时发出定时提醒
为以后排队。 如果你不想 提醒 发出提醒时
处理脚本,但只是为了稍后将它们排队,使用 -a 命令行选项。
如果您不希望提醒稍后排队,请使用 -q 命令行选项。
通常情况下, 提醒 派生一个后台进程来处理排队的提醒。 如果你想
提醒 要保持在前台,请使用 -f 命令行选项。 这很有用,对于
例如,在 .xinitrc 脚本中,您可以在其中使用以下命令:
提醒 -fa myreminders &
这确保当您退出 X-Windows 时, 提醒 进程被杀死。
警告 关于我们 定时的 REMINDERS
注意:如果您在
定时提醒,那么当定时提醒被激活时,变量和函数
具有在提醒脚本末尾生效的定义。 这些
定义可能 而不去 必须是在提醒发生时有效的那些
排队。
“ 施德 AND 警告 关键词
- 施德 关键字允许更精确地控制定时提醒的触发,以及
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 警告 关键字允许精确控制所有类型的提前触发
提醒。 但是,讨论必须推迟到表达式和用户定义之后
功能进行了说明。 进一步参见“精确调度”小节。
行李牌 AND 期限
- 行李牌 关键字可让您“标记”某些提醒。 该设施被某些后台使用
末端或系统围绕 提醒,如 提醒. 这些后端具有特定的
关于标签的规则; 有关详细信息,请参阅他们的文档。
- 行李牌 关键字后跟一个由最多 48 个字符组成的标签。 你可以作为
在给定的 REM 语句中,您可以随意使用许多 TAG 子句。
如果您提供 -y 选项 提醒,那么任何缺少 行李牌 会有一个
合成的。 合成标签由字符“__syn__”后跟
REM 命令行的 MD5 总和的十六进制表示。 这让你给一个
每个不同的 REM 命令或多或少的唯一标识符。
- 期限 关键字仅对定时提醒有意义; 它指定了一个持续时间
事件。 目前还没有使用,但将来可能会被后端或
调度系统围绕 提醒. 例如,如果您有一个 90 分钟的会议
从下午 1:00 开始,您可以使用:
REM 5 年 1999 月 13 日 00:1 持续时间 30:XNUMX MSG 会议
需要注意的是 为期 以小时和分钟指定。
“ 代换 FILTER
在被处理之前,一个 快速眼动 命令通过替换过滤器传递。
过滤器扫描序列“%x”(其中“x”是任何字母和某些其他字符)
并执行如下所示的替换。 (所有日期均指事件的触发日期
提醒。)
%a 被替换为“在 工作日, 天 月, 年"
例如,考虑提醒:
REM 18 年 1990 月 4 日 +XNUMX MSG 与 Bob %a 会面。
16 年 1990 月 18 日,它将打印“XNUMX 月 XNUMX 日星期四与鲍勃会面,
1990“。
17 年 1990 月 XNUMX 日,它将打印“明天与鲍勃会面”。
18 年 1990 月 XNUMX 日,它将打印“今天与鲍勃会面”。
%b 被替换为“在 差异 一天的时间”在哪里 差异 是 实际 天数
当前日期和触发日期之间。 (省略号 没有影响。)
例如,考虑:
REM 18 Oct 1990 +4 MSG 与 Bob %b 会面。
16 年 1990 月 2 日,它将打印“XNUMX 天后与鲍勃会面”。
17 年 1990 月 XNUMX 日,它将打印“明天与鲍勃会面”。
18 年 1990 月 XNUMX 日,它将打印“今天与鲍勃会面”。
%c 被替换为“在 平日"
示例:REM 18 Oct 1990 +4 MSG 与 Bob %c 会面。
16 年 1990 月 XNUMX 日,它将打印“星期四与鲍勃会面”。
17 年 1990 月 XNUMX 日,它将打印“明天与鲍勃会面”。
18 年 1990 月 XNUMX 日,它将打印“今天与鲍勃会面”。
%d 替换为“天”,月中的第几天。
%e 被替换为“在 DD-MM-YYYY"
%f 被替换为“在 年月日"
%g 被替换为“在 工作日, 天 月"
%h 被替换为“在 毫米"
%i 被替换为“在 毫米-日"
%j 被替换为“在 工作日, 月 日日, 年" 这种形式附加字符
"st"、"nd"、"rd" 或 "th" 到月中的某一天,视情况而定。
%k 被替换为“在 工作日, 月 日"
%l 被替换为“在 YYYY-MM-DD"
%m 替换为“月",月份的名称。
%n 替换为月份的数字(1 到 12)。
%o 当且仅当当前系统日期与
正在使用的日期 提醒 作为当前日期。 回想一下,您可以指定一个
日期为 提醒 在命令行上使用。 这种替换一般不
在一个有用的 快速眼动 命令,但在 BANNER 命令。 (见“横幅
命令。”)
%p 替换为“s”,如果 差异 当前日期和触发日期之间是
不是 1. 您可以使用它来构建提醒,例如:
REM 1 Jan +4 MSG %x day%p 新年前去!
%q 替换为“'s”,如果 差异 触发日期和当前日期之间是
1. 否则就换成“s'” 可以这样使用:
REM 1 Jan +4 MSG 新年在 %x 天%q 时间!
%r 替换为用前导零填充的月份中的第几天(01 到 31),如果
需要填充到两位数。
%s 被替换为“st”、“nd”、“rd”或“th”,具体取决于月份中的哪一天。
%t 被替换为月份数(01 到 12),并填充为两位数字,并带有
前导零。
%u 被替换为“在 工作日, 日 月, 年"这类似于 %a 除
将“st”、“nd”、“rd”或“th”添加到 天 作为适当的。
%v 被替换为“在 工作日, 日 月"
%w 替换为“平日",星期几的名称。
%x 被替换为 差异 当前日期和触发日期之间。 这 差异
定义为这两个日期之间的实际天数; 省略号 是不
计数。 (执行严格的日期减法。)
%y 替换为“年",触发日期的年份。
%z 替换为“yy",年份的最后两位数字。
%_ (percent-underscore) 替换为换行符。 您可以使用它来实现
多行提醒。
%1 替换为“现在”,“m 几分钟后", "m 几分钟前”, ”h 几小时后",
"h 小时前", "h 小时和 m 几分钟后”或“h 小时和 m 几分钟前”,如
适合定时提醒。 请注意,除非您指定 -a 选项,
定时提醒会像普通提醒一样触发,从而成为定时提醒
当天早些时候发生的事件可能会被触发。 这导致需要
“……以前”的形式。
%2 被替换为“在 hh:mmam" 或 "..pm" 取决于 AT 提醒时间。
%3 被替换为“在 hh:mm" 24 小时制。
%4 替换为“mm在哪里 mm 是“现在”和时间之间的分钟数
由 AT。 如果 AT 时间早于当前时间,则结果
是负面的。
%5 替换为“ma在哪里 ma 是产生的数字的绝对值 %4.
%6 替换为“以前”或“从现在开始”,具体取决于两者之间的关系 AT
时间和当前时间。
%7 被替换为之间的小时数 AT 时间和当前时间。 它
总是非负的。
%8 被替换为之间的分钟数 AT 时间和当前时间,
小时后(%7) 已被减去。 这是一个从 0 到
59.
%9 如果产生的值由“s”替换 %8 不是 1。
%0 如果产生的值由“s”替换 %7 不是 1。
%! 如果当前时间在 AT 时间,或者如果是“是”
后。
%@ 类似于 %2 但显示当前时间。
%# 类似于 %3 但显示当前时间。
%" (percent-doublequote - ") 被删除。这个序列不被使用
替代过滤器,但用于告诉 提醒 要包含在日历中的文本
进入时 -c, -s or -p 选项被选中。 请参阅“日历模式”
备注:
o 提醒 通常在每次提醒后打印一个空行; 如果最后一个字符
正文为“%”,不会打印空行。
o 替换 a、b、c、e、f、g、h、i、j、k、l、u 和 v 全部替换为
如果当前日期等于触发日期,则为“today”,如果触发日期为“tomorrow”
日期是当前日期之后的一天。 因此,他们是 而不去 相同
从更简单的 %w、%y 等序列构建的替换。
o 处理时间的任何替换(0 到 9 和“!”)产生 undefined
如果在没有提醒的提醒中使用结果 AT 关键词。 另外,如果一个
提醒有一个 三角洲 并且可能在几天内触发,时间替换
忽略日期。 就这样 %1 替代可能报告会议在 15
分钟,例如,即使它可能只有 2 天的时间,因为 三角洲
已触发提醒。 建议您使用时间替换
仅在没有定时提醒的情况下 三角洲 被设计为排队等待定时
激活。
o 替换序列中可以使用大写字母,在这种情况下,第一个
替换字符串的字符是大写的(如果它通常是小写的
信。)
o "%" 符号后的所有其他字符都被简单地复制。 特别地,为了得到
一个“%”退出,在正文中使用“%%”。 以
空格,使用“%”,因为 提醒 通常扫描第一个非空格字符
之后 味精 CAL or 跑 令牌。
“ 忽略 指挥
除了作为关键字 快速眼动 命令, 忽略 本身就是一个命令。
它的语法是:
忽略 天 月 [年]
要么:
忽略 day1 第一个月 year1 通过 day2 第一个月 year2
- 忽略 命令用于“全局”省略某些日子(通常是假期)。 这些
全局省略的天数被“-”和“+”形式的 背部 和 三角洲。 一些
例子:
省略 1 月 XNUMX 日
7 年 1992 月 XNUMX 日省略
第一个示例指定了每年同一天发生的假期 - 新年
日。 第二个示例指定了一个每年都在变化的假期 - 劳动节。 为了
这些类型的假期,您必须创建一个 忽略 每年的命令。 (后来,在
表达式的描述和一些更高级的功能 提醒, 你会看见
如何在某些情况下自动执行此操作。)
与 REM 命令一样,您可以对日期使用速记说明符; 以下是
当量:
7 年 1992 月 XNUMX 日省略
省略 1992-09-07
为方便起见,您可以使用 三角洲 和 味精 or 跑 中的关键字 忽略 命令。 的
以下序列是等效的:
省略 1 月 XNUMX 日
REM 1 Jan +4 MSG 元旦是 %b!
和
OMIT 1 Jan +4 MSG 元旦是 %b!
- 通过 关键字可让您方便地忽略天数范围。 开始和结束
点必须完全指定(即,它们必须包括日、月和年。)。 例如,
以下序列是等效的:
3 年 2011 月 XNUMX 日省略
4 年 2011 月 XNUMX 日省略
5 年 2011 月 XNUMX 日省略
和
省略 3 年 2011 月 5 日至 2011 年 XNUMX 月 XNUMX 日
你可以通过 忽略 做双重任务 快速眼动 命令:
省略 6 年 2010 月 10 日至 2010 年 XNUMX 月 XNUMX 日 MSG 假期
您可以使用以下命令调试全局 OMIT:
省略转储
OMIT DUMP 命令将当前的全局省略打印到标准输出。
“ 前, 后 AND SKIP 关键词
通常,忽略的天数,无论是由全局 忽略 命令或本地 忽略 or
省略函数 关键字 快速眼动 语句,只影响-的计数背部 或 +三角洲.
例如,假设您每周三开会。 也假设你有
表示 11 月 XNUMX 日为假期:
OMIT 11 月 4 日 +XNUMX 味精纪念日
REM 星期三 +1 MSG 代码会议 %b。
上述序列将发出关于 11 年 1992 月 XNUMX 日会议的提醒,这是一个
周三。 这可能是不正确的。 有以下三种选择:
之前 此关键字将提醒移至任何省略的日期之前。 因此,在上述
例如,使用 之前 会导致周二触发会议提醒,
10十一月1992。
后 此关键字将提醒移至任何省略的天数之后。 在上面的例子中,
会议提醒将于 12 年 1992 月 XNUMX 日星期四触发。
SKIP 此关键字会导致在任何省略的日期完全跳过提醒。
因此,在上面的例子中,提醒不会在 11 月 XNUMX 日触发
1992. 但是,它会在接下来的星期三,18 日照常触发
十一月1992。
- 之前 和 后 关键字将提醒的触发日期移动到之前或之后
分别为省略的天数块。 假设您通常在第一天运行备份
本月。 但是,如果一个月的第一天是周末或假期,则运行
在周末或节假日后的第一个工作日备份。 你可以使用:
REM 1 运行后省略周六日 do_backup
让我们来看看触发日期是如何计算的。 这 1 指定的第一天
月。 本地的 忽略 关键字导致 后 关键字将提醒向前移动过去
周末。 最后, 后 关键字将继续向前移动提醒,直到它有
通过全球指定的任何假期 忽略 命令。
“ 包括 指挥
提醒 允许您在提醒脚本中包含其他文件,类似于 C
预处理器#include 指令。 例如,您的系统管理员可能会维护一个
假期文件或系统范围的提醒。 您可以将这些包含在您的提醒脚本中
如下:
包括/usr/share/remind/holidays
包括/usr/share/remind/reminders
(实际路径名因系统而异 - 请咨询您的系统管理员。)
包括 文件最多可以嵌套 8 层。
如果您在文件名中指定“-” 包括 命令, 提醒 将开始阅读
标准输入。
如果您指定一个 目录 作为论据 包括, 然后 提醒 将处理所有文件
在与 shell 模式“*.rem”匹配的那个目录中。 文件按排序处理
命令; 排序顺序与 shell 扩展“*.rem”时使用的排序顺序匹配。
“ 跑 指挥
如果您在提醒脚本中包含其他文件,您可能并不总是完全信任
其他文件的内容。 例如,它们可能包含 跑- 类型提醒,可以
用于访问您的文件或执行不需要的操作。 这 跑 命令可以限制
这个:如果你包含命令 跑 OFF 在您的顶级提醒脚本中,任何提醒
或通常执行系统命令的表达式被禁用。 跑 ON 将重新
启用系统命令的执行。 请注意, 跑 ON 命令可以 仅由 用于
您的顶级提醒脚本; 它会 而不去 在访问的任何文件中工作 包括
命令。 这是为了保护您免受他人放置 跑 ON 命令在一个包含
文件。 然而 跑 OFF 命令可以在顶层使用,也可以在包含的文件中使用。
如果你跑步 提醒 与 -r 命令行选项, 跑- 类型提醒和 贝壳()
功能将被禁用,无论任何 跑 提醒脚本中的命令。
但是,随附的任何命令 -k 选项仍将被执行。
一种使用 跑 命令是提供之间的安全接口 提醒 和 榆树
邮件系统。 这 榆树 系统可以自动扫描收到的邮件提醒或日历
条目,并将它们放在您的日历文件中。 要使用此功能,您应该设置
下的日历文件名选项 榆树 成为“〜/.reminders.in", 而不去 你的主要
提醒文件! 这是为了使任何 跑 ON 邮寄给您的命令永远无法激活。
然后,您可以使用 榆树 浏览 消息 日历 项 命令放置提醒
以“->”开头的.reminders.in。 在您的主要 .reminders 文件中,包括以下内容
行数:
运行关闭 # 禁用运行
包括 .reminders.in
RUN ON # 重新启用运行
此外, 提醒 包含一些其他安全功能。 它不会读取一个文件
是组或世界可写的。 它不会运行 set-uid。 如果它读取了您不拥有的文件,
它将禁用 RUN 和 shell() 函数。 如果它运行为 根,它只会读取
拥有的文件 根.
“ BANNER 指挥
在规划婴儿食品行业的工艺要求时,安全性和可靠性是工艺设计中最重要的方面。 提醒 首先发出提醒,它会打印如下消息:
30 年 1992 月 XNUMX 日星期五(今天)的提醒:
(如果使用任何日历生成选项,或者如果 -k
选项被使用。)
- BANNER 命令可让您更改格式。 它应该出现在任何 快速眼动 命令。
格式为:
BANNER 格式
- 格式 类似于 身体 的 快速眼动 命令。 它通过替换
过滤器,带有当前系统日期的隐式触发器。 因此,默认横幅是
相当于:
%w, %d%s %m, %y%o 的横幅提醒:
您可以使用 BANNER % 完全禁用横幅。 或者您可以创建自定义横幅:
横幅 您好 - 这是您对 %y-%t-%r 的提醒:
控制 “ 忽略 CONTEXT
有时,需要临时更改全局 省略号 对一个有效的
几个提醒。 三个命令允许您执行此操作:
推送-忽略-上下文
该命令保存当前全局 省略号 在内部堆栈上。
清除-省略-上下文
此命令清除所有全局 省略号,从“干净的石板”开始。
POP-OMIT-上下文
此命令恢复全局 省略号 最近保存的 推-
省略上下文.
例如,假设您有一块提醒需要明确 忽略 上下文,以及
他们还引入了不需要的全局 省略号 这可能会干扰以后的提醒。
您可以使用以下片段:
PUSH-OMIT-CONTEXT #保存当前上下文
CLEAR-OMIT-CONTEXT # 清理石板
# 提醒块放在这里
POP-OMIT-CONTEXT # 恢复保存的省略上下文
表情
在某些情况下,将在后面描述, 提醒 将接受表达式进行评估。
提醒 表达式类似于 C 表达式,但对不同类型的对象进行操作。
数据 类型
提醒 表达式对五种类型的对象进行操作:
INT - INT 数据类型由一个机器字中可表示的整数组成。 这
INT 数据类型对应于 C 的“int”类型。
STRING - STRING 数据类型由字符串组成。 有点可比
到 C 字符数组,但更类似于 BASIC 中的字符串类型。
时间 - 时间 数据类型由一天中的时间组成。 这 时间 数据类型是内部的
存储为整数,表示自午夜以来的分钟数。
日期 - 日期 数据类型由日期组成(晚于 1 年 1990 月 XNUMX 日。)在内部, 日期
对象存储为自 1 年 1990 月 XNUMX 日以来的天数。
日期时间
- 日期时间 数据类型由日期和时间组成。 在内部, 日期时间
对象存储为自 1 年 1990 月 XNUMX 日午夜以来的分钟数。您
能想到一个 日期时间 对象作为组合 日期 和 时间 部件。
常数
下面的例子说明了常量 提醒 表达式:
INT 常数
12、36、-10、0、1209
STRING 常数
"你好", "这是一个测试", "\n\gosd\w", ""
请注意,空字符串由“”表示,并且字符串中的反斜杠
旨在 而不去 特殊解释,就像在 C 中一样。
时间 常数
12:33、0:01、14:15、16:42、12.16、13.00、1.11
需要注意的是 时间 常量以 24 小时格式写入。 句号或冒号
可用于将分钟与小时分开。 但是,Remind 将
仅使用一个分隔符来始终如一地输出时间。 (输出
在编译时选择分隔符。)
日期 常数
日期 常量表示为“yyyy/mm/dd”或“yyyy-mm-dd”,单引号
必须 被提供。 这将日期常量与除法或减法区分开来
整数。 例子:
´1993/02/22', '1992-12-25', '1999/01/01'
需要注意的是 日期 价值观是 印刷的 没有引号。 尽管“-”或“/”
被接受作为输入时的日期分隔符,当打印日期时,只有一个
用过的。 在编译时选择是使用“-”还是“/”。 还要注意
那个版本 提醒 03.00.01 之前不支持日期常量。 在那些
版本,您必须使用 日期() 功能。 此外,之前的版本
03.00.02 不支持“-”日期分隔符。
日期时间 常数
日期时间 常数的表达方式类似于 日期 常数加上
“@HH:MM”部分。 例如:
´2008-04-05@23:11', '1999/02/03@14:06', '2001-04-07@08:30'
日期时间 不带引号打印值。 关于日期和时间的注意事项
分隔符 日期 和 时间 常数也适用于 日期时间 常数。
操作员
提醒 有以下运算符。 同一行的运算符具有相同的优先级,
而较低行的运算符的优先级低于较高行的运算符。 这
运算符大致对应于 C 运算符。
! - (一元逻辑否定和算术否定)
* /%
+ -
<<=>> =
==!=
&&
||
商品描述 OF 操作员
! 逻辑否定。 可以应用于 INT 类型。 如果操作数非零,
返回零。 否则,返回 1。
- 一元减。 可以应用于 INT. 返回操作数的负数。
* 乘法。 返回两个的乘积 INTs.
/ 整数除法。 返回二的商 INTs,丢弃剩余部分。
% 模数。 除一后返回余数 INT 由另一个。
+ 有多种用途。 这些是:
INT + INT - 返回两个的总和 INTs.
INT + 时间 or 时间 + INT - 返回一个 时间 通过添加得到 INT 分钟到
原版的 时间.
INT + 日期 or 日期 + INT - 返回一个 日期 通过添加得到 INT 天到
原版的 日期.
INT + 日期时间 or 日期时间 + INT - 返回一个 日期时间 通过添加得到 INT
分钟到原来的 日期时间.
STRING + STRING - 返回一个 STRING 那是两个原始的串联
STRINGs.
STRING + 任何东西或任何东西 + STRING - 转换非STRING 论证一个
STRING,然后进行串联。 见 胁迫() 功能。
- 有多种用途。 这些是:
INT - INT - 返回两个的差 INTs.
日期 - 日期 - 返回(作为 INT) 两者之间的天数差异 日期s.
时间 - 时间 - 返回(作为 INT) 两者之间的分钟差 时间s.
日期时间 - 日期时间 - 返回(作为 INT) 两者之间的分钟差
日期时间s.
日期 - INT - 返回一个 日期 那是 INT 比原来早几天 日期.
时间 - INT - 返回一个 时间 那是 INT 比原来早几分钟 时间.
日期时间 - INT - 返回一个 日期时间 那是 INT 比原来早几分钟
日期时间.
<, <=, >, 和 >=
这些是比较运算符。 它们可以接受任何类型的操作数,但两者都
操作数必须是相同的类型。 比较运算符返回 1 如果
比较为真,如果为假则为 0。 注意字符串比较完成
遵循系统上字符的词汇顺序,以及
小写 旨在 这些运营商的区别。
==, != == 测试是否相等,如果其操作数相等则返回 1,如果它们相等则返回 0
不是。 != 不等式检验。
如果操作数的类型不同,== 返回 0 并且 != 返回 1。同样,
字符串比较区分大小写。
&& 这是逻辑 AND 运算符。 它的两个操作数都必须是类型 INT。 它
如果两个操作数都不为零,则返回 1,否则返回 0。
|| 这是逻辑 OR 运算符。 它的两个操作数都必须是类型 INT。 它
如果任一操作数为非零,则返回 1,否则返回 0。
附注
同等优先级的运算符是 时刻 从左到右评估,除了
括号另有规定。 这很重要,因为增强的“+”运算符是
不一定是联想的。 例如:
1 + 2 + "string" + 3 + 4 产生 "3string34"
1 + (2 + "string") + (3 + 4) 产生 "12string7"
12:59 + 1 + "test" 产生 "13:00test"
12:59 + (1 + "test") 产生 "12:591test"
逻辑运算符是 而不去 所谓的短路运算符,就像它们在 C 中一样。
操作数总是被评估。 因此,表达式如:
(f!=0) && (100/f <= 3)
如果 f 为零,则会导致错误。
变数
提醒 允许您为变量赋值。 这 设置 命令的用法如下:
设置 VAR 表达式
瓦尔 是变量的名称。 它必须以字母或下划线开头,并包括
只有字母、数字和下划线。 只有变量名的前 12 个字符
意义重大。 变量名是 而不去 区分大小写; 因此,“Afoo”和“afOo”是
相同的变量。 例子:
设置一个 10 + (9*8)
SET b“这是一个测试”
SET mydir getenv("HOME")
设置时间 12:15
设置今天的日期()
请注意,变量本身没有类型。 它们采用您存储的任何类型
在他们中。
要删除变量,请使用 UNSET 命令:
UNSET VAR [VAR...]
例如,要删除上面声明的所有变量,请使用:
UNSET ab mydir 时间日期
系统 变数
除了常规的用户变量, 提醒 有几个“系统变量”是
用于查询或控制运行状态 提醒. 系统变量可用
从版本 03.00.07 开始 提醒.
所有系统变量都以美元符号“$”开头。 它们可以用于 设置 命令和
表达式就像常规变量一样。 所有系统变量始终保持 a 的值
指定类型。 另外,有些系统变量是不能修改的,你也不能
创建新的系统变量。 系统变量可以在命令行上初始化
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 -i 选项,但您可能需要引用它们以避免让 shell 解释
美元符号。 系统变量名称不区分大小写。
定义了以下系统变量。 那些标记为“只读”的不能更改
与 设置 命令。 所有系统变量都保存类型的值 INT, 除非另有
指定的。
$计算UTC
如果为 1(默认值),则 提醒 使用C库函数来计算数量
协调世界时与本地时间之间的分钟数。 这会影响天文
计算(日出() 例如。)如果为 0,则您必须提供
当地时间和世界时之间的分钟数协调在 距离 UTC 分钟数 $Mins 系统
变量。
$校准模式 (只读)
如果非零,则 -c 选项是在命令行上提供的。
$守护进程 (只读)
如果是守护模式 -z 被调用,包含唤醒之间的分钟数。
如果不在守护程序模式下运行,则包含 0。
$日期九月
此变量只能设置为“/”或“-”。 它拥有过去的角色
日期的不同部分 提醒 打印 DATE 或 DATETIME 值。
$默认优先级
分配给提醒的默认优先级,没有 优先级 条款。 你可以设置
这根据需要调整提醒块的优先级,而无需
键入各个提醒的优先级。 启动时, $默认优先级 设置为 5000;
它的范围可以从 0 到 9999。
$不要叉子 (只读)
如果非零,则 -c 选项是在命令行上提供的。
$DontTrigAts (只读)
的次数 -a 选项是在命令行上提供的。
$不要队列 (只读)
如果非零,则 -q 选项是在命令行上提供的。
$结束发送 (细绳 类型)
包含结束句子的字符列表。 这 无国界医生 关键字插入两个
这些字符后的空格。 原来, $结束发送 设定为 ”。!?” (时期,
感叹号和问号。)
$EndSentIg (细绳 类型)
包含在以下情况下应忽略的字符列表 无国界医生 决定是否
不要在句子后放置两个空格。 最初,设置为 "'>)]}"+CHAR(34)
(单引号、大于号、右括号、右括号、右大括号和
双引号。)
例如,默认值的工作方式如下:
无国界医生 他说:“嗯!(后面会有两个空格。)” 是的。
因为最后的括号和引号被忽略(为了间距)
当他们遵循一个时期。
$第一缩进
a 的第一行缩进的空格数 无国界医生-类型提醒。 这
默认值为 0。
$折年
标准 Unix 库函数可能难以处理以后的日期
大于 2037。如果此变量设置为 1,则 UTC 计算“折回”
在使用 Unix 库函数之前的 2037 年。 例如,要
查明夏令时是否在 2077 年 XNUMX 月生效
被“折回”到 2010 年,因为这两年都是从星期一开始的,而且都是非
闰年。 因此,夏时制的规则被假定是相同的
这两年,Unix 库函数可以处理 2010 年。默认情况下,这个
变量为 0。如果 sun 或 UTC 函数行为不端多年,则将其设置为 1
大于2037。
$表格宽度
用于格式化的每行文本的最大宽度 无国界医生-类型的提醒。 这
默认值为 72。如果 无国界医生-type 提醒包含一个太长的单词,不适合这个
宽度,它不会被截断 - 宽度限制将被忽略。
$静音模式 (只读)
如果非零,则 -h 选项是在命令行上提供的。
$忽略一次 (只读)
如果非零,则 -o 选项是在命令行上提供的,或者是一个日期
与今天的真实日期不同。 如果非零,则 ONCE 指令
将被忽略。
$InfDelta (只读)
如果非零,则 -t 选项是在命令行上提供的。
$纬度, $拉丁文, $经纬度
这些指定您所在位置的纬度。 $纬度 范围可以从 -90 到 90,并且
其他从-59到59。北纬为正; 南方的是
消极的。 对于南部纬度,所有三个分量都应该是负数。
$位置 (细绳 类型)
这是一个字符串,指定您的位置名称。 它通常是
你的城镇或城市。 它可以设置为任何你喜欢的,但好的风格表明
它应该与纬度和经度系统变量保持一致。
$长度, $龙敏, $LongSec
这些指定您所在位置的经度。 $长度数 范围可以从 -180 到 180。
西经为正; 东方是阴性的。 请注意,所有三个
组件应具有相同的符号:所有西经为正且所有
东经为负数。
功能需要纬度和经度信息 日出() 和
日落(). 默认值可以编译成 提醒,或者你可以 设置 正确的
提醒脚本开头的值。
$最大卫星
的最大迭代次数 满足 子句(稍后描述。)必须是
至少 10 个。
距离 UTC 分钟数 $Mins
协调世界时与本地时间之间的分钟数。 如果
$计算UTC 是非零,这是在启动时计算的 提醒. 否则,你
必须明确设置。 如果 $计算UTC 为零,那么 距离 UTC 分钟数 $Mins 用于
天文计算。 您必须自己调整它以适应夏令时。
另外,如果你想初始化 距离 UTC 分钟数 $Mins 使用 -i 命令行选项,你
还必须设置 $计算UTC 到 0 与 -i 选项。
$下一个模式 (只读)
如果非零,则 -n 选项是在命令行上提供的。
$NumQueued (只读)
包含到目前为止排队等待后台定时触发的提醒数量。
$NumTrig (只读)
包含当前日期触发的提醒数量。 一种用途
变量如下:假设您希望在 PostScript 的框中着色
每当触发假期时的日历。 你可以保存的价值 $NumTrig in
执行假日提醒块之前的常规变量。 如果值
of $NumTrig 在假期块大于保存的值之后,那么至少
触发了一个假期,可以执行命令在日历中着色
盒子。 (请参阅“日历模式”部分。)
需要注意的是 $NumTrig 被影响 仅由 by 快速眼动 命令; 触发 触发 命令做
不影响它。
$PrefixLineNo (只读)
如果非零,则 -l 选项是在命令行上提供的。
$PSCal (只读)
如果非零,则 -p 选项是在命令行上提供的。
$径流 (只读)
如果非零,则 跑 指令被禁用。
$简单计算器 (只读)
如果设置为非零值 或 的 -p or -s 命令行选项是
提供。
$排序日期 (只读)
如果没有设置为 0 -g 使用选项,如果按日期升序排序,则为 1,如果按日期排序,则为 2
按日期降序排列。
$SortByPrio (只读)
如果没有设置为 0 -g 使用选项,如果按优先级升序排序,则为 1,或 2
如果按优先级降序排序。
$按时间排序 (只读)
如果没有设置为 0 -g 使用选项,如果按时间升序排序,则为 1,如果按时间排序,则为 2
按时间降序排列。
$Subs缩进
一个空格的所有行(第一行除外)的空格数 无国界医生-类型提醒
应该缩进。 默认值为 0。
$T (只读, 日期 类型)
完全等同于 触发日期(). (请参阅内置功能。)
$Td (只读)
相当于 日期(触发日期()).
$Tm (只读)
相当于 monnum(触发日期()).
$Tw (只读)
相当于 wkdaynum(触发日期()).
$泰 (只读)
相当于 年(trigdate()).
$TimeSep
此变量只能设置为“:”或“.”。 它拥有过去的角色
时间的不同部分 提醒 打印 TIME 或 DATETIME 值。
$UntimedFirst (只读)
设置为 1,如果 -g 选项与第四个排序字符“d”一起使用; 设置为 0
除此以外。
$U (只读, 日期 类型)
完全等同于 今天(). (请参阅内置功能。)
$Ud (只读)
相当于 日复一日()).
$嗯 (只读)
相当于 monnum(今天()).
$UW (只读)
相当于 wkdaynum(今天()).
$Uy (只读)
相当于 年(今天()).
注意:如果任何日历模式有效,则 $Daemon、$DontFork、
$DontTrigAts、$DontQueue、$HushMode、$IgnoreOnce、$InfDelta 和 $NextMode 不是
有意义的。
内置 职能
提醒 有大量的内置函数。 函数调用的语法相同
与 C 中一样 - 函数名称,后跟以逗号分隔的括号中的参数列表。
函数名称不区分大小写。 如果一个函数没有参数,它必须是
后跟函数调用中的“()”。 否则, 提醒 将其解释为变量
名称,并且可能无法正常工作。
在下面的描述中,缩写形式用于表示可接受的类型
论据。 字符“i”、“s”、“d”、“t”和“q”表示 INT, STRING, 日期, 时间 和
日期时间 论据,分别。 如果参数可以是几种类型之一,则
字符被连接起来。 例如,“di_arg”表示一个参数可以是 日期
或 INT. “x_arg”表示可以是任何类型的参数。 参数的类型
后跟一个下划线和一个命名参数的标识符。
内置函数有:
绝对(i_num)
返回的绝对值 NUM.
访问(s_file, si_模式)
测试文件的访问权限 文件. 时尚 可以是一个字符串,包含一个
混合字符“rwx”用于读取、写入和执行权限测试。
或者, 模式 可以是 UNIX 中描述的数字 ACCESS(2)系统调用。
如果可以使用指定的文件访问该文件,则该函数返回 0 模式, 和 -1
除此以外。
参数(s_fname)
返回用户定义函数期望的参数数量 名, 或 -1
如果不存在这样的用户定义函数。 请注意,此函数仅检查
用户定义的函数,而不是内置函数。 它的主要用途是确定
之前是否定义了特定的用户定义函数。 这
参数() 功能仅在以下版本中可用 提醒 从 03.00.04 起。
升序(s_string)
返回一个 INT 这是第一个字符的ASCII码 绳子。 作为一个
特殊情况, asc("") 返回0。
基尔()
返回编译成的“基准年” 提醒 (通常是 1990 年。)所有日期
内部存储为自 1 月 XNUMX 日以来的天数 基尔().
字符(i_i1 [,i_i2...])
这个函数可以取任意数量的 INT 论据。 它返回一个 STRING 由
由参数指定的字符。 请注意,没有一个参数可以
为 0,除非只有一个参数。 作为特例, 坦克(0) 返回“”。
请注意,因为 提醒 不支持对字符串中的字符进行转义,
在字符串中获得双引号的唯一方法是使用 坦克(34).
选择(i_index, x_arg1 [,x_arg2...])
选择 必须至少有两个参数,其中第一个是 INT。 如果 指数 is
n,则 n返回后续参数。 如果 指数 小于 1,那么
参数1 被退回。 如果 指数 大于后续参数的数量,
然后返回最后一个参数。 例子:
选择(0, “富”, 1:13, 1000) 返回“富”
选择(1, “富”, 1:13, 1000) 返回“富”
选择(2, “富”, 1:13, 1000) 返回 1:13
选择(3, “富”, 1:13, 1000) 返回1000
选择(4, “富”, 1:13, 1000) 返回1000
请注意,所有参数 选择() 旨在 时刻 评估。
强制(s_type, x_arg)
该函数转换 ARG 到指定的 类型,如果这种转换是可能的。
类型 必须是“INT”、“STRING”、“DATE”、“TIME”或“DATETIME”之一(大小写-
不敏感)。 转换规则如下:
If ARG 已经是 类型 指定,则原样返回。
If 类型 是“字符串”,那么 ARG 转换为由其打印的字符串组成的
表示。
If 类型 是“日期”,然后是 INT ARG 通过将其解释为数量来转换
自 1 月 XNUMX 日以来的天数 基尔()。 一个 STRING ARG 通过尝试读取它被转换
好像它是一个打印的日期。 一个 日期时间 通过删除
时间成分。 一个 时间 ARG 不能转换为日期。
If 类型 是“时间”,然后是 INT ARG 通过将其解释为数量来转换
从午夜开始的分钟。 一个 STRING ARG 通过尝试读取它来转换,就好像
那是印刷时间。 一个 日期时间 通过删除日期转换为时间
零件。 一个 日期 ARG 不能转换为时间。
If 类型 是“日期时间”,然后是 INT ARG 通过将其解释为
自 1 月 XNUMX 日午夜以来的分钟数 基尔()。 一个 STRING 被转换
试图阅读它,就好像它是打印的日期时间一样。 其他类型不能
转换为日期时间。
If 类型 是“INT”,那么 日期, 时间 和 日期时间 参数转换使用
与上述程序相反。 一个 STRING ARG 通过将其解析为
一个整数。
当前的()
以 DATETIME 对象的形式返回当前日期和时间。 这可能是实际
日期和时间,或者可能是命令行上提供的日期和时间。
日期(i_y, 我是, ID)
- 日期() 函数返回一个 日期 具有年、月和日组件的对象
由 y, m 和 d.
日期部分(dq_datetime)
返回一个 日期 表示日期部分的对象 日期时间.
日期时间(参数)
- 约会时间 () 函数可以接受两到五个参数。 它总是
返回从其参数生成的 DATETIME。
如果您提供两个参数,第一个必须是 DATE,第二个必须是 TIME。
如果您提供三个参数,第一个必须是 DATE,第二个和第三个
必须是 INT。 第二个和第三个参数被解释为小时和分钟
并转换为 TIME。
如果您提供四个参数,前三个必须是 INT,解释为
年、月和日。 第四个参数必须是 TIME。
最后,如果您提供五个参数,它们都必须是 INT 并被解释为
年、月、日、小时和分钟。
黎明([dq_date])
返回指定的“公民黎明”的时间 日期。 如果 日期 省略,
默认为 今天()。 如果一个 日期时间 提供了对象,只有日期组件是
用过的。
日期(dq_date)
这个函数需要一个 日期 or 日期时间 作为参数,并返回一个 INT 那是
月份中的日期部分 日期.
dayinmon(i_m, i_y)
返回一个月的天数 m (1-12)年度 y.
定义(s_var)
如果变量命名为 则返回 1 VAR 已定义,否则为 0。
需要注意的是 定义() 需要一个 STRING 争论; 因此,检查变量 X 是否为
定义,使用:
定义(“X”)
而不是:
定义(X)
第二个示例将尝试评估 X,如果是则返回错误
未定义或非类型 STRING.
dosubst(s_str [,d_日期 [,t_时间]]) or dosubst(s_str [,q_日期时间])
返回一个 STRING 那是通过的结果 STR 通过替换过滤器
前面描述过。 参数 日期 和 次 (或 日期时间) 建立
替代过滤器使用的有效触发日期和时间。 如果 日期 和 次
被省略,它们默认为 今天() 和 现在().
请注意,如果 STR 不以“%”结尾,会添加一个换行符
结果结束。 还有,打电话 dosubst() 用 日期 那是过去(即,
if 日期 < 今天()) 将产生未定义的结果。
dosubst() 仅从版本 03.00.04 开始可用 提醒.
黄昏([dq_date])
返回指定的“公民暮光之城”的时间 日期。 如果 日期 省略,
默认为 今天().
复活节日期(dqi_arg)
If ARG 是一个 INT,然后返回指定年份的复活节星期日的日期。
If ARG 是一个 日期 or 日期时间, 然后返回下一个复活节星期日的日期或
after ARG. (日期时间的时间部分被忽略。)
evaltrig(s_trigger [,dq_开始])
评估 触发 就好像它是一个 REM 或 IFTRIG 触发器规范并返回
触发日期作为 日期 (或作为 日期时间 如果有 AT 子句。)返回一个
负 INT 如果无法计算触发器。
通常情况下, 评估 查找今天或之后的触发日期。 如果您提供 开始
参数,然后它从那里开始扫描。
例如,表达式:
evaltrig("星期一 1", '2008-10-07')
返回“2008-11-03”,因为这是 7 年 2008 月 XNUMX 日或之后的第一个日期
满足“周一 1”。
如果您想查看从 2008 年 XNUMX 月的第一个星期一到
2008 年 XNUMX 月的第一个星期一,使用:
evaltrig("Mon 1", '2008-11-01') - evaltrig("Mon 1", '2008-10-01')
答案是 28。 评估 可以拥有所有平常的
触发子句 (忽略, AT, SKIP等)但是 不能 有 满足, 味精等等。
提醒式子句。
文件日期(s_filename)
返回修改日期 文件名。 如果 文件名 不存在,或者它的
修改日期在年份之前 基尔(),然后是 1 月 XNUMX 日 基尔() is
回。
文件日期时间(s_filename)
返回修改日期和时间 文件名。 如果 文件名 不存在,或
其修改日期在该年之前 基尔(),然后是 1 月 XNUMX 日午夜
基尔() 返回。
文件目录()
返回包含正在处理的当前文件的目录。 它可能是一个
相对或绝对路径名,但保证在
包括 命令如下:
包括 [filedir()]/stuff
这包括与当前文件位于同一目录中的文件“stuff”
处理。
文件名()
返回(作为 STRING) 当前正在处理的文件的名称 提醒.
在包含文件中,返回包含文件的名称。
获取环境(s_envvar)
类似于 获取环境(2)系统调用。 返回一个表示值的字符串
指定的环境变量。 如果环境变量不是,则返回 ""
定义。 请注意,环境变量的名称通常是大小写 -
敏感的; 因此,getenv("HOME") 与 getenv("home") 不同。
hebdate(i_day, s_hebmon [,idq_yrstart [,i_jahr [,i_aflag]]])
支持希伯来日期 - 请参阅“希伯来日历”部分
hebday(dq_date)
支持希伯来日期 - 请参阅“希伯来日历”部分
希布蒙(dq_date)
支持希伯来日期 - 请参阅“希伯来日历”部分
岁月(dq_date)
支持希伯来日期 - 请参阅“希伯来日历”部分
小时(tq_time)
返回小时分量 次.
iif(si_test1, x_arg1, [si_test2, x_arg2,...], x_默认)
If test1 不为零或空字符串,返回 参数1. 否则,如果 test2 是不是
零或空字符串,返回 参数2, 等等。 如果所有的 测试 参数是
错误,返回 默认. 请注意,所有参数都是 时刻 评估。 这
函数接受奇数个参数 - 请注意,在 03.00.05 版本之前
of 提醒,它只接受 3 个参数。 的 3 参数版本 iif() is
与以前版本的兼容 提醒.
索引(s_search, 目标 [,我开始)
返回一个 INT 那是的位置 目标 在字符串中 搜索、。 第一
字符串的字符编号为 1。如果 目标 不存在于 搜索、, 那么 0 是
回。
可选参数 开始 指定位置 搜索、 从哪里开始
寻找 目标.
isdst([d_日期 [,t_时间]]) or isdst(q_日期时间)
如果夏令时对指定时间有效,则返回一个正数
日期和时间。 日期 默认为 今天() 和 次 默认为午夜。
请注意,此函数仅与 C 运行时库函数一样可靠。
它从 03.00.07 版本开始可用 提醒.
小岛(idq_arg)
如果返回 1 ARG 是闰年,否则为 0。 精氨酸 可以是 INT, 日期 or
日期时间 目的。 如果一个 日期 or 日期时间 提供,那么年份分量是
在测试中使用。
隔离(dq_date)
如果返回 1 日期 被省略,给定当前的全局 忽略 语境。 返回 0
否则。 (如果提供了日期时间,则仅使用日期部分。)请注意,任何
本地 忽略 or 省略函数 条款是 而不去 考虑到这个功能。
语()
返回一个 STRING 命名支持的语言 提醒. (见“外语
支持。”)默认情况下, 提醒 编译为支持英文消息,所以这个
函数返回“英语”。 对于其他语言,此函数将返回
语言的英文名称(例如“German”) 请注意 语() 不可用
在版本中 提醒 在03.00.02之前。
较低(s_string)
返回一个 STRING 包含所有大写字符 绳子 转换为小写。
最大(x_arg1 [,x_arg2...)
可以接受任意数量的参数,并返回最大值。 论据可以是
任何类型,但必须都是同一类型。 它们与 >
运营商。
最小(x_arg1 [,x_arg2...)
可以接受任意数量的参数,并返回最小值。 论据可以是
任何类型,但必须都是同一类型。 它们被比作
运营商。
minsfromutc([d_date [,t_时间]]) or minsfromutc(q_datetime)
返回从协调世界时(以前为 GMT)到的分钟数
指定日期和时间的当地时间。 日期 默认为 今天() 和 次
默认为午夜。 如果本地时间早于 UTC,则结果是否定的。
否则,结果是肯定的。
请注意,此函数仅与 C 运行时库函数一样可靠。
它从 03.00.07 版本开始可用 提醒.
分钟(tq_time)
返回的分钟分量 次.
周一(dqi_arg)
If ARG 是 日期 or 日期时间 类型,返回一个命名月份组件的字符串
的日期。 如果 ARG 是一个 INT 从 1 到 12,返回一个命名月份的字符串。
monnum(dq_date)
返回一个 INT 从 1 到 12,代表月份的组成部分 日期.
月(i_phase) [,d_日期 [,t_时间]]) or 月日(i_phase, q_日期时间)
此函数返回阶段第一次出现的日期 相 的
月亮在或之后 日期 和 次. 相 范围从 0 到 3,其中 0 表示新
月亮,1 第一季度,2 满月和 3 第三季度。 如果 日期 被省略,它
默认为 今天()。 如果 次 省略,默认为午夜。
例如,以下返回下一个满月的日期:
SET满月 月日(2)
月亮时间(i_phase [,d_日期 [,t_时间]]) or 月亮时间(i_phase, q_日期时间)
该函数返回相位第一次出现的时间 相 的
月亮在或之后 日期 和 次. 相 范围从 0 到 3,其中 0 表示新
月亮,1 第一季度,2 满月和 3 第三季度。 如果 日期 被省略,它
默认为 今天()。 如果 次 省略,默认为午夜。 月亮时间() is
旨在与 月日()。 该 月日() 和 月亮时间()
函数精确到“老农夫”中的几分钟内
安大略省渥太华的年鉴”。
例如,以下返回下一个满月的日期和时间:
味精下一个满月 [月亮时间(2)] 上 [月日(2)]
月亮日期时间(i_phase [,d_日期 [,t_时间]]) or 月亮日期时间(i_phase, q_日期时间)
这个功能类似于 月日 和 月亮时间,但返回 DATETIME 结果。
月相([d_date [,t_时间]]) or 月相(q_datetime)
此函数返回月相 日期 和 次, 默认为
今天() 和午夜,分别。 返回值是一个从 0 到
359,以度数表示月相。 0是新月,180是满月
月亮,90 是第一季度,等等。
非省略(dq_start, dq_结束 [,s_wkday...])
该函数返回数量 非省略天数 开始 和 end。 如果
开始 未省略,则计算在内。 end 从不计算。
需要注意的是 end 必须大于或等于 开始 或者报错。 在
除了使用全局 OMIT 上下文之外,您还可以提供其他参数
是要省略的工作日名称。 然而,在一个 快速眼动 命令,任何本地 省略函数
条款是 而不去 考虑到这个功能。
例如,以下行将 a 设置为 11(假设没有全局 OMIT):
设置一个未省略的('2007-08-01', '2007-08-16', "Sat", "Sun")
因为 16 年 2007 月 11 日星期四是第 XNUMX 个工作日(不包括星期六和
星期日)在 1 年 2007 月 XNUMX 日星期三之后。
未省略 有多种用途。 例如,许多学校以六天的周期运行,并且
节假日不增加天数。 假设学年开始于
1 年 4 月 2007 日的第 XNUMX 天。以下提醒将在
日历:
如果今天()> = '2007-09-04'
设置 daynum nonomitted('2007-09-04', today(), "Sat", "Sun")
REM 省略 SAT SUN SKIP CAL Day [(daynum % 6) + 1]
ENDIF
显然,你得到的答案 未省略 取决于全局 OMIT 上下文。
如果您使用可移动的 OMIT,您可能会得到不一致的结果。
这是一个更复杂的用途 未省略. 我的垃圾收集遵循两个
交错的 14 天周期:一个星期五,垃圾和纸张回收(“黑匣子”)
被收集。 下周五,垃圾和塑料回收(“蓝盒子”)
集。 如果周一至周五的任何一天是假期,收集将延迟到
周六。 这是对这些规则进行编码的一种方法:
fset _garbhol(x) wkdaynum(x) == 5 && 未省略(x-4, x+1) < 5
REM 12 年 1999 月 14 日 *XNUMX AFTER OMITFUNC _garbhol MSG 黑盒
REM 19 年 1999 月 14 日 *XNUMX AFTER OMITFUNC _garbhol MSG Blue Box
下面是它的工作原理: _garbhol(x) 用户定义函数返回 1 当且仅
如果 (1) x 是星期五,并且 (2) 前一天至少有一天被省略
周一至周五(包括周五)。
第一个 REM 语句设置了 14 天的黑盒周期。 AFTER 关键字
如果 _garbhol 返回 1,则将集合移至星期六。第二个 REM
声明设置了 14 天的蓝盒周期,AFTER 进行了类似的调整
与 _garbhol 一起使用。
现在() 返回当前系统时间,作为 时间 类型。 这可能是实际时间,也可能是
命令行上提供的时间。
顺序(i_num)
返回一个作为序数的字符串 NUM。 例如, 条例(2) 回报
“第二”,和 条例(213) 返回“第 213 次”。
操作系统类型()
返回“UNIX”。 Remind 曾经在 OS/2 和 MS-DOS 上运行,但现在不再运行。
复数(i_num [,s_str1 [,s_str2]])
可以采用一到三个参数。 如果提供了一个参数,则返回“s”
NUM 不是 1,并且 "" 如果 NUM 是1。
如果提供了两个参数,则返回 str1 + "s" 如果 NUM 不是 1。否则,
回报 str1.
如果提供了三个参数,则返回 str1 if NUM 是1,并且 str2 除此以外。
psmoon(i_phase [,i_大小 [,s_注 [,i_notesize]]])
[已弃用] 返回一个 STRING 由 PostScript 代码组成,用于在
日历框的左上角。 相 指定月相,
并且是 0(新月)、1(第一季度)、2(满月)或 3(第三季度)。 如果
尺寸 指定时,它以 PostScript 单位(1/72
inch.) 如果未指定或为负数,则天数字体的大小为
用过的。
例如,以下四行在 PostScript 上放置月亮符号
日历:
快速移动 [月日(0)] 聚苯乙烯 [月亮(0)]
快速移动 [月日(1)] 聚苯乙烯 [月亮(1)]
快速移动 [月日(2)] 聚苯乙烯 [月亮(2)]
快速移动 [月日(3)] 聚苯乙烯 [月亮(3)]
If 注意 指定时,文本用于注释月亮显示。 字体是
用于日历条目的相同字体。 如果 笔记大小 给出,它指定
用于注释的字体大小,以 PostScript 单位(1/72 英寸)为单位。如果 笔记大小
没有给出,它默认为用于日历条目的大小。 (如果你注释
显示,注意不要覆盖天数—— 提醒 不检查
为此。)例如,如果你想显示每个新月的时间,你可以
在您的提醒脚本中使用它:
快速移动 [月日(0)] PS [psmoon(0, -1, 月亮时间(0)+"")]
请注意如何通过连接空字符串将时间强制转换为字符串。
psshade(i_gray) or psshade(i_red, 我_绿色, i_蓝色)
[已弃用] 返回一个 STRING 由 PostScript 命令组成
日历框。 民 范围从 0(全黑)到 100(全白)。
如果给出三个参数,它们指定从 0 到 XNUMX 的红色、绿色和蓝色强度
100. 这是一个如何使用它的例子:
REM 周六周日 PS [阴影(95)]
上面的命令发出 PostScript 代码来为星期六和
PostScript 日历中的星期日。
需要注意的是 月亮 和 阴影 已弃用; 相反,您应该使用 SPECIAL
“带外提醒”中所述的 SHADE 和 SPECIAL MOON 提醒。
实际电流()
返回(作为 DATETIME)操作提供的真实日期和时间
系统。 这与 当前的(),这可能会返回提供的时间
命令行。
实时()
返回操作系统提供的真实时间。 这是在
相比较 现在(),它可能会返回命令行上提供的时间。
今日真实()
返回操作系统提供的日期。 这与
提醒的“今天”的概念,如果它在日历中运行,可能会改变
模式,或者是否在命令行上提供了日期。
信号(i_num)
如果返回 -1 NUM 是负数,如果是 1 NUM 是正数,如果是 0 NUM 是零。
外壳(s_cmd [,i_maxlen])
执行 CMD 作为系统命令,并返回输出的前 511 个字符
产生于 CMD. 输出中的任何空白字符都将转换为
空间。 请注意,如果 跑 OFF 已被执行,或 -r 命令行选项有
被使用过, 贝壳() 将导致错误,并且 CMD 不会被执行。
If 麦克斯伦 被指定,那么 贝壳() 返回第一个 麦克斯伦 输出字符
(而不是第一个 511)。 如果 麦克斯伦 指定为负数,则 所有
输出来自 CMD 返回。
幻灯片(d_start, 我_amt [,s_wkday...])
这个函数是 未省略。 它增加了 AMT 天(可以是
负)到 开始, 而不去 计数 省略 天. 可选的 工作日 参数是
要省略的其他工作日名称。
考虑以下示例:
省略 14 年 2009 月 XNUMX 日
设置幻灯片('2009-05-13', 5, "Sat", "Sun")
在这种情况下, a 设置为 2009-05-21。 那是因为我们向前滑动了5天,
不包括 14 月 16 日星期四或 17 月 XNUMX 日和 XNUMX 日星期六和星期日。你可以去
也向后,所以:
省略 14 年 2009 月 XNUMX 日
设置幻灯片('2009-05-21', -5, "Sat", "Sun")
需要 a 回到 2009-05-13。
strlen(s_str)
返回长度 STR.
子字符串(s_str, 我开始 [,i_结束])
返回一个 STRING 由所有字符组成 STR 在 开始 直到并包括
end. 字符从 1 开始编号。如果 end 未提供,则默认为
的长度 STR.
日出([dq_date])
返回一个 时间 指示指定的日出时间 日期 (默认
今天().) 在高纬度地区,某一天可能没有日出,其中
案件 日出() 返回 INT 如果太阳从不落下,则为 0,如果太阳从不升起,则为 1440。
日落([dq_date])
返回一个 时间 指示指定的日落时间 日期 (默认
今天().) 在高纬度地区,某一天可能没有日落,其中
案件 日落() 返回 INT 如果太阳从不升起,则为 0,如果太阳从不落下,则为 1440。
功能 日出() 和 日落() 是基于“Almanac for
1978 年的计算机”,由 USNO 航海年历办公室的 LE Doggett 撰写。他们
需要通过设置适当的来指定纬度和经度
系统变量。 (请参阅“系统变量”。) sun 函数应该是准确的
对于纬度低于 4 度的地区,大约在 60 分钟内。 功能是
从版本 03.00.07 开始可用 提醒.
时间(i_hr, 算我一个)
创建一个 时间 具有指定的小时和分钟分量 hr 和 分钟.
时间部分(tq_datetime)
返回一个 时间 表示时间部分的对象 日期时间.
今天()
Returns & Exchanges 提醒的“今天”概念。 这可能是实际的系统日期或日期
在命令行上提供,或当前正在执行的日历条目的日期
计算。
触发日期()
返回上次计算的触发日期 快速眼动 or 触发 命令。 如果用于
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 身体 的 快速眼动 命令,返回该命令的触发日期。 如果最近
快速眼动 命令没有产生可计算的触发日期,返回整数 0。
触发日期时间()
类似于 trigdate(),但返回一个 日期时间 如果最近的可触发 快速眼动
命令有一个 AT 条款。 如果没有 AT 子句,返回一个 日期。 如果不
可以计算触发器,返回整数 0。
触发器(d_date [,t_时间 [,i_utcflag]]) or 触发器(q_datetime [,i_utcflag])
返回一个适合在 a 中使用的字符串 快速眼动 命令或 SCANFROM 或 UNTIL 子句,
允许您提前计算触发日期。 请注意,在早期版本中
of 提醒, 触发 需要将日期转换为 快速眼动 命令
可以消费。 然而,在这个版本的 提醒, 你可以省略它。 注意
扳机() 时刻 以英语返回结果,即使是外语版本
of 提醒. 这是为了避免某些不处理的 C 库出现问题
重音字符正确。 通常情况下, 日期 和 次 是本地日期和
时间; 然而,如果 utc标志 非零,则 日期 和 次 被解释为 UTC
时间,并转换为本地时间。 例子:
触发器('1993/04/01')
返回“1 年 1993 月 XNUMX 日”,
trigger('1994/08/09', 12:33)
返回“9 August 1994 AT 12:33”,如下所示:
trigger('1994/08/09@12:33').
最后:
trigger('1994/12/01', 03:00, 1)
为 EST 返回“30 年 1994 月 22 日 00:5”,比 UTC 晚 XNUMX 小时。 这
您所在时区的值可能会有所不同。
触发时间()
返回上次的时间 快速眼动 命令与 AT 条款。 如果最后 快速眼动 做了
没有 AT 子句,返回整数 0。
触发有效()
如果返回的值由 触发日期() 对最近有效 快速眼动
命令,否则为 0。 有时 快速眼动 命令无法计算触发日期。
例如,以下 快速眼动 命令永远不会被触发:
REM Mon OMIT Mon SKIP MSG 不可能!
类型(x_arg)
根据类型返回“STRING”、“INT”、“DATE”、“TIME”或“DATETIME”
ARG.
tzconvert(q_datetime, s_srczone [,s_dstzone])
转换 日期时间 从命名的时区 区域 到指定的时区
区。 如果 区 省略时,使用默认的系统时区。 回报
值是日期时间。 时区名称取决于系统; 咨询您的操作
法律价值体系。 这是一个例子:
tzconvert('2007-07-08@01:14', "Canada/Eastern", "Canada/Pacific")
回报
2007-07-07@22:14
上(s_string)
返回一个 STRING 包含所有小写字符 绳子 转换为大写。
值(s_varname [,x_默认])
返回指定变量的值。 例如, value("X"+"Y") 返回
变量 XY 的值(如果已定义)。 如果未定义 XY,则会出现错误
结果。
但是,如果您提供第二个参数,如果 变量名 是不是
定义。 如果未定义 XY,表达式 value("XY", 0) 将返回 0,并且
XY 的值(如果已定义)。
版本()
返回指定版本的字符串 提醒. 对于版本 03.00.04,返回
“03.00.04”。 可以保证,作为新版本的 提醒 被释放,
返回值 版本() 将严格按照规定增加
字符串排序。
周号([dq_日期, [i_wkstart, [i_daystart]]])
返回一年中的周数。 如果未提供参数,则返回 ISO
8601 周数 今天(). 如果一个论点 日期 提供,然后返回
该日期的 ISO 8601 周数。 如果提供了两个参数,则 周开始
必须在 0 到 6 之间,表示一周的第一天(其中 0 表示
星期日和 6 是星期六。)。 如果 周开始 未提供,则默认为 1。
如果第三个参数 开始 提供,然后它指定第 1 周的开始时间。
If 开始 小于或等于 7,则第 1 周从第一周开始 周开始 on
或在一月之后 开始. 否则,第 1 周从第一周开始 周开始 在或
十二月以后 开始. 如果省略, 开始 默认为 29(遵循 ISO
8601 定义。)
工作日(dqi_arg)
If ARG 是一个 日期 or 日期时间, 返回一个字符串,表示星期几
日期。 如果 ARG 是一个 INT 从0到6,返回对应的工作日
(“星期日”到“星期六”)。
wkdaynum(dq_date)
返回一个从 0 到 6 的数字,表示指定的星期几 日期.
(0 代表星期日,6 代表星期六。)
年(dq_date)
返回一个 INT 这是年份的组成部分 日期.
表达 粘贴
一个非常强大的功能 提醒 是它的宏功能,或“表达式粘贴”。
几乎在任何情况下 提醒 不期待表达式,您可以“粘贴”一个
表达式。为此,用方括号将表达式括起来。 例如:
REM [mydate] 味精 foo
这将评估表达式“mydate”,其中“mydate”可能是一些预先计算的
变量,然后将结果“粘贴”到命令行以供解析器处理。
对此的正式描述是:当 提醒 遇到“粘贴”表达式,它
计算表达式,并将结果强制为 STRING. 然后它代替
粘贴表达式的字符串,并继续解析。 但是请注意,
表达式只计算一次,不递归。 因此,写作:
["[a+b]"]
原因 提醒 读取标记“[a+b]”。 它不会将其解释为粘贴
表达。 事实上,将文字左括号放入提醒的唯一方法是使用
[“[”]。
您几乎可以在任何地方使用表达式粘贴。 但是,也有一些例外:
o 如果 提醒 期待一个表达式,如 设置 命令,或 IF 命令,你
应该 而不去 包括方括号。 例如,使用:
设置 4+5
而不是:
设置一个 [4+5]
o 您不能对行上的第一个标记使用表达式粘贴。 例如,
以下将不起作用:
[“设置”] 一个 1
这个限制是因为 提醒 必须能够明确地确定
流控制命令的行的第一个标记(稍后讨论。)
实际上,如果 提醒 无法确定一行上的第一个标记,它假定它
是一个 快速眼动 命令。 如果使用表达式粘贴, 提醒 假设它是一个 快速眼动
命令。 因此,以下三个命令是等价的:
REM 12 年 1993 月 13 日 05:XNUMX 味精嘘!
12 年 1993 月 13 日 05:XNUMX 味精嘘!
[12] [“1993 月” + 12 年] AT [05:60+XNUMX] 味精嘘!
o 您不能使用表达式粘贴来确定类型(味精, CAL等)的 快速眼动
命令。 您可以在之前和之后粘贴表达式 味精, 等关键字,但是
不能做这样的事情:
REM [“12 年 1993 月 13 日 05:XNUMX”+“味精”+“嘘!”]
COMMON 陷阱 IN 表达 粘贴
请记住,在粘贴表达式时,不会插入额外的空格。 因此,
就像是:
REM[expr]味精[expr]
可能会失败。
如果您使用表达式来计算 三角洲 or 背部, 确保结果是
正数。 就像是:
REM +[mydelta] 12 年 1993 月 XNUMX 日 MSG foo
会失败,如果 我的三角洲 恰好是负数。
流 CONTROL 指令
提醒 具有控制提醒脚本流程的命令。 平时提醒
脚本是按顺序处理的。 然而, IF 和相关的命令让你处理
有条件地文件,并跳过您不想解释的部分。
“ IF 指挥
- IF 命令具有以下形式:
如果表达式
t 命令
t命令...
ELSE
f 命令
f命令...
ENDIF
请注意,为清楚起见,命令显示为缩进。 此外,该 ELSE 部分可以
省略。 IF 命令可以嵌套到一个很小的限制,可能大约 8 或 16 级
嵌套,取决于您的系统。
如果 表达式 评估为非零 INT, 或非空值 STRING,则 IF 部分是
被认为是真实的,并且 t 命令 被执行。 如果 表达式 计算结果为零或空,然后
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 f 命令 (如果 ELSE 部分存在)被执行。 如果 表达式 不是类型 INT
or STRING, 那么这是一个错误。
例子:
如果定义(“want_hols”)
包括/usr/share/remind/holidays
ENDIF
如果今天()>'1992/2/10'
setmissed_ap "你错过了!"
ELSE
setmissed_ap "还有时间..."
ENDIF
“ 触发 指挥
- 触发 命令类似于 IF 命令,除了它计算一个触发器(如
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 快速眼动 命令),如果有相应的,则评估为真 快速眼动 命令将触发。
例子:
IFTRIG 1 月 XNUMX 日
; 1月XNUMX日执行
ELSE
; 除 1 月 XNUMX 日外执行
ENDIF
IFTRIG 1 -1 省略周六周日 +4
; 每月最后一个工作日执行,
; 以及之前的 4 个工作日
ELSE
; 除上述日期外执行
ENDIF
请注意 触发 命令计算触发日期,可以使用
触发日期() 功能。 您可以使用所有正常的触发器组件,例如 直到,
三角洲等在 触发 命令。
用户自定义 职能
除了内置功能外, 提醒 允许您定义自己的功能。
- FSET 命令为您执行此操作:
FSET 名(ARGS) 表达式
名称 是函数的名称,并遵循命名变量的约定。 参数
是逗号分隔的参数列表,并且 表达式 是一个表达式。 参数 可以为空,在
在这种情况下,您定义一个不带参数的函数。 这里有些例子:
FSET 双倍(x) 2*x
FSET yeardiff(date1, date2) 年(date1) - 年(date2)
FSET 自(x) ord(year(trigdate())-x)
最后一个功能在生日提醒中很有用。 例如:
REM 1 月 12 日 +XNUMX 味精院长的 [自(1984)] 生日是 %b。
Dean 出生于 1984 年。上面的示例在 1 年 1992 月 XNUMX 日将打印:
今天是迪恩的 8 岁生日。
备注:
o 如果你访问一个变量 表达式 那不在参数列表中,“全局”
使用值(如果有)。
o 函数和参数名称仅对 12 个字符有效。
o 价值() function 时刻 访问变量的“全局”值,即使它
与参数同名。 例如:
fset func(x) 值("x")
设置 x 1
设置 y FUNC(5)
上述序列将 y 设置为 1,即 x 的全局值。
o 用户定义的函数可以调用其他函数,包括其他用户定义的函数
职能。 但是,不允许递归调用。
o 用户定义的函数在定义时不进行语法检查; 解析发生
只有当它们被调用时。
o 如果用户定义的函数与内置函数同名,则忽略
并使用内置函数。 为了防止与未来版本的冲突
提醒 (可能会定义更多的内置函数),您可能希望将所有用户命名为
以下划线开头的定义函数。
精确 排程
- 警告 关键字允许以更灵活的方式精确控制预警
比 三角洲 机制。 它后面应该是用户定义函数的名称,
警告功能.
如果一个 警告功能 提供,那么它必须采用一个类型的参数 INT. 提醒
忽略任何增量,而是调用 警告功能 依次使用参数 1、2、
3,...
警告功能的返回值 n 解释如下:
o 如果 n 为正,则提醒准确触发 n 触发前几天
日期。
o 如果 n 为负,则触发 n 触发日期前几天, 而不去 计数
忽略天。
例如,假设您希望收到美国独立日第 5、3 和 1 天的警告
提前。 你可以使用这个:
FSET _wfun(x) 选择(x, 5, 3, 1, 0)
REM 4 月 XNUMX 日 WARN _wfun MSG 美国独立日是 %b。
附注
1 如果在评估过程中发生错误 警告功能, 然后 提醒 停止
调用它并简单地在其触发日期发出提醒。
2 如果返回值的绝对值 警告功能 不是单调的
减少, 提醒 停止调用它并在其触发日期发出提醒。
3 警告功能 应该(作为一种良好的风格)返回 0 作为其最终值
返回值的序列。 不过会提醒 时刻 被触发
触发日期,无论什么 警告功能 一样。
类似于 警告, 施德 关键字允许精确控制定时的调度
提醒。 它后面应该是用户定义函数的名称, 调度函数.
如果提供了调度函数,则它必须采用一个类型的参数 INT. 相当
比使用 AT 时间,时间 三角洲和时间 重复, 提醒 调用调度函数
确定何时触发提醒。 提醒第一次排队时,
调度函数被调用,参数为 1。每次触发提醒时,
通过再次调用调度函数来重新调度它。 在每次调用中,参数
加一。
调度函数的返回值必须是 INT 或者 时间. 如果返回值
是一个 时间,则提醒重新排队触发。 如果是阳性
整数 n,则提醒重新排队触发在上一次触发时间加上 n
分钟。 最后,如果是负整数或零,则提醒重新排队
触发 n 前几分钟 AT 时间。 请注意,必须有一个 AT 的条款 施德
条款做任何事情。
下面是一个例子:
FSET _sfun(x) 选择(x, -60, 30, 15, 10, 3, 1, 1, 1, 1, 0)
REM 在 13:00 SCHED _sfun MSG foo
提醒将首先在 13:00-60 分钟或 12:00 触发。 接下来是
30 分钟后,即 12:30 触发。 然后,它会在 12:45、12:55、12:58、
12:59、13:00、13:01 和 13:02。
附注
1 如果在评估过程中发生错误 sched_func, 然后 提醒 恢复到
使用 AT 时间和 三角洲 和 重复 价值观,从不打电话 sched_func
一次。
2 如果处理 sched_func 产生比当前系统时间早的时间,它是
不断增加参数重复调用,直到它产生一个大于或的值
等于当前时间。 但是,如果在计算过程中的值序列
重复不是严格增加的,那么 提醒 恢复为默认值
行为,从不打电话 sched_func 一次。
3 很有可能使用 sched_func 即使在
AT-时间。 但是,无法在午夜之后重新安排提醒 - 不
允许跨越日期边界。 此外,完全有可能 而不去 触发
上的提醒 AT 使用调度功能的时间。 但是,如果您的
调度功能被终止(原因 1 和 2)之前 AT 的时间
提醒一下, 将 被触发 AT 时间,因为正常的处理需要
过度。
4 您的调度功能应该(作为一种良好的风格)在没有更多时返回 0
调度是必需的。 请参阅示例。
5 评估所有调度功能 after 已阅读整个提醒脚本
因此,在脚本末尾生效的任何函数定义都是
用过的。
“ 满足 条款
形式 快速眼动 使用 满足 如下:
快速眼动 触发 满足 表达式
其工作方式如下: 提醒 首先计算一个触发日期,在正常情况下
时尚。 接下来,它设置 触发日期() 到计算的触发日期。 然后它评估
表达式. 如果结果不是空字符串或零,则处理结束。 否则, 提醒
计算下一个触发日期,并重新测试 表达式. 这个迭代一直持续到 表达式
计算结果为非零或非空,或直到使用指定的迭代限制 -x
达到命令行选项。
If 表达式 不满意,那么 触发有效() 设置为 0。否则, 触发有效() 被设置为
1. 在任何情况下,都不会发出错误消息。
这只有在 表达式 涉及调用 触发日期() 功能; 否则,
表达式 不会改变为 提醒 迭代。
一个有用的例子 满足:假设您希望在每个星期五收到警告
13 日。 您的第一次尝试可能是:
# 错误的!
REM Fri 13 +2 MSG Friday 13th 是 %b。
但这行不通。 此提醒在 13 日或之后的第一个星期五触发
每一个月。 这样做的方法是使用更复杂的序列:
REM 13 满足 wkdaynum(trigdate()) == 5
如果 trigvalid()
REM [trigdate()] +2 味精 \
13 号星期五是 %b。
ENDIF
让我们看看这是如何工作的。 这 满足 子句遍历连续的所有 13
月,直到找到其星期几为星期五 (== 5) 的触发日期。 如果一个有效的日期
找到了,我们就用计算出来的触发日期来设置下一次提醒。
我们也可以这样写:
REM 周五满意日(trigdate())== 13
但这会导致更多的迭代,因为“星期五”比“13th of
这个月。”
这种使用一个技术 快速眼动 计算另一个要使用的触发日期的命令
命令相当强大。 例如,假设您想省略劳动节,即
九月的第一个星期一。 你可以使用:
# 注意:SATISFY 1 是“什么都不做”的成语
REM 周一 1 月 1 日 满足 XNUMX
省略 [trigdate()]
警告: 本篇 仅由 省略 下页 劳动节,不是未来的所有劳动节。 这
可能会导致奇怪的结果,因为 忽略 上下文可以根据当前日期而改变。
例如,如果您在上述命令之后使用以下命令:
REM 星期一 消息问候后
结果不会如你所愿。 考虑制作 1992 年 XNUMX 月的日历。
劳动节是 7 年 1992 月 XNUMX 日星期一。然而,当 提醒 到
计算 8 年 1992 月 XNUMX 日星期二的触发条件, 忽略 命令现在将是
省略 1993 年的劳动节,不会触发“Mon AFTER”命令。 (但见
的描述 扫描件 在“有关触发计算的详细信息”部分中。)
最好远离计算 忽略 除非您保留这些触发日期
心中的陷阱。
对于版本 提醒 从 03.00.07 开始,您可以包含一个 味精, 跑, etc. 中的子句
a 满足 条款如下:
REM trigger_stuff SATISFY [expr] 味精主体
请注意,仅对于这种情况, 表达式 after 满足 必须 用大括号括起来。 它必须
在触发器的所有其他组件之后,紧接在 味精, 跑,
等关键词。 如果 表达式 不能满足,则不触发提醒。
因此,“13 号星期五”的例子可以更简洁地表示为:
REM 13 +2 满意 [wkdaynum(trigdate()) == 5] \
13 号星期五的味精是 %b。
您可以在奇数发生的星期一、星期三和星期四触发提醒-
月份的编号天数如下:
REM 周一 周三 周四 满意 [day(trigdate())%2] \
味精来了!!!
需要注意的是 满足 和 省略函数 通常可以用来解决相同的问题,尽管在
不同的方式。 有时一个 满足 更干净,有时 省略函数; 实验和
使用看起来更清晰的。
调试 提醒 脚本
虽然命令行 -d 选项对于调试很有用,它通常是矫枉过正的。 为了
例如,如果您打开 -dx 带有许多复杂表达式的提醒文件的选项,
你会得到大量的输出。 这 DEBUG 命令允许您控制调试
程序控制下的标志。 格式为:
DEBUG [+弗拉格森] [-旗开得胜]
弗拉格森 和 旗开得胜 由字符串“extvlf”组成,对应于
命令行选项部分中讨论的调试选项。 如果前面有一个“+”,
打开相应的调试选项组。 否则,它们将被切换
离开。 例如,您可以使用此序列来调试复杂的表达式:
调试 +x
设置一个 非常复杂的表达式(许多参数)
调试-x
“ 垃圾车 指挥
命令 垃圾车 显示内存中变量的值。 它的格式是:
垃圾车 [VAR...]
如果您提供以空格分隔的变量名称列表,则对应的变量为
显示。 如果您不提供变量列表,则内存中的所有变量都是
显示。 要转储系统变量,请将其名称放在要转储的变量列表中。 如果
你在要转储的变量列表中放一个单独的美元符号,然后是所有系统变量
将被丢弃。
“ 错误讯息 指挥
- 错误讯息 命令具有以下格式:
错误讯息 身体
- 身体 通过替换过滤器(隐式触发日期为
今天()) 并打印到错误输出流。 例子:
如果 !defined("critical_var")
ERRMSG 您必须为“critical_var”提供一个值
退出
ENDIF
“ 退出 指挥
上面的例子也展示了使用 退出 命令。 这会导致无条件
退出脚本处理。 任何排队的定时提醒都将被丢弃。 如果你在
日历模式(如下所述),则日历处理被中止。
如果您提供一个 INT-type 后的表达式 退出 命令,返回给调用者
程序作为退出状态。 否则,返回退出状态 99。
“ 冲洗 指挥
该命令仅由单词组成 冲洗 自己在一条线上。 命令刷新
使用的标准输出和标准错误流 提醒. 这并不可怕
对大多数人有用,但如果你运行可能会有用 提醒 作为另一个的子进程
程序,并希望使用管道进行通信。
日历 MODE
如果您提供 -c, -s or -p 命令行选项,然后 提醒 以“日历模式”运行。
在这种模式下, 提醒 重复解释脚本,执行一次迭代
日历中每一天的整个文件。 触发的提醒保存在内部
缓冲区,然后在适当的地方插入日历。
如果您还提供 -a 选项,然后 提醒 将不包括定时提醒
日历。
- -p 选项与 雷姆2PS 生成日历的程序
PostScript 格式。 例如,以下命令会将 PostScript 代码发送到
标准输出:
提醒-p .reminders | rem2ps
您可以通过管道将其打印到 PostScript 日历 LPR 命令。
如果您有一个名为“.reminders”的提醒脚本,并且您执行以下命令:
提醒 -c .reminders 1993 年 XNUMX 月
然后 提醒 执行脚本 31 次,一月每天一次。 每次它
执行脚本,它增加的值 今天(). 触发日期的任何提醒
火柴 今天() 被输入到日历中。
味精 和 CAL-type 提醒,默认情况下,将其整个正文插入日历。
跑-type 提醒通常不会插入到日历中。 但是,如果您附上一个
%"...%" 序列中的正文部分,仅插入该部分。 例如,
考虑以下:
REM 6 月 XNUMX 日味精 %“Dianne 的生日 %”是 %b
在正常模式下, 提醒 将在 6 月 XNUMX 日打印“Dianne 的生日是今天”。
然而,在日历模式中,只有文本“Dianne 的生日”被插入到框中
6 月 XNUMX 日。
如果你明确地使用 %"...%" 序列 跑- 类型提醒,然后是之间的文本
分隔符被插入到日历中。 如果您在 a 中使用序列 %"%" 味精 or
CAL-type 提醒,则不会为该提醒生成日历条目。
保存 变数
计划 提醒 遍历日历中每一天的脚本,操作缓慢
可能会严重降低制作日历的速度。
例如,假设您将变量“me”和“hostname”设置如下:
设置我的外壳(“whoami”)
设置主机名外壳(“主机名”)
通常情况下, 提醒 在日历模式下清除迭代之间的所有变量。 然而,如果
某些变量的计算速度很慢,并且在迭代之间不会改变,你可以
“保存”他们的价值观 保留 命令。 此外,由于函数定义是
在日历迭代之间保留,无需在每个日历迭代中重新定义它们
迭代。 因此,您可以使用以下序列:
如果 ! 定义(“初始化”)
设置初始化 1
给我设置外壳(“whoami”)
设置主机名外壳(“主机名”)
fset func(x) 复杂表达式
保留初始化我的主机名
ENDIF
操作如下:在脚本的第一次迭代中,“初始化”是
没有定义的。 因此,之间的命令 IF 和 ENDIF 被执行。 这 保留 命令
确保初始化、我和主机名的值被保留以供后续使用
迭代。 在下一次迭代中,这些命令被跳过,因为 initialized 已经
保持定义。 因此,不依赖于值的耗时操作
今天() 只做一次。
系统变量(名称以“$”开头的变量)会自动保留在
日历迭代。
请注意,为了提高效率, 提醒 缓存提醒脚本(以及任何 包括d 文件)在
制作日历时的记忆。
定时提醒按时间顺序排序并放入日历中。 这些被关注
通过非定时提醒。 提醒 自动将定时提醒的时间放在
日历根据 -b 命令行选项。 日历模式下的提醒已排序
好像 -g 选项已被使用; 您可以通过以下方式更改日历模式下的排序顺序
明确使用 -g 用于指定与默认顺序不同的顺序的选项。
重复 执行
如果您提供 重复 命令行参数,不要使用 -c, -p或 -s
期权, 提醒 以类似于日历模式的方式运行。 它反复执行
提醒脚本,递增 今天() 每次迭代。 关于相同的规则
保留变量和函数定义适用。 请注意,使用 重复 在
命令行还启用 -q 选项并禁用任何 -z 选项。 例如,如果您
想看看如何 提醒 将在下周运行,您可以输入:
提醒 .reminders '*7'
如果要打印接下来 1000 天的日期,请使用:
(echo 'banner %'; echo 'msg [today()]%') | 提醒 - '*1000'
初始化 变数 ON “ 指挥 LINE
- -i 选项用于初始化变量 提醒 命令行。 格式是
-iVAR=表达式,其中 表达式 是任何有效的表达式。 请注意,您可能必须使用引号或
转义以防止外壳解释特殊字符 表达式. 你可以有
尽可能多 -i 在命令行上根据需要选择选项,并按顺序处理它们。
因此,如果一个变量定义在一个 -i 选项,后续可以参考 -i
选项。
请注意,如果您在命令行上提供日期,则在所有选项之前不会对其进行解析
已处理。 因此,如果您使用 今天() 在任何一个 -i 表达式,它将
返回相同的值 今日真实() 而不是命令行上提供的日期。
命令行上定义的任何变量都是 罐头 与 保留 命令。
之间不应有任何空格 -i 选项和等号; 否则,
创建了只能使用 价值() or 定义()
功能。
您还可以使用以下命令在命令行上定义函数:
-iFUNC(ARGS)=定义
确保保护特殊字符免受 shell 解释。
了解更多 关于我们 后记
- PS 和 文件 提醒将 PostScript 代码直接传递给打印机。 它们的不同之处在于
该 PS-type 提醒将其正文直接传递给 PostScript 输出(在
由替换过滤器处理),而 文件-type 的主体应该简单地由
的一个文件名。 这 雷姆2PS 程序将打开名为 文件-类型提醒,
并将其内容包含在 PostScript 输出中。
PostScript 输出中包含特定日期的 PostScript 类型提醒
按优先级排序。 请注意,PostScript 命令的顺序有一个 主要
影响日历的外观。 例如,用 PostScript 代码遮蔽
如果放置了月亮符号代码,日历框将删除代码以绘制月亮符号
首先在日历中。 因此,您不应提供 PS or 文件-类型
有优先事项的提醒; 相反,您应该确保它们出现在提醒中
以正确的顺序编写脚本。 PostScript 代码应该从
背景到前景,以便前景对象正确覆盖背景对象。
如果您优先考虑这些提醒并使用降序排序运行脚本
优先级,PostScript 输出将不起作用。
特定日期的所有 PostScript 代码都包含在 保存-恢复 对。
但是,如果在一天内触发了多个 PostScript 类型的提醒,则每个部分
PostScript 未包含在 保存-恢复 pair - 相反,整个身体
随附 PostScript。
PostScript 类型的提醒在任何常规操作之前由 PostScript 打印机执行
日历条目。 因此,常规日历条目将覆盖 PostScript 类型
提醒,允许您为特定日期创建阴影或图形背景。
在执行 PostScript 代码之前,PostScript 坐标系的原点是
位于日历中“框”的左下角,表示
今天(). 这个位置正好在底部和
左边的黑线描绘了盒子 - 你可能需要考虑这些的厚度
计算位置时的线。
您提供的 PostScript 代码可以使用多个 PostScript 变量。 全部
距离和大小变量以 PostScript 单位(1/72 英寸)为单位。变量为:
行宽
构成日历的黑色网格线的宽度。
Border 网格线中心与用于打印的空间之间的边界
日历条目。 此边框通常是空白区域。
BoxWidth 和 BoxHeight
日历框的宽度和高度,从黑色的中心到中心
网格线。
收件箱高度
从底部黑色网格线中心到常规顶部的高度
日历输入区。 从这里到盒子顶部的空间仅用于
画出天数。
/DayFont、/EntryFont、/SmallFont、/TitleFont 和 /HeadFont
用于绘制日期数字、日历条目、小日历的字体,
日历标题(月、年)和星期几的标题。
DaySize、EntrySize、TitleSize 和 HeadSize
上述字体的大小。 (小日历字体的大小为 而不去 定义
在这里。)例如,如果您想在常规日旁边打印希伯来语日期
日历中的数字,使用:
REM PS Border BoxHeight Border 子 DaySize 子 moveto \
/DayFont findfont DaySize scalefont setfont \
([hebday(today())] [hebmon(today())]) 显示
注意 /DayFont 和 DaySize 是如何使用的。
请注意,如果您提供 PostScript 代码,则可能会产生无效的 PostScript
文件。 在发送 PostScript 之前,务必使用 PostScript 查看器彻底测试您的 PostScript
到打印机。 您不应在 PostScript 中使用任何文档结构注释
码。
达蒙 MODE
如果使用 -z 命令行选项, 提醒 在“守护进程”模式下运行。 在这种模式下,没有
发出“正常”提醒。 相反,只有定时提醒被收集和排队,
然后在到达触发时间时发出。
此外, 提醒 每隔几分钟醒来检查修改日期
提醒脚本(命令行上提供的文件名。)如果 提醒 检测到
脚本已更改,它以守护程序模式重新执行自身,并解释更改的
脚本。
在守护进程模式下, 提醒 当它检测到系统时也会重新读取提醒脚本
日期已更改。
在守护进程模式下, 提醒 就好像 -f 选项已被使用,所以要在守护进程中运行
后台模式,使用:
提醒 -z .reminders &
如果你使用 sh or 打坏,您可能必须使用“nohup”命令来确保守护进程
注销时不会被杀死。
清除 MODE
如果您提供 -j 命令行选项, 提醒 跑进来 清除 模式. 在这种模式下,它
尝试从提醒文件中清除过期提醒。
在清除模式下, 提醒 读取您的提醒文件并通过附加创建一个新文件
“.purged”为原始文件名。 注意 提醒 决不要 编辑您的原始文件; 它
总是创建一个新的 .purged 文件。
如果你调用 提醒 针对目录而不是文件,然后创建一个 .purged 文件
对于目录中的每个 *.rem 文件。
通常情况下, 提醒 不会为 INCLUDed 文件创建 .purged 文件。 但是,如果您提供
后面的数字参数 -j, 然后 提醒 将为指定级别创建 .purged 文件
包括。 例如,如果您调用 提醒 与论点 -j2,然后是 .purged 文件
将为命令行上指定的文件(或目录)创建任何文件
它们包含的,以及这些文件包含的任何文件。 但是,.purged 文件不会
为第三级或更高级别的 INCLUDE 文件创建。
确定哪些提醒已过期非常棘手。 提醒 尽力而为,但是
您应该始终将 .purged 文件与原始文件进行比较并手动合并更改
早在。
Remind 注释 .purged 文件如下:
过期提醒的前缀为:#!P: Expired:
在以下情况下 提醒 无法可靠地确定某些内容已过期,您可以
请参阅在有问题的行之前插入的以下注释:
#!P:无法清除满足类型的提醒
#!P:下一个 IF 评估为假...
#!P:未检查 IF 块中的 REM 语句是否进行清除。
#!P:之前的 IF 评估为真。
#!P: ELSE 块中的 REM 语句未检查清除
#!P: 下一个 IFTRIG 没有触发。
#!P:未检查 IFTRIG 块中的 REM 语句是否进行清除。
#!P: 下一行已过期,但包含表达式...请验证
#!P:下一行可能已过期,但包含非常量表达式
#!P! 无法解析下一行:Some-Error-Message-Here
提醒 总是用以“#!P”开头的行注释 .purged 文件。 如果这样的行
中遇到 原版的 文件,它们不会被复制到 .purged 文件中。
排序 REMINDERS
- -g 选择原因 提醒 按触发日期、时间和优先级对提醒进行排序
发行它们。 请注意,提醒仍然按照遇到的顺序计算
脚本。 但是,它们不是立即发布,而是保存在内部
缓冲。 什么时候 提醒 已完成处理脚本,它发出保存的提醒
排序的顺序。 这 -g 选项后面最多可以跟四个字符,这些字符都必须是“a”
或“d”。 第一个字符指定按触发日期的排序顺序(升序或
降序),第二个指定按触发时间排序,第三个指定
按优先级排序。 如果第四个字符是“d”,则不定时提醒是
在定时提醒之前排序。 默认是按升序对所有字段进行排序,并且
在定时提醒之后对不定时提醒进行排序。
按照升序,最紧迫的最先发出提醒。 降序排列
是相反的。 提醒始终按触发日期排序,并且具有相同的提醒
然后触发日期按触发时间排序。 如果两个提醒具有相同的日期并且
时间,然后优先级用于打破关系。 具有相同日期、时间和
优先级按照遇到的顺序发出。
您可以定义一个名为 SORTANNER 的用户定义函数,它需要一个 日期-类型
争论。 在排序模式下,会发生以下顺序:
If 提醒 注意到下一个发出提醒的触发日期与
前一个(或者如果它是第一个被发布的),那么 SORTANNER 被调用
触发日期作为其参数。 结果被强制转换为字符串,并通过
具有适当触发日期的替换过滤器。 然后显示结果。
这是一个示例 - 考虑以下片段:
# 关闭正常横幅
横幅 %
REM 11 年 1993 月 1 日 ++XNUMX 味精 没那么重要
REM 17 年 1993 月 7 日 ++XNUMX 未来的味精方式
REM 10 年 1993 月 XNUMX 日 MSG 重要提醒
REM 11 年 1993 月 1 日 ++XNUMX 味精 不那么重要 - B
FSET sortbanner(x) iif(x == Today(), \
"***** 今天要做的事情 *****", \
"----- 要做的事情 %b -----")
运行这个 -gaa 10 年 1993 月 XNUMX 日的选项产生以下输出:
***** 今天要做的事情 *****
重要提醒
----- 明天要做的事情 -----
没那么重要
没那么重要-B
----- 7天后要做的事情 -----
未来的路
您可以使用 参数() 用于确定 SORTANNER 是否已被
定义。 (例如,这可以用于为 SORTANNER 提供默认定义
在包含在用户文件末尾的系统范围文件中。)这是一个示例:
# 如果还没有,则创建一个默认的 sortbanner 函数
# 已定义
如果 args("sortbanner") != 1
fset sortbanner(x) "--- 要做的事情 %b ---"
ENDIF
MSGPREFIX() AND 消息后缀()
您可以在脚本中定义两个函数,称为 消息前缀() 和 消息后缀()。 他们
每个都应该接受一个参数,一个从 0 到 9999 的数字。
在正常模式下,对于 味精 - 和 无国界医生-type 提醒,以下顺序发生时 提醒
触发提醒:
o 如果 消息前缀() 已定义,则以提醒的优先级对其进行评估
争论。 结果被打印出来。 它是 而不去 通过替换
过滤。
o 打印提醒的正文。
o 如果 消息后缀() 已定义,则以提醒的优先级对其进行评估
争论。 结果被打印出来。 它是 而不去 通过替换
过滤。
这是一个示例:以下定义导致优先级 0 提醒前面有
“URGENT”,优先级 6000 的提醒以“(不重要)”开头。
fset msgprefix(x) iif(x==0, "紧急: ", \
x==6000, "(不重要) ", "")
在日历模式下(使用 -c, -s or -p options),一对类似的函数,名为
计算前缀() 和 后缀() 可以定义。 他们与所有产生的提醒一起工作
日历中的条目(即, CAL- 并且可能 跑-类型提醒以及 味精-类型
提醒。)
附注
通常,提醒正文后跟回车符。 因此,结果
消息后缀() 将出现在下一行。 如果你不想要这个,结束
带有百分号“%”的提醒。 如果您想在提醒之间留出空间,只需
包括回车(坦克(13)) 作为 消息后缀() 返回值。
If 提醒 评估有问题 消息前缀(), 消息后缀() or 排序横幅(),您将看到一个
很多错误信息。 例如,定义以下内容:
fset msgprefix(x) x/0
国外 语言 客户服务
你的版本 提醒 可能已编译为支持英语以外的其他语言。
此支持可能不完整 - 例如,所有错误和使用消息可能
还是英文的。 但是,至少,外语版本的 提醒 将
以外语输出月份和工作日的名称。 另外,替换
机制将替代适合外语而不是适合于外语的结构
英语。
外文版本 提醒 将接受英语或外语
提醒脚本中的工作日和月份名称。 但是,为了兼容
版本 提醒,您应该只在脚本中使用英文名称。 此外,如果您的
C 编译器或运行时库不是“8 位干净”或不理解 ISO-Latin
可能无法识别带有重音字母的字符集、月份或日期名称。
“ 希伯来 日历
提醒 支持希伯来日历,这是一个阴阳历。 这允许
您为犹太节日、jahrzeits(死亡纪念日)和
smachot (欢乐的场合。)
“ 希伯来 年
希伯来年有 12 个月,30 天和 29 天交替。 月份是:Tishrey,
Heshvan、Kislev、Tevet、Shvat、Adar、Nisan、Iyar、Sivan、Tamuz、Av 和 Elul。 在圣经中
有时,这一年始于尼散月,但现在庆祝犹太新年(犹太新年)
Tishrey 的 1 日和 2 日。
以19年为周期,有7个闰年,分别是闰年的第3年、第6年、第8年、第11年、第14年、第17年和第19年
周期。 在闰年,在 Adar 之前增加了 30 天的额外月份。 两个阿达尔
被称为 Adar A 和 Adar B。
由于某些宗教原因,这一年不能从星期日、星期三或星期五开始。 到
对此进行调整,一天从 Kislev 起飞或添加到 Heshvan。 因此,一个普通的年份可以
从 353 天到 355 天,闰年从 383 天到 385 天。
当 Kislev 或 Heshvan 短时,称为 驱逐舰,或缺乏。 长的时候就是
被称为 沙勒姆,或满。
犹太日期在日落时改变。 然而, 提醒 将在午夜更改日期,而不是
日落。 所以在日落和午夜之间的这段时间里,提醒会提前一天
真正的犹太日期。 这在实践中应该不是什么大问题。
犹太历的计算是基于阿莫斯编写的程序“hdate”
以色列耶路撒冷希伯来大学的夏皮尔。 他还提供了前面的
日历的解释。
希伯来 日期 职能
工作日(d_date)
返回对应于 日期 范围。 为了
例如,12 年 1993 月 21 日对应于 5753 Nisan 1993。因此, hebday('04/12/XNUMX')
返回21。
希布蒙(d_date)
返回对应于的希伯来月份名称 日期。 例如,
hebmon('1993/04/12') 返回“尼桑”。
hebyear(d_date)
返回对应的希伯来年份 日期. 例如,hebyear('1993/04/12')
返回5753。
hebdate(i_day, s_hebmon [,id_yrstart [,i_jahr [,i_aflag]]])
- 日期() 函数是希伯来语支持函数中最复杂的。 它可以
取 2 到 5 个参数。 它返回一个 日期 对应于希伯来日期。
- 天 参数范围可以从 1 到 30,并指定希伯来语的日期
月。 这 希蒙 参数是一个必须命名希伯来月份之一的字符串
上面指定。 请注意,月份必须完整拼写,并使用
前面显示的英文音译。 您还可以指定“Adar A”和“Adar
B." 月份名称不区分大小写。
- 你的开始 参数可以是 日期 或 INT. 如果是一个 日期,则
日期() 扫描该日期或之后的第一个希伯来日期。 例如:
hebdate(15, "尼桑", '1990/01/01')
返回 1990/03/30,因为这是 15 Nisan 在 1 或之后的第一次出现
January 1990.
If 你的开始 是一个 INT,它被解释为希伯来年。 因此:
hebdate(22, "Kislev", 5756)
返回 1995/12/15,因为该日期对应于 22 Kislev, 5756。请注意
希伯来语日期函数都不适用于外部日期 提醒的 正常
日期范围。
If 你的开始 未提供,默认为 今天().
- 年 修改行为 日期() 如下:
If 年 为 0(默认值),则 日期() 一直扫描直到找到日期
完全满足其他参数。 例如:
hebdate(30, "Adar A", 1993/01/01)
返回 1995/03/02,对应 30 Adar A,5755,因为那是下一个
30 年 1 月 1993 日之后出现 XNUMX Adar A。这种行为适用于
Purim Katan,仅在闰年出现。
If 年 为1,则修改日期如下:
o 30 Heshvan 在 Heshvan 被转换为 1 Kislev 的年份 驱逐舰
o 30 Kislev 在 Kislev 被转换为 1 Tevet 的年份 驱逐舰
o 30 Adar A 在非闰年转换为 1 Nisan
o Adar A 中的其他日期移至非 Adar 中的相应日期
闰年
这种行为适用于 smachot(欢乐的场合)和一些 jahrzeits
- 见“JAHRZEITS”。
if 年 为2,则修改日期如下:
o 30 Kislev 和 30 Heshvan 转换为 29 Kislev 和 29 Heshvan,
分别,如果月份是 驱逐舰
o 30 Adar A 在非闰年转换为 30 Shvat
o Adar A 中的其他日期移至非 Adar 中的相应日期
闰年
if 年 不是 0、1 或 2,它被解释为希伯来年份,并且行为是
按照下一节“JAHRZEITS”中的说明计算。
- 一只旗 参数修改 Adar 中日期函数的行为
闰年。 这 一只旗 is 仅由 如果使用 你的开始 是一个 日期 类型。
- 一只旗 仅在以下情况下影响日期计算 希蒙 被指定为“Adar”。 在飞跃
年,遵循以下算法:
o 如果 一只旗 为 0,则在 Adar B 中触发日期。这是默认值。
o 如果 一只旗 为 1,则在 Adar A 中触发日期。这可能是
适合阿什肯纳兹传统中的 jahrzeits; 咨询拉比。
o 如果 一只旗 为 2,则日期在 a 的 Adar A 和 Adar B 中都被触发
闰年。 一些德系犹太人在 Adar A 和 Adar B 中都执行 jahrzeit。
雅尔采茨
jahrzeit 是对某人死亡的年度纪念。 它通常发生在
死亡周年纪念日,但如果埋葬延迟可能会延迟 - 请咨询拉比
更多信息。
此外,由于有些月份的长度会发生变化,因此不清楚是哪一天
忌日是。 使用以下规则:
o 如果死亡发生在 30 Heshvan,并且 Heshvan 是在死后一年
驱逐舰,然后在 Heshvan 年的 29 Heshvan 观察到 jahrzeit
驱逐舰. 否则,当 Heshvan 处于 驱逐舰.
o 如果死亡发生在 30 Kislev,并且死亡后一年的 Kislev
驱逐舰,然后在 Kislev 的年份中观察到 29 Kislev 的 jahrzeit 驱逐舰.
否则,当 Kislev 是 驱逐舰.
o 如果死亡发生在 1-29 Adar A,则在非闰年观察到 1-29 Adar。
o 如果死亡发生在 Adar A 30 日,则在非闰年的 30 Shvat 观察到死亡。
为 年 参数导致正确的行为是
被选为当年死亡。 您可能还需要指定 一只旗,取决于你的
传统。
jahrzeit 信息由 Frank Yellin 提供,他引用了“综合
亚瑟·斯皮尔的《希伯来历法》和 EM Reingold 的《历法计算》和
纳胡姆·德肖维茨。
带外 REMINDERS
- 特别 关键字用于将“带外”信息传输到 提醒 后端,例如
as 提醒 or 雷姆2PS. 它们仅在从一个管道传输数据时使用 提醒 -p 线。 (笔记
COLOR special 是一个例外; 它降级到相当于味精 提醒的
正常操作模式。)
各种种类 特别s 识别对于每个后端都是特定的; 但是,有三个
特别s 所有后端都应该尝试支持。 他们目前支持
雷姆2PS, 提醒 和 雷姆2html.
- SHADE 特殊替换 阴影() 功能。 像这样使用它:
REM 周六周日特别款 128
REM Mon 特殊色号 255 0 0
- SHADE 关键字后跟一个或三个数字,从 0 到 255。如果一个
number 被提供,它被解释为从黑色 (0) 到白色 (255) 的灰度值。
如果提供了三个数字,则它们被解释为从最小值 (0) 到
最大 (255)。 上面的例子使周末变成了相当深的灰色,使星期一成为
完全饱和的红色。 (这些阴影出现在由 雷姆2PS, 提醒 和
雷姆2html.)
- MOON 特殊替换 月亮() 功能。 像这样使用它:
快速移动 [月日(0)] 特别月亮 0
快速移动 [月日(1)] 特别月亮 1
快速移动 [月日(2)] 特别月亮 2
快速移动 [月日(3)] 特别月亮 3
这些在各种日历上画出小月亮。 的完整语法 MOON 特别
如下:
...特殊月相 Moonsize 字体大小 msg
相 是一个从 0 到 3 的数字,其中 0 代表新月,1 代表第一季度,2 代表
满月和 3 最后一个季度。
月大 是要绘制的月球的直径,以 PostScript 为单位。 如果省略或提供
为-1,后端选择合适的大小。
字体大小 是以 PostScript 为单位的字体大小 味精
Msg 是放置在月亮字形附近的附加文本。
请注意,只有 雷姆2PS 后端支持 月大 和 字体大小; 其他后端使用
固定尺寸。
- 颜色 special 可让您在日历中放置彩色提醒。 像这样使用它:
REM ... SPECIAL COLOR 255 0 0 这是一个鲜红色的提醒
REM ... SPECIAL COLOR 0 128 0 这是深绿色的提醒
您可以使用美式(“COLOR”)或英式(“COLOUR”)拼写 COLOR。 这
手册将使用美国方式。
紧跟在 COLOR 之后的应该是 0 到 255 范围内的三个十进制数字
分别指定红色、绿色和蓝色强度。 该行的其余部分是
要放入日历的文本。
COLOR special 是“双重特殊”,因为在其正常操作模式下, 提醒 对待
一种特殊的颜色,就像一个味精类型的提醒。 此外,如果您调用 提醒 - -cc...,
然后它近似于您终端上的特殊颜色提醒。
- 周 special 允许您在日历中放置诸如周数之类的注释。 为了
例如,这将使用 ISO 8601 周数为每个星期一编号。 周数是
显示如下:“(Wn)”,但您可以在
周关键字。
REM 星期一特别周 (W[weekno()])
其他条款
指挥 缩写
以下标记可以缩写:
o 快速眼动 可以省略 - 如果不存在其他有效命令,则暗示。
o 清除-省略-上下文 - > CLEAR
o 推送-忽略-上下文 - > 推雪
o POP-OMIT-上下文 - > POP
o 垃圾车 - > DUMP
o BANNER - > 禁止
o 包括 - > INC
o 扫描件 - > SCAN
漂亮的 示例
本节是您可以使用的示例 提醒.
REM 5 年 1991 月 14 日 00:45 +30 *XNUMX \
RUN mail -s "在 %2 开会" $LOGNAME
5 年 1991 月 2 日,此提醒将在下午 00:1 向您发送下午 15:XNUMX 会议的提醒,
1:45 和 2:00。 邮件的主题是“下午 2:00 开会”,正文
的消息将是空白的。
REM AT 17:00 RUN echo "5:00pm - GO HOME!" | xless -g +0+0 &
此提醒将在每天下午 5:00 弹出一个 xless 窗口。 xless 窗口将
包含“5:00pm - GO HOME!”行
REM AT 23:59 RUN(睡眠 120;提醒 -a [filename()])&
此提醒将在午夜前一分钟运行。 会引发新的 提醒 流程
从午夜过后一分钟开始。 这使您可以拥有持续的提醒服务
这样您就可以通宵工作,并且仍然可以在清晨收到定时提醒。
请注意,如果您运行,则不再需要此技巧 提醒 在守护进程模式。
提醒 -c12 /dev/null 1993 年 XNUMX 月
这种调用 提醒 将导致它打印 1993 年的日历,其中包含所有条目
留空。
REM CAL [trigdate()-日期(年(trigdate()), 1, 1)+1]
此示例在日历的每个框中放置一个条目,显示数字(1-365 或 366)
一年中的一天。
REM 2 月 4 日星期二满意 (年(trigdate())%0) == XNUMX
如果 trigvalid()
REM [trigdate()] ++5 味精 \
美国总统大选!!
ENDIF
此示例在每次美国总统选举前 5 天向您发出警告。 首先 快速眼动
命令计算 XNUMX 月第一个星期一之后的第一个星期二。 (这是
相当于 2 月 XNUMX 日或之后的第一个星期二。) 满足 条款确保
触发日期仅在选举年发布,为 4 的倍数。第二个
快速眼动 命令实际上发出了提醒。
详细信息 关于我们 触发系统 计算方式
这里是一个 概念上的 描述如何计算触发器。 注意 提醒
实际上使用了更有效的程序,但结果与
遵循了概念程序。
提醒 从当前日期开始(即 今天()) 并向前扫描,
每天检查一个,直到找到一个满足触发条件的日期,或者可以
证明没有这样的日期(在或迟于 今天()) 存在。
If 提醒 正在执行一个 满足-type 提醒,它用
触发日期() 设置为上面找到的日期。 如果表达式的计算结果为零或 null
细绳, 提醒 继续上述扫描程序,从当天开始
在上面找到触发器之后。
- 扫描件 子句(语法类似于 直到) 可以修改搜索策略
用过的。 在这种情况下, 提醒 开始扫描程序 扫描日期,这是日期
在指定 扫描件 条款。 例如:
REM Mon 1 SCANFROM 17 年 1992 月 XNUMX 日 MSG Foo
上述示例的触发日期始终为 3 年 1992 月 XNUMX 日星期一。即
因为 提醒 从 17 年 1992 月 XNUMX 日开始扫描,一旦到达就停止扫描
满足“周一 1”的日期。
主要用途 扫描件 是在你想计算位置的情况下
浮动假期。 考虑早前展示的劳动节示例。 劳动节是
九月的第一个星期一。 它可以在 7 天的范围内移动。 考虑以下
序列:
REM 1 月 7 日星期一 SCANFROM [today()-1] 满足 XNUMX
省略 [trigdate()]
REM Mon AFTER MSG 你好
- 扫描件 条款确保 提醒 从当前日期前 7 天开始扫描
日期。 这确保了今年的劳动节将继续被触发
直到它发生后 7 天。 这使您可以安全地使用 AFTER 关键字作为
所示。
一般来说,使用 扫描件 如图所示为安全可移动 省略号. 您应该扫描回来的金额
由(上例中为 7 天)取决于可能的连续数 省略
可能发生的天数,以及在可移动假期的范围内。 一般情况下,值为 7
安全。
- 从 从句的作用几乎就像对位 直到. 它可以防止提醒
从触发之前 从 日期。 例如以下提醒:
REM 周一周四 23 年 2007 月 2 日至 2007 年 XNUMX 月 XNUMX 日 MSG 测试
将在 23 年 2007 月 2 日至 2007 年 XNUMX 月 XNUMX 日期间的星期一和星期四触发。
从 真的只是语法糖; 您可以按如下方式实施上述提醒:
REM 周一周四 SCANFROM [max(today(), '2007-07-23')] \
直到 2 年 2007 月 XNUMX 日 MSG 测试
但这很难阅读。 在内部, 提醒 对待 从 完全如图所示
运用 扫描件. 因此,您不能同时使用两者 从 和 扫描件.
请注意,如果您使用一个 快速眼动 命令计算触发日期,执行日期
计算(例如加法或减法),然后使用修改后的日期
随后 快速眼动 命令,结果 五月 而不去 be 什么 意。 这是因为你
规避了正常的扫描机制。 你应该试着写 快速眼动 命令
计算触发日期,这些日期可以不加修改地在后续使用 快速眼动 命令。 这
附带的文件“defs.rem” 提醒 分发包含示例。
详细信息 关于我们 触发有效()
- 触发有效() 如果函数返回 1 提醒 可以找到前一个的触发日期
快速眼动 or 触发 命令。 更具体地说,如果它返回 1 提醒 找到一个日期 而不去 before
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 开始 日期 of 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 扫描 满足触发器。 此外,还有一个
特殊情况 触发有效() 返回 1 和 触发日期() 返回有意义的结果:
如果 快速眼动 or 触发 命令不包含 直到 条款,并包含所有
天, 月 和 年 组件,然后 提醒 将正确计算触发日期,即使
它恰好在扫描开始之前。 请注意,此行为不适用于
版本 提醒 在03.00.01之前。
使用 onworks.net 服务在线提醒