junahan / junahan-emacs

Emacs config for ORG/Python/c/c++/Java

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Junahan 的 Emacs 配置

1 摘要

我的 Emacs 配置,初始版本从 Crossemacs 复制。参阅 purcell Emacs 以及其他人的 Emacs 配置 ,详情请看参考文献小节。

主要需求是使用 Org-mode,Python,C/C++ 开发环境。

特别提醒,本 Emacs 配置仅在如下环境进行过测试:

OS: Darwin … Darwin Kernel Version 17.4.0 / Emacs: GNU Emacs 25.3.1

本作品采用知识共享署名 4.0 国际许可协议

2 支持特性 <<features>>

  1. init.el - 位于 .emacs.d 目录下的 Emacs 配置文件入口,在这里加载 lisp 目录下的配置子模块。
  2. init-utils.el - 一些用于配置文件的工具函数定义。
  3. init-elpa.el - 配置 ELPA 仓库。
  4. init-common.el - 通用配置。例如 Speedbar, Projectile, Yasnippet 等。
  5. init-git.el - 使用 Magit 作为 Git Emacs 前端。
  6. init-company.el - 使用 Company 做通用补全,对于不同的语言,可以配置不同的补全后端。
  7. init-flycheck.el - 配置 Flycheck 作为代码飞行检查。
  8. init-ivy-swiper.el - 使用 Swiper 替代 isearch。
  9. init-helm.el - 使用 Helm 作为增量补全和缩减选择的工具,并使用 Helm Projectile 管理项目。
  10. init-helm-gtags.el - 使用 helm-gtags 配置标签索引。
  11. init-org.el - 配置 Org 模块。
  12. init-cpp.el - c/c++ 语言相关配置
  13. init-cedet.el - CEDET 工具配置,包括 Semantic, Senator 等。
  14. init-python.el - 配置 Python 开发环境,使用 Elpa 并使用 Conda 管理虚拟环境 。
  15. init-ein.el - 配置 EIN (Emacs IPython Notebook) 作为 Jupter Notebook Emacs 客户端。
  16. init-lsp-java.el - 使用 slt-java 构建 Java IDE环境。
  17. init-solidity.el - 支持 Solidity 语言开发。
  18. init-theme - 配置使用 gruvbox 主题,配置其他主题相关,如字体,highligh-parentheses, popwin, frame size 等。
  19. init-dashboard.el - Dashboard 相关配置。
  20. init-keyset.el - 配置通用快捷键。

3 快速入门 <<quick-guide>>

3.1 安装 Emacs

使用 Homebrew 安装 Emacs:

$ brew cask install emacs

3.2 克隆 junanhan-emacs.git 项目

运行如下命令从 Github Clone junahan-emacs.git 项目:

# Clone 项目
git clone https://github.com/junahan/junahan-emacs.git

3.3 测试

通过运行项目目录中的脚本 test-startup.sh 运行测试,测试使用项目目录作为 HOME 目录运行测试脚本。

# Emacs debug-init 模式运行测试
./test-startup.sh

3.4 部署

  • 开始之前,备份 ~/.emacs.d 目录以确保能够回去以前的配置。
  • 运行 ./deploy.sh 脚本 - 该脚本使用 stowHOME 目录创建 .emacs.d 链接。

4 常用 Emacs Mode 介绍 <<emacs-mode-intro>>

本节简单介绍一些常用的 Emacs Mode,也是 junahan-emacs 项目使用到的 Emacs 模块。通过这些介绍,可以了解到这些模块的功能、配置和使用。

4.1 安装 Emacs 模块包

快速启动一章已经介绍了如何使用 junahan-emacs 项目安装所需要的环境,本章所需要的常用模块包都已经准备就绪。如果需要尝试安装不同的包,可以使用 Emacs 安装包管理工具直接安装:

# 安装 Emacs 包的便捷方式
M-x package-install RET helm-company RET

4.2 Company 和 company-backends 变量

Company 是一个文本补全框架,该命名意思是“完成任何事情”,文本补全框架通过可插拔前后端获取和显示补全候选列表。可选的后端包括 Elisp, Clang, Ispell, CMake, Yasnippet, etags, gtags, files, keywrods, semantics 等等。通过配置 company-backends 变量支持后端列表。

