用 Logseq 记笔记,从此 Networked Thinking!

attention(2023.01.07):成文时 Logseq 0.8.15 update(2023.01.11): 将 OKR 一节重写,给出 :current-page 不稳定的一个比较麻烦的解决办法。 update(2023.01.13): 已有开源贡献者着手修复该问题,:current-page 后续应该能正常使用。

🤔动机

出于数据云上不在我手上的担忧,需要一款开源本地笔记软件,最好能通过 Git 管理源文件,还能给我提供一种记笔记的新思路。

Logseq,如其名,Log 日志,在记笔记的时候就想记日记一样,因其 [[]]#tag,就能连接起整个知识库。所有段落都是列表中的一列,每一列都是一个 block(块),所有块都可互联成网络。什么都可以记下,或是会议上的一两句话又或是今天看到的新单词,记下之后,通过互联来产生奇妙的联系,也许一个新的话题就诞生了。

当光标在一个块上,此块变为编辑态,光标移走之后成为渲染态,与传统的所见即所得有些许差别。

📝概念

Graph

graph(图谱)是你所有笔记的一个集合,可看做一个 Logseq 项目。

Journals

以每日一个文档的形式,组织起信息,就像日记。

在这里,写下所有东西吧,不论是什么。

It’s best to use your Journals pages for everything.

作为一款 networked thinking 的工具,link 自然不可或缺,可链接的最小单位是 block。

page(页面)就是块的集合,因此各个 page 中可链接块而不仅仅是 page。

链接是双向的,被链接的页面也会知道有哪些页面链接到了它,显示的结果也可进行过滤,点击图标之后,Shift+Click就能隐藏其中某个。

可用两种方式进行页面链接

  • [[Brackets]]
  • #Hashtags,or #[[wrap them between brackets]]

页面链接同时也是创建新页面的方式,并不鼓励使用其他方法创建页面。

We recommend creating pages using links, as this will ensure an entry point to them.

