惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
K
Kaspersky official blog
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
Recorded Future
Recorded Future
Engineering at Meta
Engineering at Meta
U
Unit 42
D
Docker
I
InfoQ
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
C
Check Point Blog
The Cloudflare Blog
美团技术团队
V
Vulnerabilities – Threatpost
博客园_首页
T
Threat Research - Cisco Blogs
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
A
Arctic Wolf
IT之家
IT之家
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Troy Hunt's Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
人人都是产品经理
人人都是产品经理
C
Cyber Attacks, Cyber Crime and Cyber Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Schneier on Security
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
P
Privacy International News Feed
云风的 BLOG
云风的 BLOG
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
The Last Watchdog
The Last Watchdog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
The Register - Security
The Register - Security
博客园 - 三生石上(FineUI控件)
Forbes - Security
Forbes - Security
NISL@THU
NISL@THU
Y
Y Combinator Blog
T
Threatpost
Microsoft Azure Blog
Microsoft Azure Blog
L
Lohrmann on Cybersecurity

暗无天日

读:AI Agent 安全日志——从可见性与隐私的两难说起 - 暗无天日 读:AI Agent 生产化——一份从原型到上线的速查清单 - 暗无天日 AI写作的语言指纹——如何让文字不那么像机器 - 暗无天日 读:50 条 Claude Code 技巧——一个工程经理的六个月使用心得 读:AI 辅助开发为什么让 E2E 测试更有价值 - 暗无天日 读:在Emacs中使用Claude Code(Spacemacs适配版) - 暗无天日 Claude Code 背后的工程哲学——读 Agent Harness Engineering 读:Agent Harness Engineering——AI 智能体不只是模型,还有套件 - 暗无天日 browser-harness:让 AI 直接接管你的浏览器 - 暗无天日 读:Security-First CI/CD —— DevSecOps 自动化实践指南 TIL: 数字小键盘的小数点陷阱与行内算术求值 - 暗无天日 读:Immutability 不是万能药,它是一种权衡 - 暗无天日 Conducty:给 Claude Code 加上项目记忆和并行执行能力 - 暗无天日 读 — GitHub Trending 里的 Claude Code 技能包 读 — Prompt Caching 省钱指南 TIL: Emacs 中那些跟鼠标配合的冷门快捷键 - 暗无天日 读:Anvil——把 Emacs 变成 AI 的工具服务器 读:Emacs 代码折叠终极指南 - 暗无天日 读:Clojure 搭车客指南 - 暗无天日 git推送失败后恢复仓库损坏的完整记录 - 暗无天日 多智能体系统的两个有效模式——以及对 Claude Code 用户的启示 - 暗无天日 用 Org Babel 写 Literate 博文:扩展执行 + 定制导出 proced:Emacs 内置的进程查看器 - 暗无天日 从 proced 定制中学到的 Elisp 模式 读:让 Emacs proced 在 macOS 上显示 CPU 和内存 异步编程的函数着色税 - 暗无天日 链式调用的代价:JavaScript 和 Clojure 的共同教训 - 暗无天日 hyperfine:命令行基准测试工具 - 暗无天日 管道中的变量去哪了?——子 shell 作用域陷阱 - 暗无天日 开源包装器的信任陷阱:四个危险信号 - 暗无天日 程序员愿意为 AI 写文档,却不愿为同事写 - 暗无天日 mktemp: Shell 脚本中临时文件的安全陷阱与最佳实践 - 暗无天日 WSL9x —— 在 Windows 9x 里跑 Linux 内核 6.19 用 ox.el 做你想做的事 —— org-export 高级编程指南 读:Hot-wiring the Lisp Machine —— 用纯 Elisp 构建零依赖的 Org 静态站点生成器 Elisp 性能优化的六个实战教训 - 暗无天日 fcitx5 下 Emacs 无法切换输入法的排查 - 暗无天日 ERT 测试交互命令的三种方式 - 暗无天日 SEM Assistant: 当 Elisp 守护进程遇上 LLM 用 dmsg 给 Elisp 加上结构化调试日志 用 org-habit 追踪非每日习惯 - 暗无天日 Clojure X-Men:当编程语言特性变成超能力 - 暗无天日 TIL: 用 diff-hl 在 fringe 中显示 git 变更 读:llm-test —— 用 LLM agent 驱动 Emacs 测试 TIL: AI 时代的橡皮鸭调试 - 暗无天日 fcitx 启动后键盘输入卡顿的排查 - 暗无天日 TIL: 早期网页的图片热区导航 - 暗无天日 读 Seeing the Whole System 用 Emacs 自动生成每周链接推荐 - 暗无天日 读:ASCII control characters in my terminal 读 What to learn - 暗无天日 Lisp 的括号之痛——一个愚人节玩笑揭开的老伤疤 - 暗无天日 一本书该"线性读"还是"并行读" - 暗无天日 读 How to Monetize a Blog:一篇伪装成变现指南的讽刺文 Python Mock 第三方依赖的四种策略 - 暗无天日 Emacs Lisp 热重载实用指南 - 暗无天日 Prot 的 Emacs 配置哲学 - 暗无天日 TIL: 从直播对谈中学到的三个 Emacs 技巧 - 暗无天日 TIL: 自动使用项目虚拟环境的 Python - 暗无天日 TIL: 让 Help buffer 自动获得焦点 一条命令让本地开发用上 HTTPS —— slim 工具介绍 用 fsck 检查和修复 Linux 文件系统 排查Linux进程"卡死"实战:从strace到gdb全流程 - 暗无天日 PostgreSQL 索引:从基础到你可能不知道的高级用法 - 暗无天日 用 .pdbrc 自定义 Python 调试器 ANSI 转义码的标准化现状 - 暗无天日 终端程序的潜规则 - 暗无天日 AI越强越辣鸡?控制论说这是必然的 - 暗无天日 AI 越强越需要你盯着——反馈循环实操指南 - 暗无天日 你的AI代理正在偷你的密钥——四种你没想到的泄露通道 - 暗无天日 LLM 在 DevOps 中的三种角色 - 暗无天日 写作风格的反建议 - 暗无天日 反驳本质复杂性——Dan Luu 论为什么《没有银弹》错了 - 暗无天日 文件充满了危险——Dan Luu 谈文件系统的可靠性陷阱 - 暗无天日 AI 时代的 PARA 方法:用 Org-mode 和 AI 打造个人知识管理系统 Linux 数据去重学习笔记 - 暗无天日 创建跨平台 ZIP 文件的隐藏陷阱:Extra Field - 暗无天日 X11 Forwarding 排障指南 - 暗无天日 IP欺骗端口扫描:当别人冒充你去扫描别人 - 暗无天日 Linux 输入栈全景解析:从硬件按键到屏幕响应 - 暗无天日 Unix 系统中那些被埋没的配置开关——以 FontConfig 为例 - 暗无天日 在Linux上限制儿童使用电脑 - 暗无天日 GIF不仅仅是一种图片格式——用GIF流做些奇怪的事 - 暗无天日 Leiningen 学习笔记:Clojure 项目构建与管理从入门到实战配置 - 暗无天日 Google SRE Book 读书笔记 - 暗无天日 yes 管道 head 发生了什么 - 暗无天日 为什么 nohup 在 crontab 中不起作用 Bash中的Indirection与Nameref - 暗无天日 Linux PAM 简介 - 暗无天日 从Linux ISO文件启动计算机 - 暗无天日 用 Bash 打造一个Screen Locker 用GitHub Actions自动构建EGO博客 - 暗无天日 blocking I/O 的作用 - 暗无天日 mobileog 手机端同步提示Error:2 No such file 的解决方法 回收 WSL2 VHDX 文件占用空间 使用 org-mode columnview 生成任务列表 - 暗无天日 Emacs 作为 MPD 客户端 - 暗无天日 移动文件路径却不破坏org file link的方法 - 暗无天日 如何合理的导出help link 成HTML - 暗无天日 笑话理解之Biology - 暗无天日
PARA Org-mode 测试配置 - 暗无天日
2026-04-16 · via 暗无天日

