├── .gitignore
├── script
├── 1_add_new_article_manual.sh
├── texput.log
├── project.cfg
├── 0_sync_master.sh
├── parse_url_by_newspaper.sh
├── parse_url_by_manual.sh
├── 2_start_translating.sh
├── parse_url_by_newspaper.py
├── 3_continue_the_work.sh
├── 5_pause.sh
├── fanyi.sh
├── reformat.sh
├── urls_checker.sh
├── 4_finish.sh
├── 1_add_new_article_newspaper.sh
└── auto_translate.sh
├── org-mode
├── 文学化的devops.files
│ ├── literate-devops.png
│ ├── literate-devops-10.png
│ ├── literate-devops-11.png
│ ├── literate-devops-14.png
│ ├── literate-devops-15.png
│ ├── literate-devops-16.png
│ ├── literate-devops-20.png
│ ├── literate-devops-21.png
│ ├── literate-devops-22.png
│ ├── literate-devops-23.png
│ ├── literate-devops-24.png
│ ├── literate-devops-25.png
│ ├── literate-devops-2b.png
│ ├── literate-devops-3.png
│ ├── literate-devops-4.png
│ ├── literate-devops-5.png
│ ├── literate-devops-6.png
│ ├── literate-devops-8.png
│ └── literate-devops-9.png
├── org-mode中一次性为多个headline添加tag.org
├── 转置org-mode中的表.org
├── 对org-mode中的表格进行排序.org
├── 为Org表格中的域和列设置公式的简单方法.org
├── Ispell在org-mode中的正确使用方式.org
├── 根据category来组织org-agenda.org
├── 在其他地方应用org-mode的table和structure.org
├── 重整表格数据.org
├── 在org-mode中用链接的形式嵌入Youtube视频.org
├── Org-mode与Hyperbole之间的区别.org
├── 一个博士生是怎么应用Org-mode的.org
├── 设置Org中图片显示的尺寸.org
├── 如何自定义org-mode链接(你可以通过org-mode链接做任何事情).org
├── 口袋中的org-mode.org
├── 使用Org-mode代替delicious(书签管理).org
├── 将org文件转换为带引用的docx文件.org
├── MacOS上捕获Emacs Org Mode代办模板的全局热键.org
├── git: 用post-commit hook来探测Org-mode中的大量被删除的行.org
├── 整理 org-download.org
└── 在Org-Mode-table中使用自定义elisp函数进行计算.org
├── elisp-common
├── 如何cancel所有运行某个函数的timer.org
├── 重设defvar定义的值.org
├── format-spec.org
├── 如何让重复调用emacs函数尽可能的方便.org
├── Part 3: 列表与颜色.org
├── 养成使用sharp quote的习惯.org
├── 让Emacs shell命令发送桌面通知.org
├── Emacs的process-filter函数中的竞态条件.org
├── Part 6: 更简洁的绘图, if语句 以及 random函数.org
├── 聊一聊Emacs的字节编译.org
├── 确定Emacs server是否启动, 或者说server-running-p的迷思.org
├── Part 1: 运行Lisp的基础知识.org
├── 在Elisp中退出当前调用栈并执行另一个函数的方法.org
├── Fractal Rendering in Emacs - null program.org
├── Part 2: 简单的ASCII艺术.org
└── 使用ERT进行elisp单元测试.org
├── reddit
├── 如何让Emacs在运行期变得更快一点.org
├── 如何将一段文本变成org-mode中的列表.org
├── 如何配置Tramp使得只需要输入一次密码就可以让Emacs把远程服务器当成本地服务器那样来用.org
├── 如何更改org-mode中TODO关键字的颜色.org
└── 如今(2016)编写emacs-lisp的最佳实践是什么.org
├── emacs-common
├── INSIDE_EMACS变量.org
├── 使用书签快速跳转到文件或目录处.org
├── 使用imenu定位到use-package配置块.org
├── Emacs键盘宏中的计数器.org
├── 创建链接到info-buffer的链接.org
├── 禁止Emacs将package-selected-package变量写入初始化文件中.org
├── 自动拷贝鼠标选中的文本.org
├── Windows下用Emacs编辑远程文件.org
├── 调整Emacs中文本的字体大小.org
├── 获取Emacs版本信息的正确方式.org
├── Eldoc Goes Global.org
├── 将粘贴板中的内容添加到Emacs的kill-ring中.org
├── Emacs Swiper 以及 multiple cursors.org
├── 使用SVG在org-reveal幻灯片中现实动态图表.org
├── 现在可以在Emacs中,访问你的Google云端硬盘了.org
├── directory-local变量快速指南.org
├── 2个鲜为人知的提高Emacs启动速度的步骤.org
├── 通过ivy与ag实现快速multiediting.org
├── 如何同时Narrow同一buffer的不同区域.org
├── 在Emacs中查看日出日落的时间.org
├── Spacemacs中的项目.org
├── Emacs中的Electric-Pair-Mode.org
├── 更改Emacs的字体显示.org
├── 在Emacs中禁用鼠标操作.org
├── 在Windows上配置CapsLock使之对Emacs友好.org
├── 如何在xubuntu16.04上构建Emacs25.1.org
├── 使用ido进行Emacs补全.org
├── Emacs停止响应或崩溃了该怎么办.org
├── 为compilation-buffer增加交互功能.org
├── 更好的compile命令.org
├── 在Emacs中操作 Github Gist.org
├── 在单机上运行多个emacs守护进程.org
├── 是否值得学习Emacs-GNUS--陈斌的回答.org
├── Emacs数据库接口(EDBI).org
├── 在Calendar中高亮有安排的日期.org
├── 在Emacs中用elfeed查看YouTube订阅.org
├── 用Emacs编辑yaml文件.org
├── 简单几步将Emacs打造成为C++_IDE.org
├── 十倍提升Emacs性能.org
├── EmacsWiki- Programmable Completion.org
├── 在Windows平台上的Emacs中运行zsh shell.org
├── 合理地在Emacs中使用分页符.org
├── Emacs之威: 使用Impatient Mode实时开发网站.org
├── 一个非开发者是如何使用Emacs的.org
├── 在Windows平台为Emacs24启用GnuTLS支持.org
├── 重新发现普通Emacs的文本编辑能力.org
├── 使用deft快速创建笔记.org
├── 在Emacs中编译.org
├── Debug时显示Emacs的加载时间.org
├── 整合iTerm2与Emacs.org
├── 用Emacs作展示.org
└── 在Windows上安装支持PDF与Xwidgets网络浏览功能的Emacs.org
├── Eshell
├── cd到远程主机.org
├── 在Eshell中设置别名.org
├── 在Eshell中将目录加为书签.org
└── Wizard zines comics in Emacs eshell.org
├── spellcheck
└── Spell Checking Comments.org
├── eww
├── eww对isearch的超棒支持让我大吃一惊.org
├── 超越编辑器的边界(在Emacs中用XWidget浏览网页).org
└── TO EWW OR NOT TO EWW.org
├── dired
├── 在Dired中批量修改文件权限.org
├── 在dired中使用rsync同步文件.org
└── 在Emacs的dired和tramp中异步运行rsync.org
├── .travis.yml
├── calc
└── emacs-calc.org
├── advertisement
├── 为什么Emacs是一款非常棒的文本编辑器.org
├── 用来记笔记的三个 Emacs modes.org
└── 抛弃宗教因素对比Vim和Emacs.org
└── generate_index.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | script/env
2 | script/youdao.sh
3 | script/fanyi.sh
4 |
--------------------------------------------------------------------------------
/script/1_add_new_article_manual.sh:
--------------------------------------------------------------------------------
1 | 1_add_new_article_newspaper.sh
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-10.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-11.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-14.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-15.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-16.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-20.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-21.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-22.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-23.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-24.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-25.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-2b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-2b.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-3.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-4.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-5.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-6.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-8.png
--------------------------------------------------------------------------------
/org-mode/文学化的devops.files/literate-devops-9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lujun9972/emacs-document/HEAD/org-mode/文学化的devops.files/literate-devops-9.png
--------------------------------------------------------------------------------
/script/texput.log:
--------------------------------------------------------------------------------
1 | This is TeXk, Version 3.14159265 (TeX Live 2017/Arch Linux) (preloaded format=tex 2017.11.23) 2 MAR 2018 14:44
2 | restricted \write18 enabled.
3 | %&-line parsing enabled.
4 | **&tex
5 |
6 | *\end
7 | No pages of output.
8 |
--------------------------------------------------------------------------------
/script/project.cfg:
--------------------------------------------------------------------------------
1 | ProjectRoot=/home/lujun9972/github/emacs-document
2 | GithubUser=lujun9972
3 | Browser=firefox ---new-tab
4 | Editor=emacsclient -a '' -c
5 | BlockedDomains=https://www.tecmint.com|
6 | Token=kKczNLzhY6jM60hv03IFjew9TQ7WH245CACYaBiY
7 | PythonEnv=env
8 | AutoReformat=0
9 | ParseUrlScript=parse_url_by_manual.sh
--------------------------------------------------------------------------------
/script/0_sync_master.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 | source base.sh
4 |
5 | cd "$(get-project-path)"
6 | if ! git-branch-exist-p "PROJECT";then
7 | git remote add PROJECT https://github.com/lujun9972/emacs-document.git
8 | fi
9 |
10 | git fetch PROJECT
11 | git pull PROJECT master:master
12 | git push origin master:master
13 |
--------------------------------------------------------------------------------
/script/parse_url_by_newspaper.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | PYTHON="python"
3 | set -e
4 | cd $(dirname "${BASH_SOURCE[0]}")
5 | source base.sh
6 |
7 | url="$*"
8 |
9 | python_env=$(get-cfg-option PythonEnv)
10 | if [[ -d "${python_env}" ]];then
11 | PYTHON="${python_env}/bin/python"
12 | fi
13 |
14 | $PYTHON parse_url_by_newspaper.py "${url}"
15 |
--------------------------------------------------------------------------------
/script/parse_url_by_manual.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | url="$*"
3 | function trim()
4 | {
5 | echo "$*" |sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
6 | }
7 | source=$(curl "$url")
8 | title=$(trim $(echo "${source}" |grep -i '
'|sed 's$.*$$i;s$.*$$i'))
9 | echo '{}'|jq '{"title":$title,"content":$source}' --arg title "$title" --arg source "$source"
10 |
--------------------------------------------------------------------------------
/org-mode/org-mode中一次性为多个headline添加tag.org:
--------------------------------------------------------------------------------
1 | #+TITLE: org-mode中一次性为多个headline添加tag
2 | #+AUTHOR: lujun9972
3 | #+TAGS: org-mode
4 | #+DATE: [2017-02-28 二 14:18]
5 | #+LANGUAGE: zh-CN
6 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
7 |
8 | 要在org-mode文件中为多个headline一次性添加/删除tag,只需要
9 | 1. 选中要添加/删除tag的那几个headline
10 | 2. 运行 =M-x org-change-tag-in-region=.
11 | 3. 输入要添加/删除的tag
12 | 4. 告诉Emacs你是想添加还是删除tag
13 |
--------------------------------------------------------------------------------
/org-mode/转置org-mode中的表.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 转置org-mode中的表
2 | #+URL: http://pragmaticemacs.com/emacs/transpose-a-table-in-org-mode/
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: org-mode
5 | #+DATE: [2016-10-11 二 07:37]
6 | #+OPTIONS: ^:{}
7 |
8 |
9 | 我最近需要转置一个Org-mode中的表, 我花了好久时间试图用键盘宏来实现. 然后突然想到,也许org已经内置一条命令来实现这个功能呢. 结果还真被我找到了: =M-x org-table-transpose-table-at-point=.
10 | 下面是一个演示
11 |
12 | [[http://i1.wp.com/pragmaticemacs.com/wp-content/uploads/2016/10/transpose-table.gif?w=620]]
13 |
14 | 有现成的命令的感觉真好!
15 |
--------------------------------------------------------------------------------
/elisp-common/如何cancel所有运行某个函数的timer.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 如何cancel所有运行某个函数的timer
2 | #+URL: http://pragmaticemacs.com/emacs/cancel-all-timers-calling-some-function/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-document
5 | #+DATE: [2016-11-24 四 20:30]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 |
10 | 这是一篇很短的博文. 最近我发现有时会不小心启动了重复的timer. 由于我没有将这些timer对象与符号绑定,因此我无法用 =cancel-timer= 关闭这些timer.
11 | 经过一番搜索,我发现了一个名叫 =cancel-function-timers= 的函数,可以cancel掉所有运行指定函数的timer.
12 |
13 | 这个函数你不会经常用到,但是保不齐什么时候就有用呢!
14 |
--------------------------------------------------------------------------------
/reddit/如何让Emacs在运行期变得更快一点.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 如何让Emacs在运行期变得更快一点
2 | #+URL: https://www.reddit.com/comments/3l824y
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: reddit
5 | #+DATE: [2016-08-31 三 14:35]
6 | #+OPTIONS: ^:{}
7 |
8 | + 有些package的性能很糟糕,最后不要用,比如 =linum-mode=, =flyspell-mode=, =tabbar-mode=.
9 | + 如果你经常打开很多的文件,不妨试试设置一下 =jit-lock-stealth-time=,
10 | + 在Hook中做太多的事情也是造成缓慢的常见原因
11 | + 用 =profiler= 找出慢的地方. 方法是:
12 | 1. 执行 =M-x profiler-start=
13 | 2. 执行那些会导致Emacs缓慢的操作
14 | 3. 执行 =M-x profiler-report=, 它会告诉你什么地方缓慢.
15 | 4. 修复缓慢的原因.
16 | 5. 在解决下一个缓慢因素之前,记得执行 =M-x profiler-stop=
17 |
--------------------------------------------------------------------------------
/emacs-common/INSIDE_EMACS变量.org:
--------------------------------------------------------------------------------
1 | #+TITLE: INSIDE_EMACS 变量
2 | #+URL: http://mbork.pl/2018-07-29_2018-07-29_The_INSIDE_EMACS_variable
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-common
5 | #+DATE: [2018年 08月 19日 星期日 20:51:56 CST]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 | 在 [[http://mbork.pl/2018-06-10_Git_diff_in_Eshell][尝试]] [[http://mbork.pl/2018-07-16_Eshell_aliases][使用]]Eshell和Emacs中的shell时, 我发现了一条有意思的信息.
9 | 它对我本人意义不大, 因为我很少使用 =M-x shell= 和 =M-x term=, 相比之下我更喜欢使用Eshell, 但有些人可能会有所帮助.
10 | 当你在Emacs的非elisp shell中运行脚本/命令时, 环境变量 =INSIDE_EMACS= 会被设置为非空,这样脚本就能识别出它是运行在EMACS中的了.
11 |
--------------------------------------------------------------------------------
/org-mode/对org-mode中的表格进行排序.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 对org-mode中的表格进行排序
2 | #+URL: http://pragmaticemacs.com/emacs/sorting-an-org-mode-table/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: org-mode
5 | #+DATE: [2016-12-24 Sat 21:37]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 |
10 | 在org-mode中,你可以快速地对表格进行排序,方法是将光标定位到表格上,然后按下 =C-c ^=. 再选择排序的类型(例如,a表示按字母顺序排序,n表示按数字来排序).
11 | 若你选择排序类型时使用了大写的字母,那么表示进行反向排序.
12 |
13 | 排序时的key取之于光标所在的列,同时文档中也说明了排序的范围:
14 |
15 | #+BEGIN_EXAMPLE
16 | The range of lines is the range between the nearest horizontal separator
17 | lines, or the entire table of no such lines exist.
18 | #+END_EXAMPLE
19 |
--------------------------------------------------------------------------------
/reddit/如何将一段文本变成org-mode中的列表.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 如何将一段文本变成org-mode中的列表
2 | #+AUTHOR: lujun9972
3 | #+TAGS: reddit,org
4 | #+DATE: [2016-11-29 二 20:05]
5 | #+LANGUAGE: zh-CN
6 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
7 |
8 | 假设有这么一段文本
9 | #+BEGIN_SRC org
10 | thing one
11 | thing two
12 | thing three
13 | etc
14 | #+END_SRC
15 |
16 | 那么先全选在通过 =C-c -= 转换成
17 | #+BEGIN_SRC org
18 | - thing one
19 | - thing two
20 | - thing three
21 | - etc
22 | #+END_SRC
23 |
24 | 也可以通过先全选,再通过 =C-u C-x r N RET DEL . SPC RET= 转换成
25 | #+BEGIN_SRC org
26 | 1. thing one
27 | 2. thing two
28 | 3. thing three
29 | 4. etc
30 | #+END_SRC
31 |
--------------------------------------------------------------------------------
/Eshell/cd到远程主机.org:
--------------------------------------------------------------------------------
1 | #+TITLE: cd到远程主机
2 | #+URL: http://irreal.org/blog/?p=5600
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: Eshell
5 | #+DATE: [2016-10-16 日 07:05]
6 | #+OPTIONS: ^:{}
7 |
8 |
9 | 我一直在尽可能的尝试用eshell替代真正的shell来完成我的工作. 这样以来我就能呆在Emacs中从而享受到Emacs带给我的便利了.
10 | 几天前,我在一篇博客中看到了一种关于cd的强大用法.
11 |
12 | 你可以像下面这样cd到远程主机的目录中:
13 |
14 | #+BEGIN_SRC sh
15 | cd /ssh:aineko:org
16 | #+END_SRC
17 |
18 | 这会通过tramp登陆到我的iMacs上的 =~/org= 目录中.
19 |
20 | 而 src_sh{cd /ssh:aineko:} 的效果就跟直接用ssh登陆到aineko这台主机上是一样的.
21 |
22 | 如果你想用另一个用户登陆远程主机,可以这么做:
23 |
24 | #+BEGIN_SRC sh
25 | cd /ssh:different_user@aineko:
26 | #+END_SRC
27 |
28 | 用这种方式虽然不能完全透明地像访问本地主机一样访问远程主机, 但它确实能让这些远程主机看起来就好像挂载到本地一样. 很好,很强大.
29 |
--------------------------------------------------------------------------------
/script/2_start_translating.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 | source $(dirname "${BASH_SOURCE[0]}")/base.sh
4 | # 搜索可以翻译的文件
5 | declare -a files
6 | sources_dir="$(get-project-path)/raw"
7 | file="$*"
8 |
9 |
10 | cd "$(dirname "${file}")"
11 | filename=$(basename "${file}")
12 | new_branch="$(filename-to-branch translate "${filename}")"
13 | git branch "${new_branch}" master
14 | git checkout "${new_branch}"
15 | # 迁移到process目录
16 | git mv "${filename}" "../processing"
17 | git add "../processing/${filename}"
18 | git_user=$(get-github-user)
19 | git commit -m "translating by ${git_user}"
20 | git push -u origin "${new_branch}"
21 |
22 | # 打开要翻译的文章
23 | eval "$(get-editor) '../processing/${filename}'"
24 |
--------------------------------------------------------------------------------
/emacs-common/使用书签快速跳转到文件或目录处.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 使用书签快速跳转到文件或目录处
2 | #+URL: http://pragmaticemacs.com/emacs/use-bookmarks-to-jump-to-files-or-directories/
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: emacs-common
5 | #+DATE: [2016-08-30 周二 16:23]
6 | #+OPTIONS: ^:{}
7 |
8 | 在Emacs中,你可以将文件,目录,以及其他许多东西添加到[[https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html][书签]] 中, 这样你就能实现快速跳转了(就好像浏览器中的书签一样)
9 |
10 | 书签的基础用法很简单. 用 =C-x r m= 为当前文件/目录创建一个书签. 你可以为书签输入一个名字. 例如,我就将所有指向目录的书签以 =dir-= 开头来命名,这样的好处是它们就会在书签列表中显示在一起了.
11 |
12 | 按下 =C-x r b= 可以跳转到某个书签的位置,你会被要求输入要跳转的书签的名字. 如果像列出所有的书签,则按下 =C-x r l=.
13 |
14 | 有一个名为 [[https://www.emacswiki.org/emacs/BookmarkPlus][bookmarks+]] 的package为原生的书签添加了额外的功能. 但是我基本用不到这些功能.
15 |
--------------------------------------------------------------------------------
/script/parse_url_by_newspaper.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import datetime
3 | import json
4 | from newspaper import Article
5 | url = sys.argv[1]
6 |
7 | article = Article(url, keep_article_html=True, memoize_articles=False, follow_meta_refresh=True, request_timeout=15, fetch_images=False)
8 | article.download()
9 | article.parse()
10 |
11 | authors = ';'.join(article.authors)
12 | title = article.title
13 | date = article.publish_date
14 | if date:
15 | date = date.strftime('%Y%m%d')
16 |
17 | html_content = article.article_html
18 | content = article.text
19 |
20 | data = {"title": title,
21 | "date_published": date,
22 | "content": html_content,
23 | "author": authors}
24 |
25 | print(json.dumps(data))
26 |
--------------------------------------------------------------------------------
/org-mode/为Org表格中的域和列设置公式的简单方法.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 为Org表格中的域和列设置公式的简单方法
2 | #+URL: http://mbork.pl/2018-02-25_Simple_way_of_assigning_formulas_to_fields_and_columns_in_Org_tables
3 | #+AUTHOR: lujun9972
4 | #+TAGS: org-mode
5 | #+DATE: [2019-04-27 六 18:37]
6 | #+LANGUAGE: zh-CN
7 | #+STARTUP: inlineimages
8 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
9 |
10 | 今天我要分享一个关于Org-mode表格的小窍门.
11 | 我知道在Org-mode表格单元格中按下 ~C-u C-c =~ 可以为单元格设置一个公式 (或者按下 ~C-c =~ 来设置一个列公式).
12 | 然而, [[https://orgmode.org/manual/Field-and-range-formulas.html][还有更简单的方法]]: 只需要输入 ~:=~ 然后跟上公式再按下 ~TAB~, ~RET~ 或者 ~C-c C-c~ 就行了. ([[https://orgmode.org/manual/Column-formulas.html][没有冒号的话,则表示列公式]].) 非常方便! (这个技巧一直都收录在手册中... 我又一次意识到时常浏览手册真是个好主意!)
13 |
14 |
--------------------------------------------------------------------------------
/Eshell/在Eshell中设置别名.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 在Eshell中设置别名
2 | #+URL: http://mbork.pl/2018-07-16_Eshell_aliases
3 | #+AUTHOR: lujun9972
4 | #+TAGS: Eshell
5 | #+DATE: [2019-04-27 六 18:50]
6 | #+LANGUAGE: zh-CN
7 | #+STARTUP: inlineimages
8 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
9 |
10 | [[http://mbork.pl/2018-06-10_Git_diff_in_Eshell][前一段时间]], 我写过一篇文章关于让Eshell中启动的程序使用 =cat= 代替 =less= 来作为分页器的.
11 | 由于我一般只想让Git这样做, 而 Git 有一个 ==--no-pager= 选项, 因此更好的做法应该是自动为Git添加该选项.
12 |
13 | 嗯,事实证明Eshell拥有我们在bash中了解和热爱的特性: 别名.
14 | 唯一的缺点是,它们的工作方式略有不同(在bash中你使用等号而在Eshell中你使用空格, 然后别名的主体用但括号括起来).
15 |
16 | 总而言之, 你可以在Eshell中这样做
17 |
18 | #+begin_src shell
19 | alias git 'git --no-pager $*'
20 | #+end_src
21 |
22 | (别名会自动保存), 你立即就能享受您的Git新体验.
23 |
--------------------------------------------------------------------------------
/reddit/如何配置Tramp使得只需要输入一次密码就可以让Emacs把远程服务器当成本地服务器那样来用.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 如何配置Tramp使得只需要输入一次密码就可以让Emacs把远程服务器当成本地服务器那样来用
2 | #+URL: https://www.reddit.com/comments/3liwm7
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: emacs-common
5 | #+DATE: [2016-08-31 三 14:24]
6 | #+OPTIONS: ^:{}
7 |
8 | 你只需要启用ssh的 connection sharing功能就行了. 方法是编辑本地的 =~/.ssh/config= 文件然后添加下面这些配置:
9 |
10 | #+BEGIN_SRC conf
11 | Host *
12 | # Enable connection sharing.
13 | ControlMaster auto
14 | ControlPath ~/.ssh/%r@%h:%p
15 | # Make persistent connections that can be reused.
16 | ControlPersist yes
17 | # Keep connections alive (helps TRAMP to detect disconnects.)
18 | ServerAliveInterval 5
19 | #+END_SRC
20 |
21 | 然后在Emacs中配置参数 =tramp-use-ssh-controlmaster-options= 为 =nil=
22 |
--------------------------------------------------------------------------------
/emacs-common/使用imenu定位到use-package配置块.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 使用imenu定位到use-package配置块
2 | #+URL: http://irreal.org/blog/?p=5916
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-common
5 | #+DATE: [2017-02-13 周一 11:18]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 | 几年前, 我曾经分享过一个 [[http://irreal.org/blog/?p=3979][Jordon Biondo的gist代码片段,]] 它允许使用 =imenu= 来定位 =use-package= 的配置块.
10 | 这个功能很实用,我推荐大家如果需要花费大量时间修改Emacs配置的话,都可以用用该功能.
11 |
12 | 不过今天 [[http://irreal.org/blog/?p=3979#comment-3140572899][Fran Burstall]] 告诉我, =use-package= 已经内建了该功能了. 你只需要在加载 =use-package= 前将 =use-package-enable-imenu-support= 设置为非nil就行了.
13 | 实现的相关代码与Biondo的很类似,不过它同时支持 =use-package= 和 =require=.
14 | Burstall不是很确定这项功能是什么加入到 =use-package= 中的,而我从代码上看也看不出来是什么时候加入该功能.
15 | 不过至少在当前版本(2.3)中,是已经有这个功能的.
16 |
--------------------------------------------------------------------------------
/emacs-common/Emacs键盘宏中的计数器.org:
--------------------------------------------------------------------------------
1 | #+TITLE: Emacs键盘宏中的计数器
2 | #+URL: http://pragmaticemacs.com/emacs/macro-counters/
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: emacs-common
5 | #+DATE: [2016-07-09 六 20:40]
6 | #+OPTIONS: ^:{}
7 | #+TITLE: macro-counters
8 |
9 |
10 | 我[[http://pragmaticemacs.com/emacs/naming-and-saving-macros-for-repetitive-tasks/][曾经写过一篇]] 文章关于如何录制并回放键盘宏完成重复任务的文章. 键盘宏用有一个 [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Counter.html][计数器]] 可以允许你插入一个数值,并且在每次重放宏时自动进行累加.
11 |
12 | 例如,在一个新行处,按下 =C-x (= 开始录制宏,然后按下 =C-a= 移动到行首, 按下 =C-x C-k C-i= 插入宏计数器的值(默认为0),再按下 =RET= 新起一行, 再按下 =C=x )= 结束宏录制.
13 | 在用 =C-x e= 运行过一次宏后,可以直接按下 =e= 来重放该宏. 最后你会得到类似下面的结果:
14 |
15 | #+BEGIN_EXAMPLE
16 | 0
17 | 1
18 | 2
19 | 3
20 | 4
21 | #+END_EXAMPLE
22 |
23 | 每次你定义一个新宏,计数器都是从0开始. 要设置初值为其他值,需要再定义或调用宏之前按下 =C-x C-k C-c= 重新设置心智.
24 |
--------------------------------------------------------------------------------
/emacs-common/创建链接到info-buffer的链接.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 创建链接到info-buffer的链接
2 | #+URL: http://mbork.pl/2016-12-18_Generating_links_to_info_buffers
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-common
5 | #+DATE: [2016-12-24 Sat 21:54]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 |
10 | 当编写与Emacs相关的电子邮件时(例如,回复help-gnu-emacs mailing list的时候),我经常要插入一个Info node的链接.
11 | 在Org-mode中插入Info node链接挺简单的,你可以使用 =org-store-link= 和 =org-insert-link= 来完成,然而默认情况下,这种Info node链接并不能被很好的被导出成HTML格式(他不会创建一个连接到online Emacs manual的链接).
12 | 不过,这里有个小技巧,(你甚至无需用到Org-mode): 你可以在 info buffer 中按下 =c= 键来拷贝当前node的 “链接”.
13 | 然后你可以在email中写下这么一段内容:
14 |
15 | #+BEGIN_SRC emacs-lisp
16 | (info "")
17 | #+END_SRC
18 |
19 | 然后你就可以让收信人将光标移动到这行语句的后面按下 =C-x C-e= 就能跳转到相应的Info node了. (当然,如果他/她并不使用Emacs来阅读电子邮件,那么他/她需要先将这句话拷贝到Emacs中)
20 |
--------------------------------------------------------------------------------
/emacs-common/禁止Emacs将package-selected-package变量写入初始化文件中.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 禁止Emacs将package-selected-package变量写入初始化文件中
2 | #+URL: http://irreal.org/blog/?p=5630
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: emacs-common
5 | #+DATE: [2016-10-11 周二 11:52]
6 | #+OPTIONS: ^:{}
7 |
8 |
9 | 升级到Emacs 25.1后,Emacs会保存一个名为 =package-selected-packages= 的变量,这个变量保存了你选定的package的列表.
10 | 在删除package时,Emacs会用这个变量来处理依赖关系,同时也使得你能将package配置迁移到多台机器上.This is used to handle dependencies on
11 |
12 | 但是这又带来了一个问题: Emacs会将这个变量下到你初始化文件(init.el或.emacs)的custom section里面. 这意味着要同步(比如通过git进行同步)各个机器上的配置变得更加困难了.
13 | 而且我也不希望由Emacs自动为我生成配置信息,我希望我的配置文件能由我完全掌握.
14 |
15 | 幸好,[[https://www.reddit.com/r/emacs/comments/53zpv9/how_do_i_get_emacs_to_stop_adding_custom_fields/][解决这个问题的方法有很多]]. 我选择了其中一个最简单的方法,那就是为Emacs自动生成的配置信息指定一个独立的配置文件.
16 | 你选择在初始化文件中是否加载这个文件都没有问题,但至少Emacs不会再搞乱你的初始化文件了.
17 | 当然还有其他的解决方案,详情请查看刚才那个链接里的内容.
18 |
--------------------------------------------------------------------------------
/emacs-common/自动拷贝鼠标选中的文本.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 自动拷贝鼠标选中的文本
2 | #+URL: http://pragmaticemacs.com/emacs/automatically-copy-text-selected-with-the-mouse/
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: emacs-common
5 | #+DATE: [2016-10-08 六 07:40]
6 | #+OPTIONS: ^:{}
7 |
8 | 我不经常使用鼠标,但是我的一个同事,他在OS X上使用Emacs,就很希望能够做到像X11上那样用鼠标选中的文本自动复制到系统剪贴板上(linux用户应该对此很熟悉).
9 | 要实现这样其实蛮简单的,只需要添加下行到你的[[http://pragmaticemacs.com/emacs/editing-your-emacs-config-file/][emacs配置文件中]]:
10 |
11 | #+BEGIN_SRC emacs-lisp
12 | (setq mouse-drag-copy-region t)
13 | #+END_SRC
14 |
15 | [[http://pragmaticemacs.com/emacs/look-up-help-for-keys-and-functions/][改变来的说明如下]] (C-h v mouse-drag-copy-region)
16 |
17 | #+BEGIN_QUOTE
18 | If non-nil, copy to kill-ring upon mouse adjustments of the region.
19 | #+END_QUOTE
20 |
21 | 也就是说高亮选中一段文本,这段文本就会拷贝到kill-ring(Emacs内部的剪贴板)中. 在Mac中该文本同时也会拷贝到系统剪贴板上这样你就可以复制到其他app中了.
22 |
--------------------------------------------------------------------------------
/script/3_continue_the_work.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 | source $(dirname "${BASH_SOURCE[0]}")/base.sh
4 |
5 | cd "$(get-project-path)"
6 | current_branch=$(git-get-current-branch)
7 | if [[ "$current_branch" == "master" ]];then
8 | i=0
9 | while read branch;do
10 | operation=$(git-branch-to-operation "${branch}")
11 | filename=$(git-branch-to-filename "${branch}")
12 | printf "%3d. %10s %s\n" $i "${operation}" "${filename}"
13 | branches[$i]=$branch
14 | i=$((i+1))
15 | done < <(git branch |grep -v 'master')
16 | echo "YOU ARE UNDER BRANCH MASTER"
17 | read -r -p "Which branch do you want to checkout(input the id): " num
18 | echo git checkout "${branches[$i]}"
19 | git checkout "${branches[$num]}"
20 | fi
21 |
22 | filepath=$(git-current-branch-to-file-path)
23 | eval "$(get-editor) '${filepath}'"
24 |
--------------------------------------------------------------------------------
/elisp-common/重设defvar定义的值.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 重设defvar定义的值
2 | #+URL: http://irreal.org/blog/?p=5929
3 | #+AUTHOR: lujun9972
4 | #+TAGS: elisp-common
5 | #+DATE: [2017-02-27 Mon 21:38]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 | 关于 [[http://irreal.org/blog/?p=5926][昨天的博文]], 我后来在 [[https://www.reddit.com/r/emacs/comments/5tkhe3/what_is_the_best_workflow_to_contributing_to/][Reddit上看到这个问题]] 就又学到一招. Elisp和大多数的Lisp有一个很反直觉的特性就是由 =defvar= 和 =defcustom= 定义的值是不可变的: 一旦设置了值就只能重启进程才能改变.
10 |
11 | 后来发现,如果你用 =Ctrl-Meta-x= 而不是 =Ctrl-x Ctrl-e=来执行
12 |
13 | #+BEGIN_SRC emacs-lisp
14 | (defvar user "Jim")
15 | #+END_SRC
16 |
17 | 那么你依然能够重置变量值. 这在开发阶段需要调整参数时,非常有帮助.
18 | 虽说Emacs普通用户无需知道这个,而且即使你开发Elisp,也可能不会经常用到这个技巧,不过应用这个技巧还是蛮方便的.
19 | 同时这个经历也更加证明了,关于Emacs的学习,学无止境.
20 |
--------------------------------------------------------------------------------
/emacs-common/Windows下用Emacs编辑远程文件.org:
--------------------------------------------------------------------------------
1 | #+TITLE: Windows下用Emacs编辑远程文件
2 | #+URL: http://rentes.github.io/emacs/windows/ssh/2016/08/25/Editing-Remote-Files-With-Emacs-Under-Windows/
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: emacs-common
5 | #+DATE: [2016-09-18 日 20:31]
6 | #+OPTIONS: ^:{}
7 |
8 |
9 | 最近我实现了用Emacs(它是我最爱的编辑器之一)在Windows 10上编辑远程文件. 实现方法很简单,只需要将下面几行内容添加到 emacs 的 =init.el= 配置中就行了:
10 |
11 | #+BEGIN_SRC emacs-lisp
12 | (require 'tramp)
13 | (set-default 'tramp-auto-save-directory "C:\\Users\\\\AppData\\Local\\Temp")
14 | (set-default 'tramp-default-method "plink")
15 | #+END_SRC
16 |
17 | 需要将上面的 ~~ 替换为你的Windows用户.
18 |
19 | 另外也别忘了检查一下环境变量 =%Path%= 是否包含了 =plink.exe= 所在目录.
20 |
21 | 添加好配置后,通过运行命令 =M-x load-file= 重新加载 =init.el= 配置文件.
22 |
23 | 然后按两下回车表示接受默认的文件名, 之后就可以用 =C-x C-f= 打开远程文件了.
24 |
25 | 只不过指定远程文件的连接字符串应该遵守格式 =/@:=.
26 |
27 | 按下回车后然后收入远程用户的密码就OK了.
28 |
--------------------------------------------------------------------------------
/emacs-common/调整Emacs中文本的字体大小.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 调整Emacs中文本的字体的大小
2 | #+URL: http://irreal.org/blog/?p=4823
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: emacs-common
5 | #+DATE: [2016-07-10 日 07:46]
6 | #+OPTIONS: ^:{}
7 |
8 | 该文由 [[http://irreal.org/blog/?author=2][jcs]] 发布于 [[http://irreal.org/blog/?p=4823][2015年12月25日]]
9 |
10 | 不知道为啥,我总是记不住这个. 若你也总是记不住,把本文当成是我献给你的圣诞节礼物吧.
11 |
12 | #+BEGIN_QUOTE
13 | [[https://twitter.com/hashtag/Emacs?src=hash][#Emacs]] of the day: 在桌面演示代码? 按下C-x C-+会增加字体大小,然后重复按 C-+ 或 C-- 会增加/缩小字体大小, 按C-x C-0会恢复字体大小
14 |
15 | — Robin Green (@fatlimey) [[https://twitter.com/fatlimey/status/638494771128897541][August 31, 2015]]
16 | #+END_QUOTE
17 |
18 | 然而Green没有说明的是,你再第一次调用更改字体大小的命令后,前面的 =C-x= 就可以省略了. 因此按下 =Ctrl+x Ctrl++ Ctrl++= 会增加字体大小两次.
19 |
--------------------------------------------------------------------------------
/org-mode/Ispell在org-mode中的正确使用方式.org:
--------------------------------------------------------------------------------
1 | #+TITLE: Ispell在org-mode中的正确使用方式
2 | #+URL: http://endlessparentheses.com/ispell-and-org-mode.html?source=rss
3 | #+AUTHOR: lujun9972
4 | #+CATEGORY: org-mode
5 | #+DATE: [2016-06-23 周四 11:03]
6 | #+OPTIONS: ^:{}
7 |
8 | 若你曾经试过在org-mode中作拼写检查,你就知道这有多难搞了. Ispell会检查任何内容,即使是代码块和属性drawer中的内容也会检查! 若你在用org来写一篇带有代码片段的博文时,这种行为真的很烦人. 你可以用下面的方法解决这个问题.
9 | #+BEGIN_SRC emacs-lisp
10 | (defun endless/org-ispell ()
11 | "Configure `ispell-skip-region-alist' for `org-mode'."
12 | (make-local-variable 'ispell-skip-region-alist)
13 | (add-to-list 'ispell-skip-region-alist '(org-property-drawer-re))
14 | (add-to-list 'ispell-skip-region-alist '("~" "~"))
15 | (add-to-list 'ispell-skip-region-alist '("=" "="))
16 | (add-to-list 'ispell-skip-region-alist '("^#\\+BEGIN_SRC" . "^#\\+END_SRC")))
17 | (add-hook 'org-mode-hook #'endless/org-ispell)
18 | #+END_SRC
19 |
--------------------------------------------------------------------------------
/reddit/如何更改org-mode中TODO关键字的颜色.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 如何更改org-mode中TODO关键字的颜色
2 | #+AUTHOR: lujun9972
3 | #+TAGS: reddit
4 | #+DATE: [2016-12-23 五 14:26]
5 | #+LANGUAGE: zh-CN
6 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
7 |
8 | 1. 你可以通过设置 =org-todo-keywords= 来自定义TODO关键字
9 |
10 | #+BEGIN_SRC emacs-lisp
11 | (setq org-todo-keywords
12 | '((sequence "TODO" "IN-PROGRESS" "WAITING" "|" "DONE" "CANCELED"))
13 | )
14 | #+END_SRC
15 |
16 |
17 | 2. 你可以通过设置 =org-todo-keyword-faces= 来自定义各个TODO关键字的显示
18 |
19 | #+BEGIN_SRC emacs-lisp
20 | (setq org-todo-keyword-faces
21 | '(("IN-PROGRESS" . "orange") ("WAITING" . "magenta") ("CANCELED" . "red") ("DONE" . "green"))
22 | )
23 | ;; 或者这样
24 | (setq org-todo-keyword-faces (quote (("IN-PROGRESS" :foreground "orange"))))
25 | #+END_SRC
26 |
27 | 关于 =org-todo-keyword-faces= 的设置方式,请参见它的doc-string.
28 |
--------------------------------------------------------------------------------
/spellcheck/Spell Checking Comments.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 注释中的拼写检查
2 | #+URL: https://emacsredux.com/blog/2019/05/24/spell-checking-comments/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-common,spell
5 | #+DATE: [2019年 09月 01日 星期日 19:38:58 HKT]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 | 我出了名的容易拼错单词. 谢天谢地 Emacs 内置了一个名为 =flyspell= 的超棒模式来帮助像我这样的可怜的打字员.
10 | Flyspell 会在你输入时突出显示拼错的单词 (也就是实时的) 并提供有用的快捷键来快速修复该错误.
11 |
12 | 大多输入通常会对派生自 =text-mode= (比如 =markdown-mode=, =adoc-mode= )的主模式启用 =flyspell=, 但是它对程序员也有所帮助,可以指出他在注释中的错误.
13 | 所需要的只是启用 =flyspell-prog-mode=. 我通常在所有的编程模式中都启用它:
14 |
15 | #+begin_src emacs-lisp
16 | (add-hook 'prog-mode-hook #'flyspell-prog-mode)
17 | #+end_src
18 |
19 | 现在当你在注释中输入错误时,就会得到即使反馈了. 要修复单词只需要将光标置于单词后,然后按下 =C-c $= (=M-x flyspell-correct-word-before-point=).
20 |
21 | [[https://emacsredux.com/assets/images/flyspell_prog_mode.gif]]
22 |
23 | 今天的分享就到这里! 我要继续修正这些讨厌的拼写错误了!
24 |
--------------------------------------------------------------------------------
/script/5_pause.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source $(dirname "${BASH_SOURCE[0]}")/base.sh
3 | while getopts :m: OPT; do
4 | case $OPT in
5 | m|+m)
6 | commit_message="$OPTARG"
7 | ;;
8 | *)
9 | echo "usage: ${0##*/} [+-m commit_message]"
10 | exit 2
11 | esac
12 | done
13 | shift $(( OPTIND - 1 ))
14 | OPTIND=1
15 |
16 | cd $(get-project-path)
17 | current_branch=$(git-get-current-branch)
18 | if [[ "${current_branch}" == "master" ]];then
19 | warn "Project is under the master branch! Exiting"
20 | exit 1
21 | fi
22 |
23 | # operation=$(git-branch-to-operation "${current_branch}")
24 | filename=$(git-branch-to-filename "${current_branch}")
25 |
26 |
27 | if [[ -z "${commit_message}" ]];then
28 | commit_message="take a break: ${filename} at $(date)"
29 | fi
30 |
31 | git add .
32 | git commit -m "${commit_message}"
33 | git push -u origin "${current_branch}"
34 | git checkout master
35 |
--------------------------------------------------------------------------------
/eww/eww对isearch的超棒支持让我大吃一惊.org:
--------------------------------------------------------------------------------
1 | #+TITLE: eww对isearch的超棒支持让我大吃一惊
2 | #+URL: https://www.reddit.com/r/emacs/comments/9oi1e3/ewws_awesome_isearch_support_just_blew_my_mind/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: eww
5 | #+DATE: [2019-04-27 六 19:11]
6 | #+LANGUAGE: zh-CN
7 | #+STARTUP: inlineimages
8 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
9 |
10 | 我所学到的:
11 |
12 | 如果某个web页面包含导航链接,且它的 'rel' 属性时 "next", "prev", "up", 或 "start" (以及其他一些支持的同义词), 那么你可以通过在 =eww= 输入 =n= ext, =p= revious, =u= p, =t= op 进行导航; 就像在 =info= 阅读器里面一样. 这还不算完.
13 |
14 | 更让人开眼的是当我在页面中使用 isearch, 在buffer中没有找到匹配项, 然后再按下 =C-s= 想从头开始搜索, 结果意外地发现跳转到了网页顺序中包含该匹配项的下一页地方了.
15 |
16 | 也就是说. 就好像是 =info= 中的 isearch 一样 -- 但是是网页版的. eww 不断地访问这些 "next" 链接直到找到另一个有匹配项的网页. (内部使用的时 misearch.el, 因此eww中的相关代码量非常少. 超酷.)
17 |
18 | 特别是对于本地托管的HTML文档来说(eww 非常适合这种场景, 而且这种情况下该行为也非常的快速), 这项特性绝对是棒极了.
19 |
20 | 若你使用 eww 访问文档, 而HTML中又不包含 'link' 导航元素, 这个理由足够要求文档维护人员添加这些导航元素. (而如果你不使用eww访问文档, 那这应该是个足够好的理由让你开始使用它)
21 |
--------------------------------------------------------------------------------
/emacs-common/获取Emacs版本信息的正确方式.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 获取Emacs版本信息的正确方式
2 | #+URL: http://mbork.pl/2017-01-30_Current_Emacs_version
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-common
5 | #+DATE: [2017-02-22 周三 14:16]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 | 当向 Emacs devs 报告bug时, 你需要告之当前使用Emacs的版本好. 通常我们使用 =M-x emacs-version= 在minibuffer中显示版本信息(或者给它带上一个prefix argument让它在当前位置插入版本信息).
10 | 然而,如果你的Emacs是直接从源代码便以过来的开发版,这个版本信息基本没啥用 - 它并不能告诉我们你用的emacs源代码来自于那一次的提交.
11 | 我把这个问题在邮件列表中咨询了一下,结果被告之其实有个 =emacs-repository-get-version= 函数能够返回当前版本库的提交信息(也就是Git的commit hash了).
12 |
13 | 由于我是不是都要报告一下Emacs bug,所以我在 =init.el= 中定义了这个函数:
14 |
15 | #+BEGIN_SRC emacs-lisp
16 | (defun insert-debug-version-info ()
17 | "Insert version of Emacs and 7 characters of the commit hash."
18 | (interactive)
19 | (insert
20 | (format "GNU Emacs %s (commit %s)"
21 | emacs-version
22 | (substring (emacs-repository-get-version) 0 7))))
23 | #+END_SRC
24 |
--------------------------------------------------------------------------------
/emacs-common/Eldoc Goes Global.org:
--------------------------------------------------------------------------------
1 | #+TITLE: Eldoc全局化了
2 | #+URL: https://emacsredux.com/blog/2018/11/13/eldoc-goes-global/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-common,eldoc
5 | #+DATE: [2019年 09月 01日 星期日 19:36:13 HKT]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 | 最近我注意到 Emacs 25.1 增加了一个名为 =global-eldoc-mode= 的模式,它是流行的 =eldoc-mode= 的一个全局化的变体.
10 | 而且与 =eldoc-mode= 不同的是, =global-eldoc-mode= 默认是开启的!
11 |
12 | 这意味着你可以删除Emacs配置中为主模式开启 =eldoc-mode= 的代码了:
13 |
14 | #+begin_src emacs-lisp
15 | ;; That code is now redundant
16 | (add-hook 'emacs-lisp-mode-hook #'eldoc-mode)
17 | (add-hook 'ielm-mode-hook #'eldoc-mode)
18 | (add-hook 'cider-mode-hook #'eldoc-mode)
19 | (add-hook 'cider-repl-mode-hook #'eldoc-mode)
20 | #+end_src
21 |
22 | [[https://emacs.stackexchange.com/questions/31414/how-to-globally-disable-eldoc][有人说]] =global-eldoc-mode= 在某些不支持的模式中会有性能问题. 我自己重未遇到过, 但若你像禁用它则只需要这样:
23 |
24 | #+begin_src emacs-lisp
25 | (global-eldoc-mode -1)
26 | #+end_src
27 |
28 | 现在是时候清理我的配置了! 删除代码就是这么爽!
29 |
--------------------------------------------------------------------------------
/org-mode/根据category来组织org-agenda.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 根据category来组织org-agenda
2 | #+URL: http://sachachua.com/blog/2016/12/using-categories-organize-org-agenda/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: org-mode
5 | #+DATE: [2017-02-08 周三 09:54]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 | 我才发现,原来可以通过为顶层的,非待办的标题添加 =:CATEGORY:= 属性的方法来标示其所属的项目.
10 | 像这样:
11 |
12 | #+BEGIN_SRC org
13 | ,* Project ABC
14 | :PROPERTIES:
15 | :CATEGORY: ABC
16 | :END:
17 |
18 | ,** TODO A task related to Project ABC
19 | ,** TODO Another task related to ABC
20 | ,*** TODO Subtask
21 | SCHEDULED:
22 | #+END_SRC
23 |
24 | 这样在agenda中,会在最左边一列显示"ABC" 而不是默认的 "todo".
25 | 这太棒了 -- 这意味着,在 "Subtask" 的内容中我无需写明这是属于哪些项目的.
26 | 下面是一个agenda的展示,对比了加了与没加 =:CATEGORY:= 属性的两个entry的展示:
27 |
28 | #+BEGIN_EXAMPLE
29 | todo: Scheduled: Follow up on expense reimbursement request
30 | ABC: Scheduled: Subtask
31 | #+END_EXAMPLE
32 |
33 | 此外,添加 =:CATEGORY:= 也能影响到 [[http://orgmode.org/manual/Filtering_002flimiting-agenda-items.html][根据category过滤agenda的结果]].
34 |
--------------------------------------------------------------------------------
/script/fanyi.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/bash
2 |
3 | set -o errexit
4 | content="请将我的非中文文字翻译成中文!注意翻译时保持源文本格式不变,遇到不认识的单词那可能是专有词汇,保持源文不翻译。另外不要做无畏的演绎!:$*"
5 | # BASEURL="https://api.deepseek.com"
6 | # MODEL="deepseek-chat"
7 | # messages="[{\"role\": \"system\", \"content\": \"你是一个好用的翻译助手,请将我的非中文文字翻译成中文。\"},
8 | # {\"role\": \"user\", \"content\": \"${content}\"}
9 | # ]"
10 |
11 | # PROMPT='你是一个好用的翻译助手,请将我的英文文字翻译成中文,非英文不用翻译,翻译后请保持org-mode格式不变!".'
12 | PROMPT='你是一个好用的翻译助手".'
13 | BASEURL="https://open.bigmodel.cn/api/paas/v4"
14 | MODEL="glm-4v-flash"
15 | messages=$(jq -n --arg content "${content}" --arg prompt "$PROMPT" '[{"role": "assistant", "content": $prompt},
16 | {"role": "user", "content": [{"type": "text", "text": $content}]}
17 | ]')
18 | selector=".choices[0].message.content| @text"
19 | # echo $messages
20 | curl -s "${BASEURL}/chat/completions" \
21 | -H "Content-Type: application/json" \
22 | -H "Authorization: Bearer ${LLMKEY}" \
23 | -d "{
24 | \"model\": \"${MODEL}\",
25 | \"messages\": ${messages},
26 | \"stream\": false
27 | }" |jq -r "${selector}"
28 |
--------------------------------------------------------------------------------
/org-mode/在其他地方应用org-mode的table和structure.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 在其他地方应用org-mode的table和structure
2 | #+URL: http://pragmaticemacs.com/emacs/use-org-mode-tables-and-structures-in-emails-and-elsewhere/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: org-mode
5 | #+DATE: [2016-12-07 三 22:09]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 |
10 | 我好喜欢org-mode的 [[http://pragmaticemacs.com/emacs/org-mode-basics-structuring-your-notes/][lists]] 和 [[http://pragmaticemacs.com/emacs/org-mode-basics-ii-use-simple-tables-in-your-notes/][tables]] 功能. 借助于 =orgstruct-mode= 与 =orgtbl-mode= (这两个mode也是org-mode的一部分), 你也可以在其他mode下使用这些功能.
11 |
12 | 在任何major mode都能通过运行 =M-x orgstruct++-mode= 与 =M-x orgtbl-mode= 来启用这两个mode,之后你就可以使用org-mode的那些命令来创建list和table了.
13 | 我觉得在写电子邮件时,这两个功能特别有用,所以我在 [[http://pragmaticemacs.com/emacs/editing-your-emacs-config-file/][emacs配置文件中]] 添加了以下代码来为 message-mode 自定开启这两个minor mode:
14 |
15 | #+BEGIN_SRC emacs-lisp
16 | ;; use org structures and tables in message mode
17 | (add-hook 'message-mode-hook 'turn-on-orgtbl)
18 | (add-hook 'message-mode-hook 'turn-on-orgstruct++)
19 | #+END_SRC
20 |
--------------------------------------------------------------------------------
/org-mode/重整表格数据.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 重整表格数据
2 | #+URL: http://pragmaticemacs.com/emacs/reformatting-tabular-data/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: org-mode
5 | #+DATE: [2017-06-14 三 16:43]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 |
10 | 有时候,我需要从pdf论文中抽取出表格中的数据来用于研究. 我可以拷贝表格内容,然后粘帖在Emacs buffer中,然而这些数据的格式一般都需要调整后才能用.
11 | 好在,Emacs有大量的工具可以帮助我们重整这种数据.
12 |
13 | 下面这段gif动画展示了我用来整理数据的那些工具(当然了,还有很多种其他方法可以完成同样的事情).
14 |
15 | [[https://i0.wp.com/pragmaticemacs.com/wp-content/uploads/2017/05/reformat-table.gif?w=620]]
16 |
17 | 在这段动画中,我使用了下面这些工具
18 |
19 | + =C-x h= 选中整个buffer
20 | + =C-c |= 运行 =org-table-create-or-convert-from-region= 将选中区域转换成org表格. 光这样还不够,但至少它让数据变得更好看了.
21 | + =M-S-= 删掉那些不需要的列
22 | + =mc/mark-next-like-this= ([[http://pragmaticemacs.com/emacs/multiple-cursors/][multiple cursors]] 中的函数) 让我同时编辑每一行(我把该功能绑定到了 =M-.=)
23 | + =M-f= 越过下一个单词
24 | + =shrink-whitespace= [[http://pragmaticemacs.com/emacs/delete-blank-lines-and-shrink-whitespace/][删除掉空格]] (我把该功能绑定到了 =M-SPACE=)
25 | + =C-c -= 运行 =org-table-insert-hline= 来为我的表格添加一个水平分割线
26 |
27 | 这些动作将数据重新组织成了我所想要的形式,现在我可以使用 =org-table-export= 将表格导出成其他有用的形式了.
28 |
--------------------------------------------------------------------------------
/dired/在Dired中批量修改文件权限.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 在Dired中批量修改文件权限
2 | #+URL: http://pragmaticemacs.com/emacs/batch-edit-file-permissions-in-dired/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-common
5 | #+DATE: [2017-02-22 周三 11:39]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 | 我之前提到过,dired的编辑功能(即wdired)能够很方便地完成像 [[http://pragmaticemacs.com/emacs/dired-redirect-symbolic-links/][修改软连接指向]] 这一类的操作. 然后我最近又发现,只要在你的 [[http://pragmaticemacs.com/emacs/editing-your-emacs-config-file/][emacs配置文件中]] 加入:
10 |
11 | #+BEGIN_SRC emacs-lisp
12 | ;; allow editing file permissions
13 | (setq wdired-allow-to-change-permissions t)
14 | #+END_SRC
15 |
16 | 这么一句话,你就可以使在dired buffer中直接修改文件属性了.
17 |
18 | 下面动画展示了我是怎么为某目录下的所有的pdf文件设置用户组组的写权限的,其中涉及到许多插件:
19 |
20 | 1. 使用 [[http://pragmaticemacs.com/emacs/dynamically-filter-directory-listing-with-dired-narrow/][dired-narrow]] 来过滤出pdf文件
21 | 2. 按下 =C-x C-q= 来进入dired的可编辑模式
22 | 3. 移动到第一行的用户组权限位置,然后使用 [[http://pragmaticemacs.com/emacs/multiple-cursors/][multiple cursors]] 来为每一行都加上虚拟光标
23 | 4. 按下 =w= 键来设置写权限, 按下 =RET= 退出 multiple cursors, 然后按下 =C-c C-c= 确认修改
24 |
25 | [[https://i1.wp.com/pragmaticemacs.com/wp-content/uploads/2017/02/dired-file-permissions.gif?w=620]]
26 |
--------------------------------------------------------------------------------
/emacs-common/将粘贴板中的内容添加到Emacs的kill-ring中.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 将粘贴板中的内容添加到Emacs的kill-ring中
2 | #+URL: http://pragmaticemacs.com/emacs/add-the-system-clipboard-to-the-emacs-kill-ring/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-common
5 | #+DATE: [2016-12-04 日 14:11]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 |
10 | 我之前写过一篇文章: [[http://pragmaticemacs.com/emacs/automatically-copy-text-selected-with-the-mouse/][如果将Emacs中选中的内容保存到粘贴板中]]. 这篇则是关于整合粘贴板与Emacs的另一篇文章.
11 | 该文的灵感来源于牛逼轰轰的[[https://github.com/dakrone/eos/blob/master/eos.org][Emacs operating system]] 系列配置文件. 该系列配置文件中包含又好多的好东西.
12 |
13 | 默认情况下,若你先拷贝了什么东西到粘贴板中(假设是从firefox中拷贝了一些文本),然后又在Emacs中拷贝或剪切了一些文本,则你会发现之前从firefox中拷贝的那些内容被覆盖了.
14 | 不过如果在你 [[http://pragmaticemacs.com/emacs/editing-your-emacs-config-file/][emacs配置文件]] 中设置了下面这个选项,则在Emacs拷贝或剪切文本时还会将粘贴板中的内容添加到kill-ring中,这样一来你就可以通过 [[http://pragmaticemacs.com/emacs/counsel-yank-pop-with-a-tweak/][遍历Emacs粘贴板历史]] 的方式找回原内容了.
15 |
16 | #+BEGIN_SRC emacs-lisp
17 | ;; Save whatever’s in the current (system) clipboard before
18 | ;; replacing it with the Emacs’ text.
19 | ;; https://github.com/dakrone/eos/blob/master/eos.org
20 | (setq save-interprogram-paste-before-kill t)
21 | #+END_SRC
22 |
--------------------------------------------------------------------------------
/emacs-common/Emacs Swiper 以及 multiple cursors.org:
--------------------------------------------------------------------------------
1 | #+TITLE: Emacs swiper 以及 multiple cursors
2 | #+URL: http://xenodium.com/emacs-swiper-and-multiple-cursors/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-common
5 | #+DATE: [2019年 12月 12日 星期四 14:07:36 HKT]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 | Emacs [[https://github.com/abo-abo/swiper][swiper]] 棒极了. 我将 =swiper-isearch= 的快捷键设置为了 =C-s=.
10 | 我同时也是 [[https://github.com/magnars/multiple-cursors.el][multiple cursors]] 的大粉丝. 我经常用它(挺有趣的).
11 |
12 | 我完全错过了 Ole 早在 2015 年写的文章: [[https://oremacs.com/2015/10/14/swiper-mc/][一个基于swiper的multiple cursor扩展]]. 原来, swiper 自带 multiple cursors 支持 (默认快捷键为 =C-7= ). 耶!
13 |
14 | 更新: 感谢 [[https://irreal.org/blog/?p=8370][irreal 的这篇文章]], 请一定记得将 =swiper-mc= 添加到 =mc/cmds-to-run-once= 列表中 (否者结果将出人意料). 当你第一次调用 =C-7= 时会有提示.
15 | 当你看到类似下面的提示时请一定选择 "n":
16 |
17 | [[http://xenodium.com/images/emacs-swiper-and-multiple-cursors/swiper-mc-no.png]]
18 |
19 | 若你不小心错选了 "y", 那么可以在 *~/.emacs.d/.mc-lists.el* 中修正它. 将 =swiper-mc= 从 =mc/cmds-to-run-for-all= 中删除掉,
20 | 同时将其添加到 =mc/cmds-to-run-once= 中. 调用 =m-x eval-buffer= 来重置这些变量就搞定了.
21 |
22 | [[http://xenodium.com/images/emacs-swiper-and-multiple-cursors/swipermc.gif]]
23 |
--------------------------------------------------------------------------------
/emacs-common/使用SVG在org-reveal幻灯片中现实动态图表.org:
--------------------------------------------------------------------------------
1 | #+TITLE: 使用SVG在org-reveal幻灯片中现实动态图表
2 | #+URL: https://www-public.imtbs-tsp.eu/~berger_o/weblog/2019/11/26/displaying-animated-diagrams-in-org-reveal-slide-decks-with-svg/
3 | #+AUTHOR: lujun9972
4 | #+TAGS: emacs-common
5 | #+DATE: [2020年 01月 15日 星期三 19:22:57 HKT]
6 | #+LANGUAGE: zh-CN
7 | #+OPTIONS: H:6 num:nil toc:t n:nil ::t |:t ^:nil -:nil f:t *:t <:nil
8 |
9 | [[https://github.com/yjwen/org-reveal/][org-reveal]]可以使用org-mode创建幻灯片。幻灯片以HTML文档的形式展现,使用[[https://revealjs.com/][reveal.js]]实现动画。
10 |
11 | reveal.js允许逐步地显示页面中的部分片段,比如项目符号列表之类。
12 |
13 | 它还可以将动态图展示为reveal.js片段,前提是这些图作为嵌入的SVG图像包含在HTML中。
14 |
15 | 在SVG元素中添加 ~class="fragment"~ (及其变体,包括 =data-fragment-index= 属性),可以使用与常规项目符号片段相同的JS动作来展示图表的动画部分。
16 |
17 | 技巧是在org-mode源中使用以下代码来将SVG图标嵌入到HTML源代码中:
18 |
19 | #+BEGIN_EXAMPLE
20 | #+BEGIN_EXPORT html
21 |
24 | #+END_EXPORT
25 | #+END_EXAMPLE
26 |
27 | 我是从[[https://inkscape.org/~doctormo/%E2%98%85group-photo-web-css-popover][这个演示]] 中获得灵感的,它展示了动态现实SVG内容的方法。
28 |
29 | 到目前为止,我已经开始用inkscape编辑图标,最后将整个