https://talk.tiddlywiki.org/t/unexpected-problem-with-tag-pills-on-program-startup/
另外,可参阅上面论坛的讨论,大胡子进一步优化了代码。可以从这些讨论过程中学到很多。
Forum wide moderators
https://talk.tiddlywiki.org/t/unexpected-problem-with-tag-pills-on-program-startup/
另外,可参阅上面论坛的讨论,大胡子进一步优化了代码。可以从这些讨论过程中学到很多。
这个启动时处理的标签很不错,还可以运用在语言转换上。比如对于中国,则界面显示中文。其它国家则显示英文。
还可以控制侧边栏的开关 ,因为本质上是对状态条目进行设置。
还可以做其它很多操作。比如一启动就新建一个当天条目。
总之玩法多样,多多尝试。
\procedure selectpalette(t,f)
<<f>>:
<$select tiddler=<<t>> index=<<f>> style.width="80%">
<optgroup label={{{ [<f>titlecase[]] }}}>
<$list filter="[all[tiddlers+shadows]tag[$:/tags/Palette]color-scheme<f>sort[]]">
<option value=<<currentTiddler>>><$view field="name"/> -- <$view field="description"/></option>
</$list>
</optgroup>
<optgroup label="No Color Scheme or Other Scheme">
<$list filter="[all[tiddlers+shadows]tag[$:/tags/Palette]!has[color-scheme]sort[]]">
<option value=<<currentTiddler>>><$view field="name"/> -- <$view field="description"/></option>
</$list>
</optgroup>
</$select>
\end
\procedure setpalette()
<$tiddler tiddler="apply-light-or-dark-mode">
<$let apply-mode={{{ [{$:/info/darkmode}match[yes]then{light-or-dark-mode-palette##dark}else{light-or-dark-mode-palette##light}] }}}>
<$action-setfield $tiddler="$:/palette" $value=<<apply-mode>> $timestamp="no"/>
</$let>
</$tiddler>
\end
<$eventcatcher $change=<<setpalette>>>
<<selectpalette "light-or-dark-mode-palette" "light">><br>
<<selectpalette "light-or-dark-mode-palette" "dark">>
</$eventcatcher>
<<setpalette>>
* [[$:/palette]]
** {{$:/palette}}
* [[light-or-dark-mode-palette]]
** light-mode {{light-or-dark-mode-palette##light}}
** dark-mode {{light-or-dark-mode-palette##dark}}
新建一个条目,把上面内容放进去。然后就会有列表可以选择了。选择白天模式和黑暗模式,配置的条目在light-or-dark-mode-palette
中,这会变成一个json的数据条目。条目名可以修改,但要把其它地方也修改掉,因而要么不改,要改就用批量替换修改。
如果你想启动或者刷新wiki时根据系统判断来展示的话,可以增加一个$:/tags/StartupAction/Browser
标签。通常使用TiddlyWiki搭建网站的人来说,这是比较好的。因为其它人访问你的网站时,系统可能是白天模式也可能是黑暗模式。这可以提供一个较好的阅读体验。
以上,下面是吐槽。TiddlyWiki这一点还是不太行,像Obsidian,思源笔记,或者大多数的软件,都能支持直接获取系统的黑暗模式和白天模式,完全不用自己手动刷新。其实这个方案,我见到最早的是由sttoct提出的,他也提到了要自动化处理可能需要外部js,于是就此作罢。
更新,增加了没有color-scheme字段的筛选器表达式,同时也增加了排序,没有排序看起来太混乱了。
最近玩邪恶冥刻这款卡牌游戏,忽然想到可以用TiddlyWiki开发游戏。感觉值得尝试,不需要用js,就可以处理。不过也有很多要考虑的。
有一些软件会在注册表中注册协议,像微信和steam就是。太记好像也有注册,Obsidian和思源应该都有。但不是所有软件都有。而要自己添加和修改的话,非常麻烦。所以还是算了,就用一个桌面盒子来整理吧。
另外一个是,TiddlyWiki也引入了function
函数和筛选器。使用此函数可以自定义筛选器并且传入变量。但这个我还是没搞明白。文档中没有太详细的说明。论坛那边也都是直接上来用,但没有什么好的解释说明。
目前还有一个PR,可以使用let
微件在单个变量中传递多个变量值。
TiddlyWiki其实真的非常强大,但资料也是真的少。近几年更新很快,旧的东西也保留了,新的东西在不断增加。功能也确实是越来越多了。但功能主要还是面向高级用户的,对普通人来说,还是要等封装成插件。
说来惭愧,我自以为对筛选器掌握得不错,结果在这个问题上花了三天的时间都没解决。别人在听完我的描述后,立即就给出了解决办法。我来稍微解释一下吧。
这里有两个关键的地方,一个是filter
前缀,它可以对前面筛选出来的结果进一步筛选。
假设前面筛选出了A,B,C,D四个条目,而filter后面筛选出了A,B,C三个条目,那么返回的就只会是A,B,C三个条目,相当于进一步约束了。
另一个地方则是subfilter
,这是一个建构子函数。建构子函数可以把结果转换成完成不一样的。建构子函数是我第一次确切明白是什么意思。
但这里最关键的在于前面的all[tiddlers]
,因为这个前缀有时候会是默认提供,有时候不是默认提供。比如此筛选器前面的[tmo[Project]tmo_projectState[doing]]
,就不需要加all[tiddlers]
,因为这个是默认提供的,但后面的则不是默认提供。因而在subfilter
筛选器接入的只是当前条目的tmo_projectFilter
字段。也就是此插件条目tmo_projectFilter
字段值。但很明显插件条目没有这个字段,也就是空。
[tmo[Project]tmo_projectState[doing]] :filter[all[tiddlers]subfilter{!!tmo_projectFilter}tmo_taskState[todo]count[]!match[0]]
所以上面增加了all[tiddlers]
,会是进一步约束和筛选。得出想要的结果。即筛选出项目条目并且项目条目下面的tmo_projectFilter
字段中的结果存在非空的任务条目。
[tmo[Project]tmo_projectState[doing]] :filter[subfilter{!!tmo_projectFilter}tmo_taskState[todo]count[]!match[0]]
不增加则只会筛选出项目条目,后面filter
的内容都是空,无法起到筛选的作用。
——————
上面的筛选器还可以写成另一种,也就是把后面的内容当成一个变量传递。这种方式也是可以的。
\procedure projectFilter() [all[tiddlers]subfilter{!!tmo_projectFilter}tmo_taskState[todo]count[]!match[0]]
<$list filter="[tmo[Project]tmo_projectState[doing]filter<projectFilter>]">
<$link><<currentTiddler>></$link>
</$list>
我最近用的一个桌面分组软件,转向付费了。我想到TiddlyWiki能不能实现,直接用TiddlyWiki启动桌面应用程序。不知道有没有类似的插件或尝试。
$:/plugins/mabuqian/TaskHub
插件名如上,可以在CPL上安装。
插件通过两个类型,一个是项目,一个是任务。项目与任务都是各自独立的。项目条目中有一个字段tmo_projectFilter,可以根据这个字段的值进一步扩展包含的任务。这可以允许一个项目中包含来自多个项目的任务。
简化了任务管理的复杂度。一个任务,要么是todo,要么就不是todo。没有设置其他优先级一类的判断。不是todo的话,则有三种可能,一种是done,表示已完成。一种是closed,表示已关闭,通常是没有去做,后面不想做了。一种是breakdown,表示失败,通常是去做了,但因为各种因素没有成功,所以失败了。一般来说,closed的条目可以再打开,但breakdown的条目应该重新新建一个去完成。
项目也是一样,但项目正在进行使用的是doing而非todo。
本插件重度使用了$:/plugins/nico/projectify
原有的内容,包括样式和代码等内容。但也做了同样多的修改,所以作为新插件发行。目前可以正常使用,但可能存在问题,欢迎反馈。后续会继续跟进和更新的。