前置说明

这份配置用于测试博文《AI 时代的 PARA 方法》中的 Org-mode PARA 实现。 使用方式:

  1. 先执行 创建目录结构 中的 shell 代码块(=C-c C-c=)
  2. Emacs 配置 中的代码加入你的 init.el*scratch* buffer 执行
  3. M-x org-capture 测试四个模板
  4. C-c C-w (org-refile) 测试归档

基础目录设为 ~/我的笔记 ,可按需修改 org-para-base-dir

创建目录结构

PARA_DIR="$HOME/org"

mkdir -p "$PARA_DIR/projects/2026-博客重构"
mkdir -p "$PARA_DIR/projects/2026-Anki插件开发"
mkdir -p "$PARA_DIR/areas/健康"
mkdir -p "$PARA_DIR/areas/财务"
mkdir -p "$PARA_DIR/areas/职业"
mkdir -p "$PARA_DIR/resources/emacs"
mkdir -p "$PARA_DIR/resources/python"
mkdir -p "$PARA_DIR/resources/linux"
mkdir -p "$PARA_DIR/archives"

cat > "$PARA_DIR/projects/inbox.org" << 'EOF'
#+TITLE: Projects Inbox
#+FILETAGS: :project:

* Projects Inbox
EOF

cat > "$PARA_DIR/areas/inbox.org" << 'EOF'
#+TITLE: Areas Inbox
#+FILETAGS: :area:

