为[サクラエディタ]编写TODO帳的标记时间功能

为[サクラエディタ]编写TODO帳的标记时间功能

TODO帳可以记录进度,为了把握历史进度,往往会记录状态和状态变化的时间,比如开始时间、更新时间、完成时间等。而サクラエディタ可以编写JavaScript的宏,利用本文设计的宏可以快速记入状态和时间而省去了手动输入状态和时间的麻烦。

利用SakuraEditor自带的宏命令,实现任务的开始,暂停,中止和完成状态,以及标记时间。

编写一个如下js文件

<?xml version="1.0"?>
<component>
<public>
        <method name="setAction">
                <PARAMETER name="Editor"/>
                <PARAMETER name="act"/>
        </method>
</public>

<script language="JScript">
<![CDATA[
function setAction(Editor,act)
{
    km = {"s":{"sign":"[>] ","word":"Start "},
          "f":{"sign":"[O] ","word":"Finish"},
          "c":{"sign":"[X] ","word":"Cancel"},
          "p":{"sign":"[=] ","word":"Pause "} 
         }
    Editor.MoveHistSet();
    Editor.GoLineEnd();
    Editor.SearchPrev("\\[.\\] ",4);
    Editor.Replace("\\[.\\] ",km[act]["sign"],0x084);
    Editor.MoveHistPrev();
    Editor.SearchClearMark();
    Editor.GoLineEnd();
    Editor.Char(13);

    d = new Date();
    dateString =  "" + (d.getYear()) 
        + "/" + ( '00' + (1 + d.getMonth()) ).slice( -2 )
        + "/" + ( '00' + d.getDate() ).slice( -2 )
        + " " + ( '00' + d.getHours() ).slice( -2 )
        + ":" + ( '00' + d.getMinutes() ).slice( -2 )

    Editor.InsText("\t(" + km[act]["word"] +"@" + dateString + ")");
    Editor.SearchClearMark();
    Editor.MoveHistPrev();
    Editor.MoveHistPrev();
    Editor.MoveHistPrev();
}
]]>
</script>
</component>

var oFunc = GetObject("Script:"+PATH+"setActionCore.wsc");
oFunc.setAction(Editor, "s");

将它登录到外部宏,构造如此四个外部宏,并给这四个宏指定四个快捷键(比如我指定的是Alt+S,Alt+C,Alt+F,Alt+P),即可实现。


以下为一种早期的实现方案,我觉得不够好用,已重新设计交互方式。

[collapse title=”旧方案”]

编写如下一段javascript文件保存在本地,导入至サクラエディタ作为外部宏,可以实现输入左括号以及一个大写字母(例如S,F,U,C,P)自动补全且输出当前时间。

/*
 * S: Start
 * F: Finish
 * U: Update
 * C: Cancel
 * P: Postpone
 */

Left_Sel()
Left_Sel()
prefix = GetSelectedString(0)
Right()
addMarkFlag = false

if(prefix.length &gt; 1  &amp;&amp; prefix.substr(0,1) == "(" )
{
	switch(prefix.substr(1).toUpperCase())
	{
		case 'S':
			InsText("tart@");
			addMarkFlag = true;
			break;
		case 'F':
			InsText("inish@")
			addMarkFlag = true;
			break;
		case 'U':
			InsText("pdate@")
			addMarkFlag = true;
			break;
		case 'C':
			InsText("ancel@")
			addMarkFlag = true;
			break;
		case 'P':
			InsText("ostpone@")
			addMarkFlag = true;
			break;
	}
}

d = new Date()
dateString =  "" + (d.getYear()) 
	+ "/" + ( '00' + (1 + d.getMonth()) ).slice( -2 )
	+ "/" + ( '00' + d.getDate() ).slice( -2 )
	+ " " + ( '00' + d.getHours() ).slice( -2 )
	+ ":" + ( '00' + d.getMinutes() ).slice( -2 )

InsText(dateString)

if(addMarkFlag)
{
	InsText(")")
}

将之设为一个外部宏:設定 -> 共通設定 -> マクロ,输入上述文件保存位置,保存这个外部宏。

然后设置键盘快捷键: 設定 -> 共通設定 -> キー割り当て,在“種別”里选择“外部マクロ”,选择刚才保存好的这个宏,为它设置一个键盘快捷键(如Alt+V等)。这样在文件中输入(S之后按下Alt+V就会转换成(Start@2023/06/17 16:32)

为了让TODO帐的标题行更醒目,像上图那样显示颜色,可以在設定-> タイプ別設定中设置正则式识别不同颜色,例如用/[.] .*/k指定强调色1(RGB=255,200,200),用/[[O|X]] .*/k指定强调色2(RGB=188,255,188),这样一行中输入一对方括号且方括号中有1个字符且方括号后缀一个空格的情况下这一行的字将会显示为相应的颜色,如果是O或X表示完成或被取消显示绿色,其它的状态则是进行中显示红色。

同时,TODO帐的缩进可以设计一下,在 タイプ別設定 的スクリーン里的TAB表示 ,指定为例如|---的样式。最终这样设置后的TODO帐将显示成如下样式:

[/collapse]

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注