跳转至内容
  • 最新
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
  • 太微中文教程
  • 新插件投票看板
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
太微中文论坛icon

太微中文论坛

  1. 首页信息流
  2. 版块
  3. 讨论
  4. 完全实现TiddlyWiki保存路径自动化处理

完全实现TiddlyWiki保存路径自动化处理

已定时 已固定 已锁定 已移动 讨论
技巧教程
3 帖子 1 发布者 73 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 机杼机 离线
    机杼机 离线
    机杼
    写于 最后由 机杼 编辑
    #1

    要运行和测试下面内容,请确保对你的TiddlyWiki进行了多重备份工作。我不承担任何因文章造成了任何后果的责任。请一定一定一定要备份。


    使用node.js的TiddlyWiki,里面有一个可以进行配置的条目。$:/config/FileSystemPaths,可以根据筛选器表达式,把不同的内容存放在不同的硬盘路径中。详细可查看自定义条目文件命名,但这个条目是一个配置条目,里面只能写筛选器表达式,不能写wikitext。如果只是简单的分类还好,但如果有上千个条目,或上万个条目,当我们想要在硬盘路径上有一个分类时,就需要采取其它方案了。为什么会进行分类呢?因为当windows系统面临一个文件夹里的上万个文件,很容易出现卡顿的情况。所以后期分类也许是有必要的。当然,如果超出了TiddlyWiki的承受极限和性能极限,那么更好的方式是采用多个TiddlyWiki来进行管理。

    接下来进入正题,如何进行分类。这里我以一个最简单的示例来进行说明。首先你需要准备一些带有test字段的条目,并且这些条目有不同的字段值,且可以多准备一些条目,以看到更清楚的情况。另外,对于一些markdown文件也同样适用。

    接着你需要新建一个条目,名称随意,这里我选择Filter Expression Generation,意思是用来产生筛选器表达式,里面的代码如下。

    <$list filter="[has[test]get[test]unique[]enlist-input[]]" variable="testField">
    <$set name="fieldValue" value=<<testField>> >
    <$let
    filterExpresision=`[test[$(fieldValue)$]addprefix[\]addprefix[$(fieldValue)$]]` >
    <$text text=<<filterExpresision>> />
    </$let>
    </$set>
    </$list>
    

    保存后你可以看到一些跟下面很相似的筛选器表达式的内容。

    [test[123]addprefix[\]addprefix[123]] [test[0023]addprefix[\]addprefix[0023]] [test[1111]addprefix[\]addprefix[1111]] [test[22]addprefix[\]addprefix[22]]
    

    但这个内容没有维基化处理,并不能直接拿来使用。所以我们需要用到第二个条目,条目名同样随意,我这里使用Filter Expression Button,意思是通过按钮把上面筛选器表达式的内容存储下来。里面的代码如下。

    <$wikify name="filterExpressionStorage" text={{Filter Expression Generation}} >
    <$button>
    <$let filterExpressionStorageValue={{{ [<filterExpressionStorage>search-replace:g:regexp[\n],[ ]search-replace:g:regexp[\s+],[ ]trim[]] }}} >
    <$action-setfield $tiddler="Filter Expression Storage" $field="text" $value=<<filterExpressionStorageValue>> />
    <$action-navigate $to="Filter Expression Storage"/>
    Create or Update
    </$let>
    </$button>
    </$wikify>
    

    这里我稍微解释一下,里面用到了正则表达式进行筛选替换。但不用担心,这里并没有替换什么特别的内容,只是把多余的空行和空格删除了,并去除了开头和末尾的空格,让它看起来更美观。

    ok,按下按钮,就会生成一个Filter Expression Storage条目,并把上面筛选器表达式的内容保存进去。接下来才需要对$:/config/FileSystemPaths进行处理,处理起来也非常简单,新建这个条目,如果有的话就编辑它。再把下面的内容保存进去,当然你可以有自己的其它内容。

    [subfilter{Filter Expression Storage}addprefix[test/]]
    

    这时你应该能明白了吧,subfilter会自动读取里面的值,运行里面每一个筛选器表达式,而里面的筛选器表达式又由按钮Filter Expression Button创建和保持更新。你不需要自己手动填写。而筛选器表达式的构建又来自于Filter Expression Generation。如果你是TiddlyWiki专业用户,那肯定可以举一反三,创造更多不同的用法。这里最关注的一点在于,上面的条目名不是绝对的,但你需要保持一致。你可以使用系统前缀,也可以使用自己自定义的,但一定要保持前缀。

    但还没完。那些已经存在了的条目,并不会自动更新,除非你编辑他们。但你肯定不想手动去一个个编辑里面上千个条目。因而你可以使用插件$:/plugins/kookma/commander,打开$:/Commander条目,并输入一个合适的筛选器表达式。勾选Selective operation?,再点击Select all的按钮,然后取消勾选就可以了。这会导致筛选出来的条目被修改,但只是修改时间被修改了,内容并没有被修改。这是可以接受的。

    这个时候,你再检查你的文件,你会发现他们被整齐地归类在不同的文件夹里了。


    我知道,你还有疑问。但我也想到了。如果这个筛选器很复杂怎么办,很多怎么办,难道也要一个个输入吗?那太麻烦了。所以我们可以根据上面内容实现同样的筛选器表达式构建。

    创建一个条目,名称任意,这里我使用Filter Expression Generation No Prefix,表示不加前缀,而不加前缀就可以获得正常的筛选器表达式了。

    <$list filter="[has[test]get[test]unique[]enlist-input[]]" variable="testField">
    <$set name="fieldValue" value=<<testField>> >
    <$let
    filterExpresision=`[test[$(fieldValue)$]]` >
    <$text text=<<filterExpresision>> />
    </$let>
    </$set>
    </$list>
    

    接着,我们同样创建一个按钮条目,名称随意,这里我选择Filter Expression Button No Prefix,内容如下。

    <$wikify name="filterExpressionStorage" text={{Filter Expression Generation No Prefix}} >
    <$button>
    <$let filterExpressionStorageValue={{{ [<filterExpressionStorage>search-replace:g:regexp[\n],[ ]search-replace:g:regexp[\s+],[ ]trim[]] }}} >
    <$action-setfield $tiddler="Filter Expression Storage No Prefix" $field="text" $value=<<filterExpressionStorageValue>> />
    Create or Update
    </$let>
    </$button>
    </$wikify>
    

    然后你就可以使用下面的筛选器表达式了。

    [subfilter{Filter Expression Storage No Prefix}]
    

    是不是非常简单。我在强调一下,在TiddlyWiki中,条目名并没有固定的方式,任何人都可以按他的喜好来进行不同的命名,但一定要保持名称一致。因为不一致是无法实现的。


    最后,我必须再强调,一定一定一定要进行备份。在做任何测试之前,一定要进行备份。如果你没有git备份的话,很有可能造成无法挽回后果。我不承担上述内容所造成的后果的责任。请一定要确保进行了足够多的测试和足够多的备份工作,再进行操作。对于TiddlyWiki经验不足的用户,可以考虑发贴请求其它人的帮助。

    1 条回复 最后回复
    0
    • 机杼机 离线
      机杼机 离线
      机杼
      写于 最后由 编辑
      #2

      image.png

      效果如图。

      1 条回复 最后回复
      0
      • 机杼机 离线
        机杼机 离线
        机杼
        写于 最后由 编辑
        #3

        https://talk.tiddlywiki.org/t/fully-automating-tiddlywiki-save-path-management/

        英文论坛那边我补充了一个,把日志条目放到相应的文件夹中的方法。我就不转过来了。

        1 条回复 最后回复
        0

        • 登录

        • 没有帐号? 注册

        • 登录或注册以进行搜索。
        Powered by NodeBB Contributors
        • 第一个帖子
          最后一个帖子
        0
        • 最新
        • 版块
        • 标签
        • 热门
        • 用户
        • 群组
        • 太微中文教程
        • 新插件投票看板