* Areas Inbox
EOF

cat > "$PARA_DIR/resources/inbox.org" << 'EOF'
#+TITLE: Resources Inbox
#+FILETAGS: :resource:
EOF

touch "$PARA_DIR/journal.org"

cat > "$PARA_DIR/projects/2026-博客重构/index.org" << 'EOF'
#+TITLE: 2026 博客重构
#+FILETAGS: :project:

* TODO 重新设计博客首页
  SCHEDULED: <2026-04-20 日>
* TODO 迁移到新的静态站点生成器
* DONE 梳理现有文章分类
  CLOSED: [2026-04-10 四]
EOF

cat > "$PARA_DIR/projects/2026-Anki插件开发/index.org" << 'EOF'
#+TITLE: 2026 Anki 插件开发
#+FILETAGS: :project:

* TODO 调研 Anki 插件 API
* TODO 设计卡片模板系统
* INPROGRESS 编写核心功能代码
EOF

cat > "$PARA_DIR/areas/健康/index.org" << 'EOF'
#+TITLE: 健康
#+FILETAGS: :area:

* 每周运动目标:3 次
* 年度体检:每年 Q1
* TODO 预约牙科检查
EOF

cat > "$PARA_DIR/areas/财务/index.org" << 'EOF'
#+TITLE: 财务
#+FILETAGS: :area:

* TODO 完成 2025 年度报税
  DEADLINE: <2026-05-31 日>
* 每月记账复盘
EOF

cat > "$PARA_DIR/resources/emacs/index.org" << 'EOF'
#+TITLE: Emacs 学习笔记
#+FILETAGS: :resource:

* Org-mode 技巧
** 使用 columnview 生成任务报表
** org-roam 双向链接配置
* Elisp 常用模式
** advice-add / advice-remove
** defmacro 与 defun 的区别
EOF

echo "PARA 目录结构创建完成:"
echo ""
tree "$PARA_DIR" 2>/dev/null || find "$PARA_DIR" -type f | sort
PARA 目录结构创建完成:             /home/lujun9972/org       ├── archives     ├── areas     │   ├── inbox.org   │   ├── 健康   │   │   └── index.org │   ├── 职业   │   └── 财务   │   └── index.org   ├── journal.org     ├── projects     │   ├── 2026-Anki插件开发   │   │   └── index.org │   ├── 2026-博客重构   │   │   └── index.org │   └── inbox.org   └── resources     ├── emacs     │   └── index.org   ├── inbox.org     ├── linux     └── python             13 directories, 9 files