4.2.1 Company 相关插件模块

  • company-capf: CAPF 后端,提供一个桥接至标准 completion-at-point-functions 设施(在输入点的上下文显示补全候选列表),方便所有主模式定义 CAPF 补全。
  • company-keywrods: 当前文件所属模式语法关键词。
  • company-files: 补全文件路径。
  • company-ispell: 英文输入提示。
  • company-ycmd: 使用 YCMD 的 c/c++ 代码补全后端。
  • company-semantic: 使用 Semantic 上下文索引数据库进行补全。
  • company-yasnippet: 使用 Yasnippet 模版补全。
  • company-gtags: 使用 GNU Global 源代码静态索引数据库补全。
  • company-etags: 使用 Etags 索引数据库补全。
  • elpy-company-backend: Python 代码补全后端。
  • company-dabbrev: 将当前打开的所有 buffer 中的关键字作为补全显示(默认不使用 scratch buffer)。

如果在补全过程中取消了补全, 也可以使用命令再次开启补全。例如 company-files 补全方式就可以使用 company-files 函数开启。

4.2.2 激活 Company 通用支持

通过如下配置激活该 Ccompany Global Mode:

;; Enable global-company-mode.
(require 'company)
(add-hook 'after-init-hook 'global-company-mode)

4.2.3 配置 company-backends 变量

Company Global Mode 默认后端配置大多数情况下工作良好,并能够根据和其他模块配合为不同的开发环境加载合适的后端模块。少数情况下,你需要修改 company-backends 变量。

下面的代码将 company-c-headers 后端加入 company-backends 列表

;; add company-c-header to company-backends
(require 'company-c-headers)
(after-load 'company
  (add-hook 'c-mode-common-hook
            (add-to-list ('company-backends 'company-c-headers))))

以上代码修改全局 company-backends ,也就是说该配置一旦加载,对其他环境(如 Python 开发环境)也有效。你可以通过创建一个缓冲区局部变量修改该行为。

;; function to push company backend to local variable - company-backends.
(defun sanityinc/local-push-company-backend (backend)
  "Add BACKEND to a buffer-local version of 'company-backends'."
  (make-local-variable 'company-backends)
  (push backend company-backends))

;; add company-c-header to company-backends
(require 'company-c-headers)
(after-load 'company
  (add-hook 'c-mode-common-hook
            (lambda () (sanityinc/local-push-company-backend 'company-c-headers))))

为了确认当前缓冲区 =company-backends= 内容,可以运行 =C-h v= 命令查看该变量的值。

4.3 Flycheck

Flycheck 是一个飞行句法检查和提示工具,它使用多种语法检查和提示工具在你输入的时候自动检查缓冲区内容,并在缓冲区直接提示和报告警告和错误。Flycheck 支持超过 40 多种不同编程语言和 80 多种语法检查工具,并有许多第三方扩展可供选择。

;; enable global flycheck mode
(use-package flycheck
  :ensure t
  :init (global-flycheck-mode)
  :config
  (setq flycheck-display-errors-function #'flycheck-display-error-messages-unless-error-list))

4.4 Helm

Helm 是一个增量补全和缩减选择的 Emacs 框架。它为开发人员提供非常容易使用的 API 以开发基于 Helm 的 Emacs 应用,同时提供了强大的搜索工具以及许多内建支持几乎所有常用的补全命令。

4.4.1 安装 Ag

Ag - 是一个类似于 ack 的代码搜索工具,其专注于速度。 Helm-ag 等模块需要 ag 工具。

brew install the_silver_searcher

4.4.2 最小化配置

可以通过运行 M-x list-packages 命令选择并安装 *Helm* 包,或者打开 .emacs.d/Cask 文件,添加 (depends-on "helm") ,然后运行 cask install 命令安装 *Helm* 。完成安装后,最简单的配置如下,即可启动 *Helm*

(require 'helm-config)
(helm-mode 1)

更完整的配置,请参阅读 Helm 完整配置

4.4.3 使用 Helm

通过适当的配置, Helm 会接管你大部分日常使用的 Emacs 操作界面,你可以借助其强大的增量式补全,逐步缩减候选列表范围直到找到你需要的项为止,例如,它可以接管 M-x 界面,允许你以 Helm 的方式选择要运行的命令,这通常会提升你的效率。它还有非常好用的正则表达式匹配和搜索界面。

Key 绑定命令说明
M-xhelm-M-x命令列表
M-yhelm-show-kill-ring显示剪切环内容
C-x bhelm-mini显示打开的缓冲区和最近打开的文件
C-x C-fhelm-find-filesFind-file 的 Helm 版本
C-shelm-ff-run-grep正则表达式版本的 helm-find-files
C-c h ihelm-semantic-or-imenuSemantic/imenu 的 Helm 界面
C-c h mhelm-man-woman跳转到任意 man 文档入口
C-c h /helm-findFind 的 Helm 界面
C-c h lhelm-locateLocate 的 Helm 界面
C-c h ohelm-occurOccure 的 Helm 界面
C-c h ahelm-apropos命令、函数、变量描述
C-c h h ghelm-info-gnus
C-c h h ihelm-info-at-point
C-c h h rhelm-info-emacs
C-c h <tab>helm-lisp-completion-at-point提供一个可用函数列表
C-c h bhelm-resume恢复前面一个 helm 会话
C-h SPChelm-all-mark-rings查看本地和全局标记环内容
C-c h rhelm-regrex可视化正则表达式匹配
C-c h xhelm-register显示 Emacs 注册表内容
C-c h thelm-topTop 系统命令的 Helm 界面
C-c h shelm-surfraw很多 Web 搜索引擎的命令行界面
C-c h ghelm-google-suggest在 Helm 缓冲区内支持交互式输入搜索项和从 Google 获取结果
C-c h chelm-color列出所有可用的 Faces
C-c h M- :helm-eval-expression-with-eldoc在 Helm 缓冲区获取 Emacs lisp 表达式实时结果
C-c h C- ,helm-calcul-expressionHelm 计算器界面
C-c C-lhelm-eshell-historyEshell 历史界面
C-c C-lhelm-comit-input-ringShell 历史界面
C-c C-lhelm-mini-buffer-historyMini-buffer 历史界面

4.4.4 Helm-projectile

Helm-projectile 是一个 ProjectileHelm 界面扩展,支持大多数 Projectile 命令甚者更多特性支持。详情,请参阅使用 Helm + Projectile 管理项目

4.4.5 推荐阅读

4.5 Magit

Magit 是优秀的 Emacs Git 前端,实现大多数 Git 命令,足够处理常用的版本管理任务,可以让你不离开 Emacs 使用 Git。

4.5.1 安装和配置

可以通过 MELPA 或者 cask 安装 Magit 包,通过如下代码配置和激活 magit :

(use-package magit
  :bind
  (("C-x g" . magit-status)
   ("C-x M-g" . magit-dispatch-popup)))

以上配置绑定 =C-x g= 快捷键至 =magit-status= 命令,这个命令是使用最为频繁的命令,基本日常的 Git 操作均可以通过该命令界面完成。

4.5.2 使用总结

运行 C-x g 打开 mgit-status 界面,该界面显示如下图。

https://tva1.sinaimg.cn/large/006y8mN6gy1g776q26urpj31mc0u0aol.jpg

有关 Mgit 使用的更多介绍,请参阅 Emacs 下的 git 工具 magit 简介

4.6 Projectile <<helm-projectile>>

Projectile 是一个 Emacs 项目管理库,其目标是为项目级别上的操作提供一组易用的特性。 Helm-projectile 是一个 ProjectileHelm 界面扩展,支持大多数 Projectile 命令甚者更多特性支持。

  • 同时选择和打开多个文件
  • 任意位置位置打开文件
  • 任意位置标记和复制多个文件
  • 任意位置标记和删除文件
  • 任意切换当前和其他同名文件

4.6.1 安装和配置

可以通过 MELPA 安装 Projectile 并使用如下代码配置和激活 helm-projectile

(use-package helm-projectile
      :init
      (helm-projectile-on)
      :config
      (setq projectile-completion-system 'helm))

4.6.2 快捷键绑定总结

所有 Projectile 命令均以 C-c p 为前缀。以下是有关快捷键绑定的总结。

快捷键命令说明
C-c p hhelm-projectileHelm projectile 界面
C-c p phelm-projectile-switch-project切换至另外的项目
C-c p fhelm-projectile-find-file列出当前项目所有文件
C-c p Fhelm-projectile-find-file-in-known-projects在所有已知项目中查找文件
C-c p ghelm-projectile-find-file-dwim基于上下文查找文件
C-c p dhelm-projectile-find-dir列出当前项目所有目录
C-c p ehelm-projectile-recentf列出当前项目最近打开的文件
C-c p ahelm-projectile-find-other-file在具有文件名但不同扩展名之间的文件切换
C-c p iprojectile-invalidate-cache作废缓存
C-c p zprojectile-cache-current-file添加当前选中缓冲区文件至缓存
C-c p bhelm-projectile-swith-to-buffer列出所有当前项目中打开的缓冲区
C-c p s ghelm-projectile-grep从项目根目录开始搜索符号
C-c p s ahelm-projectile-ack同上,但使用 ack
C-c p s shelm-projectile-ag同上,但使用 ag

4.6.3 推荐阅读

4.7 ORG

ORG 是一个快速高效的存文本系统,可用于记日记、维护待办事项列表、计划项目以及撰写和发布文档。ORG 可以说是 Emacs 相当重要的组成部分。本文就是用 Emacs ORG 模块撰写。我也将 ORG 模块用于安排日程和跟踪 OKR。

4.7.1 概述

ORG 是一个快速高效的存文本系统,可用于记日记、维护待办事项列表、计划项目以及撰写和发布文档。ORG 可以说是 Emacs 相当重要的组成部分。本文就是用 Emacs ORG 模块撰写。我也将 ORG 模块用于安排日程和跟踪 OKR。

  • 写作 (Editing)
    • ORG 支持大纲结构,可以快速容易的在不同标题之间导航
    • 支持折叠标题内容
    • 内置便捷的快捷键绑定和很多高效编辑设施。
  • 计划 (Planning)
    • 可以用于管理待办事项 (TODO) 列表和计划
    • 每个标题可以被当作一个任务
    • 可配置待办事项关键字及通过 C-c C-t 或者 S-<left/right> 快捷键切换关键字
    • 支持计划元数据,如:排期 (scheduled)、截止日期 (deadline)、标签、属性等。
  • 计时 (Clocking)
    • 启动任务计时 C-c C-x C-i
    • 结束任务计时 C-c C-x C-o
    • 计时日志记录在抽屉里 (drawer)
    • 支持可定制的格式报告
  • 日程表 (Agendas)
    • ORG 模块帮助您聚焦于任务,可以轻松管理很大的 .org 文件和数千任务
    • 内置日程表视图按周显示任务排期计划和截止日期、待办事项列表以及停滞的项目
    • 日程表视图支持根据需要进行定制:支持按天/按周/按月;支持以标签和待办事项列表关键字定制
    • 日程表是 ORG 的关键模块
  • 捕获 (Capturing)
    • 将一个代办事项添加到 .org 文件的过程称之为 capturing
    • 您可以从任意地方 capture,既可以在 Emacs 中,也可以通过其他应用程序(如浏览器、PDF 阅读器等)
    • Capture 模版允许您定义想 capture 的上下文信息
  • 列表 (Tables)
    • ORG 是一个优秀的纯文本表格编辑器
    • 可以通过 .csv.tsv 文件,或者直接从当前缓冲区导入列表
    • 支持到处多种格式
    • ORG 也可以被用作一个电子表格 (spreadsheet) 系统
    • 您可以使用 Calc Emacs 包或者 Emacs lisp 代码为表格添加计算公式
  • 发布 (Exporting)
    • ORG 是一个出版发布工具
    • 可以使用直观的标记将 ORG 文档转换为 HTML, LaTeX, ODT 等格式文档
    • 开发者可以很容易的创建新的后端以支持特定格式
    • 您可以为一个或者多个 .org 文件定义发布项目,并可以定义一个或者多个发布后端
  • 嵌入代码 (Working with source code)
    • ORG 以便捷和自然的方式支持文学编程 (literate programming)
    • 支持插入代码片段、在 ORG 缓冲区执行代码片段并输出计算结果;支持从 Org 文件抽取源代码文件

更多有关 ORG 模块内容,请参阅 学习 Emacs Org

4.7.2 ORG 模块配置

有关 ORG 的详细配置,请参阅 init-org.el

4.7.3 安装 MacTex

MacTex 被 ORG Mode 用于到处 PDF 以及 Tex 格式文档,可直接运行如下命令安装 MacTex :

$ brew cask install mactex

4.7.4 拼写检查

建议使用 aspell + ispell-mode。运行如下命令安装 aspell

$ brew install --with-lang-en aspell

添加如下配置启用拼写检查。

;; for spell check
;; could be ispell as well, depending on your preferences
(setq ispell-program-name "aspell")
;; this can obviously be set to any language your spell-checking program supports
(setq ispell-dictionary "english")

(add-hook 'org-mode-hook 'flyspell-mode)
(add-hook 'org-mode-hook 'flyspell-buffer)

4.7.5 使用 Capture

  • 使用 Capture 快速添加 TODO 和 NOTE。
;; Capture 模版配置
(setq org-capture-templates
      `(("t" "todo" entry (file "")  ; "" => `org-default-notes-file'
         "* TODO %?\n SCHEDULED: %U\n" :clock-resume t)
        ("n" "note" entry (file "")
         "* %? :NOTE:\n%U\n%a\n" :clock-resume t)
        ))
  • 指定org-agenda-dir,Emacs会从指定目录下的所有 .org 文件抽取日程安排。
;; define the refile targets
(defvar org-agenda-dir "")
(setq-default org-agenda-dir "~/org")
(setq org-default-notes-file "~/org/refile.org")
(setq org-agenda-files (list org-agenda-dir))

4.8 TRAMP Mode

TRAMP 能够被用于访问远程机器文件,支持 ssh, scp, rsync, smb, adb 等协议。它工作于 Emacs 底层,因此很多包都无感使用 TRAMP。

  • 使用 Emacs 编辑远程文件而无需在远程机器上安装 Emacs
  • 配合 dired 模块使用而将 Emacs 变成一个 ssh 客户端
  • 配合 eshell 模块使用可以将本地输入命令送到远程机器执行

有关 TRAMP 的使用,请参阅 Emacs TRAMP

5 科学写作

使用 Emacs + AUCTeX + CDLaTeX mode + LaTeX 可以帮助进行科学写作。

5.1 配置

默认配置工作良好。

;; for cdlatex
(require 'cdlatex)
;; for acutex
(require 'auctex)

;; 在 org mode 下打开 cdlatex
(add-hook 'org-mode-hook 'turn-on-org-cdlatex)

5.2 CDLaTeX

CDLaTeX 是一个 Minor Model,可以帮助加速输入 LaTeX 公式。在 Org 模式下,建议使用 Org 模式内置的轻量级 org-cdlatex-mode 版本。要在当前缓冲区打开该模式,请运行 M-x org-cdlatex-mode, 如果要为所有 Org 文件打开该模式,请做如下配置:

;; 在 org mode 下打开 cdlatex
(add-hook 'org-mode-hook 'turn-on-org-cdlatex)

5.3 杂项

5.3.1 LaTeX 片段预览配置

LaTeX 片段预览支持行内预览。该功能需要安装 dvipng, dvisvgm 或者 convert 以处理 LaTeX 片段产生预览图片。可以通过定制变量 org-format-latex-optionsorg-format-latex-header 配置预览。特别是 :scale (对应 HTML 输出 :html-scale) 属性可以用来调整预览图片的大小。

;; 切换预览 LaTeX 片段
C-c C-x C-l (org-toggle-latex-fragment)

5.3.2 Org Entities Help

Org Entities 帮助方便搜索和显示所有 Org 实体,包括 LaTeX 数学符号、函数等。输入 M-x 命令,可以查看完整的 entities:

;; 查看完整的 Org 实体定义
M-x org-entities-help

5.4 进阶学习

5.4.1 一份不太简短的 LaTeX2e 介绍

英文版 - https://tobi.oetiker.ch/lshort/lshort.pdf 中文版 by ChinaTEX 论坛 - https://github.com/CTeX-org/lshort-cn/

5.4.2 CTAN

CATN (The Comprehensive TEX Archive Network) 是一个囊括各种类型 TEX 文档资源的中心站点。

6 开发环境 <<ide>>

6.1 Python IDE

使用 Emacs 及 Python 相关插件模块,可以自己动手,构建一个完善的 Python IDE 开发环境,除了支持基本的代码编辑、自动补全、代码调试以外,还支持 Python 虚拟环境、Jupyter Notebook 集成、Org 模块集成等。

有关详情,请参阅 Python IDE (TODO…)。

6.2 C/C++ IDE

使用 Emacs 可以构建一个完整的 C/C++ IDE 开发环境,从代码编辑、自动补全、代码调试、编译、运行测试到重构,甚至是项目管理均有良好的支持。

有关详情,请参阅 C/C++ IDE (TODO…)。

6.3 Java IDE

使用 lsp-java 构建完善的 Java IDE 开发环境,支持代码编辑、补全、风格检查、交叉引用索引等现代 IDE 支持。有关详情,请参阅 Java IDE

7 杂项

  • 不关闭 Emacs,重新加载配置 - 执行命令 M-x load-file RET 来加载变更后的 Emacs 配置。
  • Gloden Ratio - Automatic resizing of Emacs windows to the golden ratio.

8 参考文献 <<references>>

  1. GNU Emacs, https://www.gnu.org/software/emacs/
  2. crossemacs, https://github.com/cnsworder/crossemacs.
  3. purcell, https://github.com/purcell/emacs.d.
  4. compay, https://company-mode.github.io.
  5. Emacs 下的 git 工具 magit 简介 - http://jixiuf.github.io/blog/000100-emacs-magit.html/.
  6. Emacs: 最好的 Python 编辑器, https://segmentfault.com/a/1190000004165173.
  7. Emacs IPython Notebook, https://tkf.github.io/emacs-ipython-notebook/.
  8. elpy, https://elpy.readthedocs.io/en/latest/introduction.html.
  9. ein, https://millejoh.github.io/emacs-ipython-notebook/.
  10. Master Emacs in 21 Days, zilongshanren, http://book.emacs-china.org/#orgheadline1.
  11. IPython Notebook, https://ipython.readthedocs.io/en/stable/.
  12. C/C++ Development Environment for Emacs - https://tuhdo.github.io/c-ide.html.
  13. Ivy User Manual - https://oremacs.com/swiper/.
  14. Ivy swiper - https://github.com/abo-abo/swiper.
  15. A Package in a league of its own: Helm - https://tuhdo.github.io/helm-intro.htm.
  16. Exploring large projects with Projectile and Helm Projectile - https://tuhdo.github.io/helm-projectile.html.
  17. Helm Github - https://github.com/emacs-helm/helm.
  18. Python Progromming In Emacs - https://www.emacswiki.org/emacs?action=browse;oldid=PythonMode;id=PythonProgrammingInEmacs.
  19. latex - https://www.latex-project.org/get/.
  20. mactex - https://www.tug.org/mactex/.
  21. lst-java - https://github.com/emacs-lsp/lsp-java.
  22. Emacs Bootstrap - http://emacs-bootstrap.com.
  23. Emacs Tramp - https://writequit.org/denver-emacs/presentations/2017-06-20-tramp.html.
  24. EmacsWiki - AUCTeX - https://www.emacswiki.org/emacs/AUCTeX.
  25. AUCTeX docuement - http://www.gnu.org/software/auctex/documentation.html.
  26. Spacemacs 和 Org-mode 和 LaTeX - https://blog.poi.cat/post/spacemacs-plus-org-mode-plus-latex
  27. CDLaTeX help, https://orgmode.org/manual/CDLaTeX-mode.html.
  28. LaTeX fragments Previewing, https://www.gnu.org/software/emacs/manual/html_node/org/Previewing-LaTeX-fragments.html.
  29. orgmode, https://orgmode.org, 2019.
  30. orgmode 手册学习笔记, https://emacsist.github.io/emacsist/orgmode/orgmode%E6%89%8B%E5%86%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.html, 2017.
  31. 文学编程简介, https://github.com/lujun9972/emacs-document/blob/master/org-mode/%E6%96%87%E5%AD%A6%E7%BC%96%E7%A8%8B%E7%AE%80%E4%BB%8B.org, 2016.
  32. Literate database, http://howardism.org/Technical/Emacs/literate-database.html, 2015.
  33. EMACS-DOCUMENT, http://blog.lujun9972.win/emacs-document/, 2019.
  34. gloden ratio 模块 - Automatic resizing of Emacs windows to the golden ratio.
  35. Fast and robust Emacs setup - by Chenbin.

本作品采用知识共享署名 4.0 国际许可协议

About

Emacs config for ORG/Python/c/c++/Java

License:Apache License 2.0


Languages

Language:Emacs Lisp 99.8%Language:Shell 0.2%