方便的切换emacs主题


作为一个主题控,经常会切换主题,之前切换主题的方式是这样的,M-x,`load-theme`,选中,但是个人认为不够便捷,正好前几天发现了hydra这个插件,也想实践一下

获取主题列表

(setq maple-cycle-themes (mapcar 'symbol-name (custom-available-themes)))

获取当前主题索引

(cl-position (car (mapcar 'symbol-name custom-enabled-themes)) maple-cycle-themes :test 'equal)

获取下一个主题

(setq maple-current-theme-index
      (+ 1 maple-current-theme-index))
(setq maple-current-theme (nth maple-current-theme-index maple-cycle-themes))

加载主题

(load-theme (intern maple-current-theme) t)

最后得到这样的函数

(defun maple/cycle-theme (num)
  (interactive)
  (setq maple-current-theme-index
        (+ num
           (cl-position
            (car (mapcar 'symbol-name custom-enabled-themes)) maple-cycle-themes :test 'equal)))
  (when (>= maple-current-theme-index (length maple-cycle-themes))
    (setq maple-current-theme-index …

emacs笔记


Linux

emacs gui进程放置到后台

EMACS=/usr/bin/emacs
GUI=0
ARGS="$@"
ARRAY=("-nw" "--no-window-system" "--batch" "--help")

for arg in $ARGS; do
    for keyword in "${ARRAY[@]}";do
        if [ $keyword = $arg ];then
            GUI=1
            break
        fi
    done
    if [ $GUI -eq 1 ]; then
        break …

emacs实现智能注释


之前使用emacs时遇到这么一个问题

当前行存在代码折叠时,如果想要注释,必须先选中当前行,否则只能注释代码折叠块的第一行

就像这样

基础注释函数来源于 stackoverflow

(defun comment-or-uncomment-region-or-line ()
  "Comments or uncomments the region or the current line if there's no active region."
  (interactive)
  (let (beg end)
    (if (region-active-p)
        (setq beg (region-beginning) end (region-end))
      (setq beg (line-beginning-position) end (line-end-position)))
    (comment-or-uncomment-region beg end)))

在此函数的位置上进行修改,刚开始使用

(when (hs-already-hidden-p)
    (evil-visual-line))

但是一直没得到想要的效果,后来修改了一下,使用

(when (hs-already-hidden-p)
  (progn
    (end-of-visual-line)
    (evil-visual-state)
    (beginning-of-visual-line)))

意思就是如果当前位置存在代码折叠,先选中当前行,然后注释整个选中区域

因为光标被移动到首位,我对这个不太在意,如果有在意的话,可以使用 …

emacs预览图片时禁止smooth-scrolling


Table of Contents

需求

在使用 org-mode 写文档时,插入图片后默认不显示,想要直接在 org文件中预览图片,可以使用

org-toggle-inline-images

但是问题来了,开启预览模式后,移动光标跳过文件内容,找了一下

参考链接 1 那么问题来了,如何只在开启 org-toggle-inline-images 后关闭 smooth-scrooling, 关闭 org-toggle-inline-images 后开启 smooth-scrooling

解决

给出代码,使用 defadvice

(defadvice org-toggle-inline-images (after org-open-at-point activate)
  (if smooth-scrolling-mode (smooth-scrolling-mode -1)
        (smooth-scrolling-mode 1)))

Footnotes

1 https://github.com/syl20bnr/spacemacs/issues/3824

emacs解决windowns文件乱码


最近在看windows文件时总是乱码,查了资料后才知道windowns下的编码为 gb2312 , 而linux下的编码为 utf-8 ,所以打开文件会乱码

如何解决?

换系统

这不是废话吗!

修改language环境

在配置文件中加入这么一行

(set-language-environment 'Chinese-GB)

重启就行,结果····打开 linux下的文件乱码

重新以gb2312的编码载入文件(推荐)

参考这里

M-x revert-buffer-with-coding-system

选择chinese-gb2312,确认载入(不需要重启)

ok,是不是很简单

解决evil-escape下visual-state不能使用'jj'的问题


在一个多月前我给 evil-escape 开发者提了一个issue,但是不幸的是,没人理我,人理我,理我,我·····

于是这一个多月来我使用visual-state下选择段落的方式是: 跳到段落最后,按k从下往上选择, 现如今都快成为习惯了,今天终于有人解决了我的问题,非常感谢 ZzAntares

之前我用

(setq evil-escape-excluded-major-modes '(dired-mode neotree-mode evil-visual-state))

解决了'jj'在 dired-mode neotree-mode 下的问题,但是遗憾的是 visual-state 下的选择问题仍然没有解决

现在终于解决了, issue

(setq evil-escape-inhibit-functions '(evil-visual-state-p))

ok ,就这样