Emacs 配置

(defvar org-para-base-dir "~/org"
  "PARA 方法的根目录。")


(setq org-todo-keywords
      '((sequence "TODO(t)" "INPROGRESS(i)" "|" "DONE(d)" "CANCELLED(c)")))


(setq org-capture-templates
      `(("p" "Project - 项目任务" entry
         (file+headline ,(expand-file-name "projects/inbox.org" org-para-base-dir)
                        "Projects Inbox")
         "* TODO %?\n  %U\n  %a\n  %i"
         :empty-lines 1)

        ("a" "Area - 领域任务" entry
         (file+headline ,(expand-file-name "areas/inbox.org" org-para-base-dir)
                        "Areas Inbox")
         "* TODO %?\n  %U\n  %a\n  %i"
         :empty-lines 1)

        ("r" "Resource - 资源笔记" entry
         (file ,(expand-file-name "resources/inbox.org" org-para-base-dir))
         "* %? :resource:\n  %U\n  %i"
         :empty-lines 1)

        ("j" "Journal - 日记" entry
         (file+datetree ,(expand-file-name "journal.org" org-para-base-dir))
         "* %?\n  %U"
         :empty-lines 1)

                ("c" "Capture with choice" entry
         (file+headline ,(expand-file-name "projects/inbox.org" org-para-base-dir)
                        "Projects Inbox")
         "* TODO %^{任务描述}\n  %U\n  %a\n  %i"
         :empty-lines 1)))


(setq org-refile-targets
      `((,(expand-file-name "projects/*.org" org-para-base-dir) :maxlevel . 2)
        (,(expand-file-name "projects/**/*.org" org-para-base-dir) :maxlevel . 2)
        (,(expand-file-name "areas/*.org" org-para-base-dir) :maxlevel . 2)
        (,(expand-file-name "areas/**/*.org" org-para-base-dir) :maxlevel . 2)
        (,(expand-file-name "resources/*.org" org-para-base-dir) :maxlevel . 1)
        (,(expand-file-name "resources/**/*.org" org-para-base-dir) :maxlevel . 1)
        (,(expand-file-name "archives/*.org" org-para-base-dir) :maxlevel . 1)))

(setq org-refile-use-outline-path 'file)
(setq org-outline-path-complete-in-steps t)


(setq org-agenda-files
      (append
       (directory-files-recursively (expand-file-name "projects" org-para-base-dir) "\\.org$")
       (directory-files-recursively (expand-file-name "areas" org-para-base-dir) "\\.org$")))

(setq org-agenda-custom-commands
      '(("P" "PARA 视图"
         ((agenda "" ((org-agenda-span 'week)))
          (todo "TODO|INPROGRESS"
                ((org-agenda-overriding-header "活跃项目任务")
                 (org-agenda-files
                  (directory-files-recursively
                   (expand-file-name "projects" org-para-base-dir) "\\.org$"))))
          (todo "TODO"
                ((org-agenda-overriding-header "领域维护任务")
                 (org-agenda-files
                  (directory-files-recursively
                   (expand-file-name "areas" org-para-base-dir) "\\.org$"))))))
        ("p" "仅项目任务"
         todo "TODO|INPROGRESS"
         ((org-agenda-overriding-header "项目任务")
          (org-agenda-files
           (directory-files-recursively
            (expand-file-name "projects" org-para-base-dir) "\\.org$"))))))


(with-eval-after-load 'org-roam
  (setq org-roam-directory org-para-base-dir)

      (setq org-roam-node-display-template
        "${tags:20} ${title:*}")

    (defun my/org-roam-filter-by-tag (tag)
    "返回一个过滤函数,只保留带有 TAG 的 org-roam 节点。"
    (lambda (node)
      (member tag (org-roam-node-tags node))))

  (defun my/org-roam-list-notes-by-tag (tag)
    "列出所有带有 TAG 的 org-roam 笔记文件路径。"
    (mapcar #'org-roam-node-file
            (seq-filter
             (my/org-roam-filter-by-tag tag)
             (org-roam-node-list))))

    (defun my/org-roam-find-project ()
    "查找或创建项目笔记。"
    (interactive)
    (org-roam-node-find nil nil (my/org-roam-filter-by-tag "project")))

  (defun my/org-roam-find-area ()
    "查找或创建领域笔记。"
    (interactive)
    (org-roam-node-find nil nil (my/org-roam-filter-by-tag "area")))

  (defun my/org-roam-find-resource ()
    "查找或创建资源笔记。"
    (interactive)
    (org-roam-node-find nil nil (my/org-roam-filter-by-tag "resource"))))


(defun my/para-archive-project (project-file)
  "将一个完成的项目移到 archives 目录。
PROJECT-FILE 是项目文件或目录的路径。"
  (interactive
   (list (completing-read "归档项目: "
                          (directory-files
                           (expand-file-name "projects" org-para-base-dir)
                           t directory-files-no-dot-files-regexp))))
  (let* ((archive-dir (expand-file-name "archives" org-para-base-dir))
         (project-name (file-name-nondirectory project-file))
         (dest (expand-file-name project-name archive-dir)))
    (rename-file project-file dest)
    (message "已归档: %s -> %s" project-name dest)))

(defun my/para-show-stats ()
  "显示当前 PARA 各层的文件数量统计。"
  (interactive)
  (let ((stats
         (cl-loop for category in '("projects" "areas" "resources" "archives")
                  for dir = (expand-file-name category org-para-base-dir)
                  for count = (length (directory-files-recursively dir "\\.org$"))
                  collect (cons category count))))
    (with-output-to-temp-buffer "*PARA Stats*"
      (princ "PARA 目录统计\n")
      (princ (make-string 30 ?=)) (terpri)
      (cl-loop for (cat . cnt) in stats
               do (princ (format "%-15s %d 个文件\n" cat cnt)))
      (terpri)
      (princ (format "总计: %d 个文件\n"
                     (cl-loop for (_ . cnt) in stats sum cnt))))))

(global-set-key (kbd "C-c p c") #'org-capture)
(global-set-key (kbd "C-c p a") #'org-agenda)
(global-set-key (kbd "C-c p s") #'my/para-show-stats)
(global-set-key (kbd "C-c p A") #'my/para-archive-project)

(provide 'para-config)

测试步骤

1. 创建目录结构

在 shell 中执行:

bash /tmp/para-setup-$(whoami).sh

或者在 org 文件中 C-c C-c 执行 创建目录结构 的代码块。

2. 加载 Emacs 配置

(load "/tmp/para-config-$(whoami).el")


3. 测试 org-capture

C-c p cp Project 任务 projects/inbox.org C-c p ca Area 任务 areas/inbox.org C-c p cr Resource 笔记 resources/inbox.org C-c p cj 日记 journal.org
快捷键 模板 目标

4. 测试 org-refile

在任何 org 条目上按 C-c C-w (org-refile),应该能看到:

  • projects 下的项目文件
  • areas 下的领域文件
  • resources 下的资源文件
  • archives 目录

5. 测试 agenda 视图

C-c p aP PARA 总览(按周 agenda + 项目任务 + 领域任务) C-c p ap 仅显示项目任务
快捷键 视图

6. 测试统计

C-c p s 显示各层文件数量。

快捷键速查

C-c p c org-capture C-c p a org-agenda C-c p s PARA 统计 C-c p A 归档项目 C-c C-w org-refile(在任何 org 条目上)
快捷键 功能