当然也支持外部链接,使用 Markdown 的语法:[This is external link](https://www.xxx.xxx) 。受此启发,内部链接支持别名:[This is internal link]([[InternalLink]])

可用四种方式进行块链接 ((block-id))

  • bullet(列的子弹标记)上右键复制块地址
  • 选中并拖动,按住 Alt/Option
  • 搜索 使用全局搜索(点击搜索按钮),或者内联搜索(输入((
  • 别名 [link text](((block-address)))

Embeds(Pages、Blocks → Embedded Blocks)

与 Links 不同,Embeds(嵌入)不再以超链接的形式显示,而是以块的形式展示,类似 Notion 中的同步块。页面也会以块的形式展示,同时嵌入的页面或块在背景颜色上会与普通块区分开。

嵌入的语法类似:{embed [[term/page]]}}{{embed ((60011009-ddd9-4a8c-8925-37249791f525))}}

Indentation

indentation(缩进)形成了 block 间的父子关系,也是层次的体现。

Tasks

任务管理上,有两种工作流,可在设置中进行选择:

  • LATER -> NOW -> DONE 方式 (默认)
  • TODO -> DOING -> DONE 方式

有三种内置的优先级:A、B、C(通过(/A, /B, /C 命令使用)。

允许 /Deadline/Scheduled 来规划任务执行时间,可设置重复。

默认能记载任务耗时,可在设置中关闭。

Queries

查询,就类似 SQL 一样,把 Logseq 项目看做一个数据库。

简单的查询语法为:{{query Something you're looking for}},包含与或非、简单过滤等,详见 Queries

高级的查询语法类似,详见 Advanced Queries

clojure
#+BEGIN_QUERY
{:title  [:h2 "Your query title"]
 :query  [:find (pull ?b [*])
          :where ...]
 :inputs [...]
 :view (fn [query-result] [:div ...]) ;; or :keyword from config.edn
 :result-transform (fn [query-result] ...) ;; or :keyword from config.edn
 :collapsed? true
:rules [...]}
#+END_QUERY
  • ?b?p 是特殊符号,代表了 blocks 和 pages

  • 页面名称在数据库中以全小写存储

  • 关于输入 :inputs 则还有一些特殊符号:

    • :current-page 是当前页面的名字,:current-block 是当前块的 ID,:parent-block 是当前块的双亲块的 ID
    • :today 是今日日期,:yesterday 是昨日日期,:tomorrow 是明天的日期,:Xd-before 表示距今日 X 天以前,:Xd-after 表示距今日 X 天以后
    • :Xd-before-ms 表示距此时 X 天以前的时间戳,:Xd-after-ms 表示距此时 X 天以后的时间戳,:right-now-ms 表示此时的时间戳,:start-of-today-ms 表示今日开始的时间戳,:end-of-today-ms 表示今日结束的时间戳
  • 实际上语法应该溯源到 Clojure 语言,详见 Clojure 语法

    • clojure 用括号把元素括起来,元素之间用空格隔开。clojure 解释器把第一个元素当做是函数或者宏调用,其他的元素都作为参数
    • (= 1 1) ; => true 是表判断的等于,(not true) ; => false 是表判断的不等于
    • 关键字以冒号(:)开头
  • 这些其实是 Datalog 语法: Datomic Queries and Rules

    '' literal
    "" string
    [] = list or vector
    {} = map {k1 v1 ...}
    () grouping
    | choice
    ? zero or one
    + one or more
  • 以及 Logseq schema

    • page 是特殊的 block,一个 page 可关联到多个具有相同 “:block/name” 的文件

例如,查询所有 TODO 任务:

clojure
#+BEGIN_QUERY
{:title "TODO tasks"
 :query [:find (pull ?b [*])
         :where
         (task ?b #{"TODO"})]}
#+END_QUERY

有些有用的高级查询语句可以拿来就用,本文文末附上了从各个博客中搜刮来的代码。

😎实践

Note Taking

我一般的用法:

  • 所有新页面的产生都在 Journals(日志)中使用链接方式
  • Journals 中想记啥记啥,如果是可汇总的碎片知识,可用 tag 标记起来
  • PDF 双向链接,非常激动人心:拖入文件,打开文件,标记后将自动产生块链接,粘贴即可

OKR(Objective and Key Results)

按照 OKR 工作法来进行,其实简单一个页面记载自己的愿景使命,然后写一写年度或季度的目标和关键结果就行了,任何一个笔记工具都行。

重要的是把 OKR 与 GTD 结合起来,方法就是通过 Tag 来做。

先根据愿景,建立年度或季度的目标,然后把目标拆解成一个个关键结果,对每一个关键结果赋予类似 #OKR-2023-O1-KR1 的标签。

如何达成这些关键结果呢?我们通过一个个的任务来衡量,在每个任务上面也赋予相对应的标签。

这样,进入 OKR-2023-O1-KR1 页面,就能通过高级查询得到关联的所有任务,并统计耗时等。

相关的高级查询语句,下面将给出:

OKR-2023-O1-KR1 页面的 md 文件:

clojure
- KR Review
	- query-table:: false
	  #+BEGIN_QUERY
	  {:title [:code "KR内容"]
	   :query [:find (pull ?b [*])
	         :in $ ?current-page
	         :where
	         [?p :block/name ?current-page]  ; 找到所有块的名字是 current-page 的页面 ?p
	         [?b :block/refs ?p]  ; 找到 ?p 中所有的引用块 ?b
	         ; 在当前页面的所有 Link 块中找标题中包含 KRs 的那个
	         [?b :block/page ?bp]  ; 找到 ?b 块所属于的所有页面 ?bp
	         [?bp :block/name ?bpn]  ; 找到 ?bp 中的名字是 ?bpn 的所有页面
	         [(clojure.string/includes? ?bpn "krs")]  ; ?bpn 名字要包含 krs
	  ]
	   ;; 只需修改这里的输入,全小写的当前页面标题!解决 :current-page 不稳定的问题!
	   :inputs ["okr-2023-o1-kr1"]}
	  #+END_QUERY
	- query-sort-by:: clock-time
	  query-table:: true
	  query-sort-desc:: true
	  query-properties:: [:block :clock-time]
	  #+BEGIN_QUERY
	  {:title [:code "花费时间 (秒)"]
	  :query [
	               :find (pull ?b [*])
	               :in $ ?current-page
	               :where
	                            [?p :block/name ?current-page]
	                            [?b :block/refs ?p]
	                            [?b :block/marker ?m]
	                            [(contains? #{"DOING" "DONE"} ?m)]
	  
	      ]
	      ;; 只需修改这里的输入,全小写的当前页面标题!
	      :inputs ["okr-2023-o1-kr1"]
	  }
	  #+END_QUERY
	- query-table:: false
	  #+BEGIN_QUERY
	  {:title [:code "打卡(次数)"]
	   :query [:find (count ?b)
	           :in $ ?current-page
	           :where
	           [?p :page/name ?current-page]
	           [?b :block/marker ?marker]
	           [?b :block/ref-pages ?p]
	           [(= "DONE" ?marker)]
	  ]
	      ;; 只需修改这里的输入,全小写的当前页面标题!
	      :inputs ["okr-2023-o1-kr1"]
	  }
	  #+END_QUERY
	- `花费资金`
-
- query-table:: false
  #+BEGIN_QUERY
  {:title "All DONEs"
   :query [:find (pull ?b [*])
         :in $ ?current-page
         :where
         [?p :block/name ?current-page]
         [?b :block/refs ?p]
         (task ?b #{"DONE"})]
      ;; 只需修改这里的输入,全小写的当前页面标题!
      :inputs ["okr-2023-o1-kr1"]
  }
  #+END_QUERY
- query-table:: false
  #+BEGIN_QUERY
  {:title "All DOINGs & TODOs"
   :query [:find (pull ?b [*])
         :in $ ?current-page
         :where
         [?p :block/name ?current-page]
         [?b :block/refs ?p]
         (task ?b #{"TODO" "DOING" "LATER" "NOW"})]
  ;; 只需修改这里的输入,全小写的当前页面标题!
  :inputs ["okr-2023-o1-kr1"]
  }
  #+END_QUERY

OKR-2023-O1-KRs 页面的 md 文件:

clojure
- 关键结果1 #OKR-2023-O1-KR1
- 关键结果2 #OKR-2023-O1-KR2
- 关键结果3 #OKR-2023-O1-KR3

OKR-2023 页面的 md 文件:

clojure
- |Vision|Objective|Key Results|
  |:--|:---|:---|
  |愿景1|目标1| {{embed [[OKR-2023-O1-KRs]] }} |
  |愿景2|目标2| {{embed [[OKR-2023-O2-KRs]] }} |
  |愿景3|目标3| {{embed [[OKR-2023-O3-KRs]] }} |
  |愿景4|目标4| {{embed [[OKR-2023-O4-KRs]] }} |
- query-table:: true
  #+BEGIN_QUERY
  {:title [:code "相关任务花费时间 (秒)"]
    :query [
  	               :find (pull ?b [*])
  	               :in $ ?current-page
  	               :where
                                ;找到所有包含 current-page 字段的页面
  	                            [?p :block/name ?bn]
                                [(clojure.string/includes? ?bn ?current-page)]
  	                            ;找到这些页面中的所有任务
                                [?b :block/refs ?p]
  	                            [?b :block/marker ?m]
  	                            [(contains? #{"DOING" "DONE"} ?m)]
  	      ]
  	      ;; 只需修改这里的输入,全小写的当前页面标题!解决 :current-page 不稳定的问题!
  	      :inputs ["okr-2023"]
  }
  #+END_QUERY

OKR 页面的 md 文件:

markdown
- **愿景使命**
	- 愿景1
	- 愿景2
	- 愿景3
	- 愿景4
- **历年 OKR**
	- {{embed [[OKR-2023]]}}

于是形成了 OKR 的管理工具:

  • OKR 页面:历年 OKR

    • OKR-2023 页面:所有 O(目标)
      • OKR-2023-O1-KRs 页面:O1 的所有 KR(关键结果)
        • OKR-2023-O1-KR1 页面:所有 O1 的 KR1 相关的任务
        • ……
      • ……
    • ……

    OKR 页面:

    Untitled

OKR-2023 页面中相关任务花费:

Untitled

GTD(Get Things Done)

按照时间四象限,重要、紧急来做任务管理。

重要程度按照 OKR 相关与否 + 优先级ABC 判断,紧急程度按照 DOING 还是 TODO 区分。

参考了 https://github.com/cannibalox/logtools ,拷贝了其中关于 eisenhower matrix 的相关样式,并做了一定的修改。

然后,将修改后的 css 样式写入 custom.css,可在设置中选择后,进入编辑页面粘贴,也可直接打开源文件编辑。

我对四象限的样式做了改动,详细的 custom.css 文件文末附,做的改动如下:

  • 取消四叶草的颜色,不着色,但添加灰色边框,增加了每个格子高度
  • 取消嵌入页面的背景颜色,不突出
  • 删除高级查询的表格转换按钮
  • 删除四象限中所有的圆点标记
  • 移动任务列表和标题的位置

在第一个块中输入 #.v-eisenhower-matrix ,然后在四个子块中,分别嵌入页面类似 {{embed [[📅 在做计划事项]]}} 即可,每个页面的高级查询代码文末附,最终效果:

Untitled

**自己怎么编辑样式呢?**可输出 公开页 查看。注意导出的时候,需要设置页面属性为 public,可手动输入 public:: true,也可通过右上角的菜单选择“导出 HTML 时发布本页面”。更方便一点,可在设置中直接选择“发布所有页面”,我采取这种方式。

Untitled

导出图谱,选择“导出公开页”

导出图谱,选择“导出公开页”

Untitled

插件

推荐安装排名靠前的几个插件,如 Agenda 、Tabs、Tags Bullet Threading、Journals Calendar、Todo list 等。

🤗总结

  • Journal 就是你的一切,所有琐碎的东西,都在那里
  • Page 是你能连接知识,形成有趣的东西,通过 link 创建
  • 就像 Notion 一样,输入 / 就有相应的提示
  • 以 md 文件的形式存储,编辑器自然支持 Markdown 语法,比如表格等
  • Logseq 可完成 Note-taking、OKR、GTD 三大项任务,语法速查表见 https://docs.logseq.com/#/page/markdown

🫰附

任务管理:查询标签包含 OKR 字符的所有在做任务(重要紧急)

只要在创建的任务后面跟上 OKR 标记即可,如 DOING 正在看电视 #2023-OKR-2023

clojure
#+BEGIN_QUERY
{:query [:find (pull ?b [*])
         :where
         [?b :block/marker ?marker]
         (not (not [?b :block/ref-pages ?p]
         [?p :page/name ?page-name]
         [(clojure.string/includes? ?page-name "okr")])
         (not [?b :block/priority ?priority]
         [(contains? #{"A" "B" "C"} ?priority)]))
         [(contains? #{"DOING" "NOW"} ?marker)]]
 }
#+END_QUERY

对应不包含 OKR 标签的所有在做任务(不重要紧急):

clojure
#+BEGIN_QUERY
{:query [:find (pull ?b [*])
         :where
         [?b :block/marker ?marker]
         (not [?b :block/ref-pages ?p]
         [?p :page/name ?page-name]
         [(clojure.string/includes? ?page-name "okr")])
         (not [?b :block/priority ?priority]
         [(contains? #{"A" "B" "C"} ?priority)])
         [(contains? #{"DOING" "NOW"} ?marker)]]
 }
#+END_QUERY

任务管理:查询标签包含 OKR 字符的所有待办任务(重要不紧急)

只要在创建的任务后面跟上 OKR 标记即可,如 TODO 正在看电视 #2023-OKR-2023

clojure
#+BEGIN_QUERY
{:query [:find (pull ?b [*])
         :where
         [?b :block/marker ?marker]
         (not (not [?b :block/ref-pages ?p]
         [?p :page/name ?page-name]
         [(clojure.string/includes? ?page-name "okr")])
         (not [?b :block/priority ?priority]
         [(contains? #{"A" "B" "C"} ?priority)]))
         [(contains? #{"TODO" "LATER"} ?marker)]]
 }
#+END_QUERY

对应不包含 OKR 标签的所有待办任务(不重要不紧急):

clojure
#+BEGIN_QUERY
{:query [:find (pull ?b [*])
         :where
         [?b :block/marker ?marker]
         (not [?b :block/ref-pages ?p]
         [?p :page/name ?page-name]
         [(clojure.string/includes? ?page-name "okr")])
         (not [?b :block/priority ?priority]
         [(contains? #{"A" "B" "C"} ?priority)])
         [(contains? #{"TODO" "LATER"} ?marker)]]
 }
#+END_QUERY

如果代码粘贴过程出现样式问题,使用 VSCode 纯文本格式作为中间人,其他格式会出错。

任务管理:查询标签等于当前页面名称的所有任务

参考 https://docs.logseq.com/#/page/advanced queries 中的第 8 个例子。

查询标签等于当前页面名称的所有待办、正在办的任务:

clojure
#+BEGIN_QUERY
{:title "All DOINGs & TODOs"
 :query [:find (pull ?b [*])
       :in $ ?current-page
       :where
       [?p :block/name ?current-page]
       [?b :block/refs ?p]
       (task ?b #{"TODO" "DOING" "LATER" "NOW"})]
 :inputs [:current-page]}  ; 注意这个值不稳定,可手动输入当前页面全小写字符串
#+END_QUERY

查询标签等于当前页面名称的所有完成的任务:

clojure
#+BEGIN_QUERY
{:title "All DONEs"
 :query [:find (pull ?b [*])
       :in $ ?current-page
       :where
       [?p :block/name ?current-page]
       [?b :block/refs ?p]
       (task ?b #{"DONE"})]
 :inputs [:current-page]}  ; 注意这个值不稳定,可手动输入当前页面全小写字符串
#+END_QUERY

我的 custom.css

css
/*===========================================================*/
/* WIP css eisenhower matrix by cannibalox v20220511 -------*/
[data-refs-self*="eisenhower-matrix"] {
    --eisen-caption-color: #fff;
    --eisen-caption-bg: #0000;
    --eisen-scrollbar-thumb: #f9f9f99e;
    --eisen-scrollbar-track: #0000;
    --eisen-outercaption-color: #979797b8;
    --eisen-todo-bgcolor: #4bad003f;
    --eisen-decide-bgcolor: #0068be5e;
    --eisen-delegate-bgcolor: #bf830054;
    --eisen-eliminate-bgcolor: #9c003e57;
    --eisen-bullet-color: #d9d9d9;
    --eisen-clover-borderstyle: none; /*eg: 3px solid white */
}
/* 在图的四周添加标题 */
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children:before {
    content: "↑ 重要";
    position: absolute;
    color: var(--eisen-outercaption-color);
    font-size: 10px;
    left: 47%;
    top: -1rem;
}
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children:after {
    content: "紧急 ←";
    position: absolute;
    color: var(--eisen-outercaption-color);
    font-size: 10px;
    left: -1rem;
    top: 48%;
}
div[data-refs-self*="eisenhower-matrix"]:before {
    content: "↓ 不重要";
    position: absolute;
    color: var(--eisen-outercaption-color);
    font-size: 10px;
    left: 48.5%;
    bottom: -0.5rem;
}
div[data-refs-self*="eisenhower-matrix"]:after {
    content: "→ 不紧急";
    position: absolute;
    color: var(--eisen-outercaption-color);
    font-size: 10px;
    right: -2rem;
    top: 50%;
}
/* 块或列 */
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>div.ls-block {
    display: inline-block;
    width: 46%;
    overflow: auto;
    margin: 5px;
    height: 22rem;
}
/* 四叶草布局样式 */
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block {
    /*border: var(--eisen-clover-borderstyle);*/
    border: 1px solid gray;
}
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block:nth-last-child(4) {
    /*border-radius: 0 2rem 0 2rem;*/
    /*background-color: var(--eisen-todo-bgcolor);*/
    background-color: transparent;
}
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block:nth-last-child(3) {
    /*border-radius: 2rem 0 2rem 0;*/
    /*background-color: var(--eisen-decide-bgcolor);*/
    background-color: transparent;
}
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block:nth-last-child(2) {
    /*border-radius: 2rem 0 2rem 0;*/
    /*background-color: var(--eisen-delegate-bgcolor);*/
    background-color: transparent;
}
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block:nth-last-child(1) {
    /*border-radius: 0 2rem 0 2rem;*/
    /*background-color: var(--eisen-eliminate-bgcolor);*/
    background-color: transparent;
}
/* clover contents */
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block>.block-children-container.flex>.block-children {
    overflow: auto;
    /* height: 16rem; */
}
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block>.block-children-container.flex>.block-children .bullet {
    background-color: var(--eisen-bullet-color) !important;
}
/* 每个块的滚动条 */
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block>.block-children-container.flex>.block-children::-webkit-scrollbar-thumb {
    background-color: var(--eisen-scrollbar-thumb);
    border-radius: 0px;
}
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block>.block-children-container.flex>.block-children::-webkit-scrollbar-track {
    background: var(--eisen-scrollbar-track);
}
/* 每个块的标题 */
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>div.ls-block>.flex.flex-row>.flex.flex-row>.flex-1>.block-content {
    font-weight: 700;
    font-size: 0.7rem;
    text-align: center;
    margin-left: -1rem;
}
/* TODO : update this
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>div.ls-block>.flex.flex-row>div>div>.block-content .page-reference {
    background: var(--eisen-caption-bg);
    border-radius: 10px;
    color: var(--eisen-caption-color);
} */
/* remove bullet of the block title */
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>div.ls-block>.flex.flex-row>div>a>.bullet-container>.bullet {
    visibility: hidden;
}
/* remove indent line ~ margin-left of table cells */
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block>.block-children-container.flex>.block-children {
    border: 0;
    margin: 0px !important;
}
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children {
    border: none;
    margin: 0px 0px 0 30px !important;
}
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>div.ls-block>.block-children-container.flex>.block-children .bullet-container:after {
    content: '';
    position: absolute;
    border-radius: 50%;
    width: 6px;
    height: 6px;
    background-color: var(--eisen-bullet-color);
    transition: transform .2s;
    opacity: 1;
}
/* fix styling for queries */
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block .custom-query,
div[data-refs-self*="eisenhower-matrix"]>.block-children-container.flex>.block-children>.ls-block .block-highlight {
    background-color: transparent;
}
div[data-refs-self*="eisenhower-matrix"] {
    font-size: 0.75em
}
/* 对高级查询的结果进行修正,删除不必要显示的行 */
/*取消四叶草的颜色*/
div[data-refs-self*="eisenhower-matrix"] .embed-page,
div[data-refs-self*="eisenhower-matrix"] .initial .content .color-level,
div[data-refs-self*="eisenhower-matrix"] .initial .query-table table .cursor {
    background-color: transparent;
}
/*删除 Results 栏*/
div[data-refs-self*="eisenhower-matrix"] .custom-query .initial >div >.flex-row,
div[data-refs-self*="eisenhower-matrix"] .custom-query >.flex >.content >.flex-row >.flex-row{
    display: none;
}

/*修改任务的位置*/
/*删除不必要的时间统计*/
div[data-refs-self*="eisenhower-matrix"] .initial .content .block-content-inner :nth-child(2){
    display: none;
}
div[data-refs-self*="eisenhower-matrix"] .initial .content .block-content-inner :nth-child(1){
    display: auto;
}
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block,
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block .custom-query,
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block .initial >div .flex,
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block .initial >div .block,
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block .initial >div .content,
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block .initial >div .content .color-level
{
    margin: 0;
    padding: 0;
}
/*删除任务的SCHEDULE和DEADLINE显示*/
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block .initial >div .content .timestamp {
    display: none;
}
/*整体任务栏的位置要左移*/
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block >.flex >.block-content-wrapper,
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block .initial >div .content{
    margin-left: -3rem;
}
/*页面名称如 2023-12-31 位置移动*/
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block .initial >div .content >div >div >div{
    margin-left: 0.5rem;
}
/*每个任务的位置移动*/
div[data-refs-self*="eisenhower-matrix"] .block-children-container >.block-children >.ls-block >.flex >.block-content-wrapper .blocks-container .block-content-inner {
    margin-left: -4rem;
}
/*修改标题位置*/
div[data-refs-self*="eisenhower-matrix"] .embed-page >section >div {
    display: none;
}
div[data-refs-self*="eisenhower-matrix"] .embed-page >section :nth-child(2) {
    margin: 0 auto;
    padding-left: 3rem;
}
/*删除圆点*/
div[data-refs-self*="eisenhower-matrix"] .bullet {
    display: none;
}
/* ---------------------------- END OF EISENHOWER MATRIX --- */

/*===========================================================*/
/* vismode icon component -----------------------------------*/
/* - replace utilities tags starting with .v-  ------------- */
a.tag[data-ref*=".v-"]:before {
    content: "🚩今日目标";
    font-size: 1rem;
    line-height: 1rem;
}
a.tag[data-ref*=".v-"]:hover:before {
    padding-right: 0.3rem;
}
a.tag[data-ref*=".v-"]:hover {
    font-size: 0.75rem;
    line-height: 0.75rem;
}
a.tag[data-ref*=".v-kanban"]:before {
    content: "\ec3f";
    font-size: 0.75rem;
    line-height: 0.75rem;
    font-family: tabler-icons;
}
a.tag[data-ref*=".v-"] {
    font-size: 0px;
    font-family: iosevka, fira code, consolas, source code pro;
    /*color: #88e165;*/
    /*background-color: #1a2d23;*/
    /*border: 1px solid #a1c65d;*/
    border-radius: 3px;
    padding: 0 2px;
}
/* headings */
.editor-inner .uniline-block:is(.h1,.h2), .ls-block :is(h1,h2) {
    margin: .4em 0;
}
.ls-block:is(.h1) {
    font-size: 2rem;
    font-weight: 900;
    color: #fff;
}
.ls-block:is(.h2) {
    font-size: 1.5rem;
    font-weight: 700;
    color: #b4b4b4;
}
.ls-block[data-refs-self*=".h"]>.flex-1.flex-row>.flex>.block-content a.tag {
    display: none
}
/*   div.flex-1 > h1:after,
  div.flex-1 > h2:after {
      content: "";
      display: block;
      border-bottom: 1px solid var(--ls-primary-text-color);
  } */
/*----------------------------end of vismode icon component--*/

参考文章

OKR + GTD + Note => Logseq

我的 Logseq 使用习惯

致谢:

标签 :
comments powered by Disqus
相关文章
beancount-gs 一款 self-hosted 复式记账程序,简化你的记账方式!

本程序将部署在 macOS 上,不使用 Docker(mac 上的 Docker 太卡了) 动机 我利用 beancount 来记账已经有一段时间了,但有些痛点问题困扰着我: 没有 web 界面,fava 真的只能用来展示和分析且不好理解,需要有一个方便记账的界面 text 记账的方式,在 vscode 插件能力有限的情况下,很容易忘记 assets 和 expenses 到底叫啥名,如果有 web 界面那么一定会好很多,一个下拉列表就可以解决 有没有解决方案,不需要自己造轮子的那种?

阅读更多
搭建起本地的 DevOps 环境

动机 自己作为独立开发者,也想体验那种写完代码效果就出来的感觉,不用又当个运维人员。 想当初 Spring Boot 程序,得手动编译,然后手动复制到目标机器,然后重启服务,可麻烦了。 因此,本地跑一套 DevOps 或者 GitOps 的系统应该会很有趣。 方案 整体方案就是通过 CNCF 等的开源软件。

阅读更多
JWT 的应用场景思考

JWT 的应用场景思考 简述 JWT JWT,全称 JSON Web Token。是一种开放标准,用于在各方之间安全传递信息,它是以 Base64 编码 json 对象的 token 。基于 token 的权限验证,与传统的 Session 认证完全不同,它不需要服务端保持 Session 记录,连用户状态都不需要关心。一旦用户登录网站,服务器就会生成 token,之后客户端每次登录时在HTTP的头信息中带上 token 即可。

阅读更多