标签:emacs

上古编辑器,神的编辑器

emacs25.1 org2blog 发布中文出错问题

使用 org2blog 发布博客时,提示出错信息如下:

error in process sentinel: url-http-create-request: Multibyte text in HTTP request: POST /xmlrpc.php HTTP/1.1

依次排查了以下可能的原因

  • 网络代理
    • 换成全局代理 podvpn,还是无法正常发布。
    • 使用 linode 上的 emacs,把 blog 文件复制过去,也无法正常发布。
  • wordpress 设置

    早上刚安装了 Disable comments 插件,该插件会禁用 ping 功能,会不会与此相关。麻烦的是,该插件写数据库,并且删除插件时不还原数据库,所以只能对整个 wordpress 进行还原。刚好前两天有个备份,花了点时间,可以正常还原。但问题还在。

  • emacs 插件升级

    将 emacs packages 还原到最后一个备份,不能解决问题。

  • 其它线索
    • linode 和 dell 电脑上的 emacs 无法正常发布 blog,但是 x200 上的 emacs 可以正常发布 blog。
    • 在出错信息中,中文被转换成了 unicode 数字形式。
    • 发布的博客中,如果没有中文,可以正常发布。

最后,从 github org2blog 官方问题列表中,搜到了 Issue 223 。该问题是 emacs25.1 引入的,一个 bugfix 导致了 multibyte http request 问题。

解决方法,修改 url-http.el 文件,注释掉以下几行,并 byte-compile

;; Bug#23750
; (unless (= (string-bytes request)
;            (length request))
;   (error "Multibyte text in HTTP request: %s" request))

MAC 系统初体验

使用的是 macbook air 11,没有 retina 屏,少了很多乐趣,只能体验一下系统。不想花太多时间深度使用,只安装了一些常用软件,做了简单体验。

屏幕是 16:9 的,不是 retina 屏幕,完全没有优势。高度少了一大截,还不如手头正在用的 Thinkpad X200 16:10 屏幕。

输入法不习惯,虽然有 MAC 版本的 QQ 五笔,但设置跟 WIN 上完全不一样。没有分号快捷输入;默认经常是中文输入状态;无法通过 shift 选择二三字。

  • 清歌输入法支持分号模式。

Alfred 没有传说中那么神奇,大概因为没有深度发掘它的功能吧。

Docker 放在屏幕下方太占空间,拖到左边,并且设置成自动隐藏。原来在 WIN 下经常安装软件模拟 Docker,到了 MAC 下,反而不想用了。

键盘不习惯,布局跟美式 101 相差太多。键盘手感也不好。没有小红点不习惯。触控板绝对是亮点。用了一段时间,熟悉触控操作和快捷键后,主要操作没有什么问题,基本上手。

百度云盘跟 WIN 下完全不一样,同步方式比较像 WIN 下的快盘。使用倒没有什么问题。

MAC 版本的迅雷是个渣渣,同一个网络,竟然比 WIN 下版本下载慢很多。

Emacs 一如既往地好用。自带 emacs 是 22.1 版本,太老了。从 emacsformacosx.com 下载安装 25.0 版本,用 git 下载 spacemacs 配置,很快就能正常使用。字体要要调整,英文用 Manaco,中文用 STHeiti,渲染效果一般,不比 WIN 下强多少,跟 Ubuntu 比较相似。

  • 修改命令行下 emacs 默认版本:
alias emacs="/Applications/Emacs.app/Contents/MacOS/Emacs"
  • 安装 seil,设置 capslock 键为 constrol
  • 交换 option 和 command 键
(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'super)
  • 设置字体
(setq fj/en-font "Monaco"
      fj/en-font-size 13
      fj/cn-font "STHeiti-15")

VPN 的安装折腾了一会,主要有两点要注意:

  • 网络配置是有优点级的,需要把 VPN 连接放到最前面。
  • MTU 大小设置成 1280.

重量和大小基本满意,再大再重就没什么意思了,最好能代替 ipad 的日常使用。这个本子如果边框窄点,屏幕大点,加上触控功能,就完美多了。CPU 正常使用没有问题,估计编译大程序会比较吃力。

在 spacemacs 中使用 graphviz

之前用 graphviz 画过几次流程图,感觉不错,只需要关注节点描述和节点关系, dot 程序自动搞掂图的大小和排放,很省脑。这次切换 spacemacs 后,原来的 graphviz 配置已经没有了,我也不想重新配置。

但是,spacemacs 真的很智能,你不想用都不行。我只是打算用 emacs 编辑 dot 文件,刚打开文件,spacemacs 立即提示:“我这里有现成的 graphviz layer 支持,你要不要安装?”这种好事哪能拒绝呢,当然点 YES 了。

接着,就看见窗口切换着,spacemacs 拍啦拍啦自动搞掂了一切。完事后,看看它干了什么:

  • 修改 .spacemacs 文件,加上 graphviz layer 支持。
  • 下载 graphviz layer 相关支持 package。
  • 修改 .spacemacs 文件,把 package 添加到 elpa 列表里。

我的 dot 文件瞬间语法高亮显示了。再试试 graphviz 的快捷键好用不,点两下逗号,立即生成了预览图,真不错。还有更 NB 的,输入 ,t , 打开 graphviz-live-reload 功能,每次 C-x C-s 文件存盘后,预览图自动更新。

在 linode 上使用 spacemacs

一直在用 linode vps,安装的 ubuntu 系统,远程用 putty 连接,emacs 是主力编辑器。emacs 配置是 ftp 上传的,安装成功后就一直没有更新过。没有用 git 托管,配置同步终究是不太方便。今天有时间,决定把 spacemacs 配置同步到 github,再更新到 linode。

我的 spacemacs 配置一共有三部分:一个 .emacs.d 目录,是 spacemacs 的原始代码,未做任何修改;一个 .spacemacs.private 目录,存放私有 layer 和 snippets;一个 .spacemacs 文件,就是 spacemacs 配置文件。

直接从 github 下载 spacemacs 的 develop 分支,作为 .emacs.d 目录:

git clone https://github.com/syl20bnr/spacemacs.git .emacs.d
git checkout -t origin/develop

在本地建立一个目录 .spacemacs.config ,并在目录内新建两个符号链接,保存 spacemacs 的私有配置,并将这个目录上传到 github。PS: junction 语法太 BT,参数顺序与 ln 是反的。

mklink /J ".spacemacs.private" "../.spacemacs.config/.spacemacs.private"
mklink /H ".spacemacs" "../.spacemacs.config/.spacemacs"

远程 linode 上,下载 spacemacs 的私有配置,并创建符号链接。

cd ~
git clone https://github.com/sweord/.spacemacs.config.git
ln -s .spacemacs.config/.spacemacs.private .spacemacs.private
ln -s .spacemacs.config/.spacemacs .spacemacs

启动 emacs,没有成功安装,提示找不到某个 el 文件,查看 emacs 版本太老还是 24.3 的,需要安装新版本的 emacs-25.1

add-apt-repository -y ppa:ubuntu-elisp
apt-get update
apt-get install emacs-snapshot

由于码农的洁癖,老版本必须删除。先查看安装包的名称:

dpkg -S emacs

再全部删除:

apt-get remove emacs24-bin-common emacs24-common emacs24-common-non-dfsg emacs24-nox

启动 emacs,spacemacs 自启成功,自动安装一百三十多个 package 后,成功启动了。linode 服务器网速不错,整个安装过程非常快。查看 spacemacs 启动时间,才两点几秒,太快了。要知道,spacemacs 在我的 x200 笔记本上启动时间大约 15 秒多,在我的 i5-2240 CPU 台式机上,启动时间要 8 秒多,在 linode 上为什么这么快?查看了 cpu 信息,原来是 X5 2680 v5 , cache 有 30M,相当 NB 啊。

cat /proc/cpuinfo

设置 emacs 窗口起始位置和大小

emacs 启动后,是否可以以指定的大小显示在同一个位置?当然可以,通过下面这个 lisp 语句可以达到这个效果。

(setq default-frame-alist
      `((top . 0)
        (left . 0)
        (width . 172)
        (height . 60)
        ))

问题来了。如果你将这个配置写到配置文件中,同步到 svn。假定你有三台不同的电脑,有笔记本,也有台式机,显示器分辨率都是不同的,那么 emacs 在三台设置上的初始大小和位置是不同的。这意味着从 svn 上下载下来的配置文件,在每台电脑上需要先修改才能使用,而且这个修改不能提交到 svn 上。看起来不妥,怎么办?

一个解决办法是,将这个配置写到一个本地文件 local-gui.el 中,并将此文件设置成 svn 忽略。在正式配置文件中,调用加载这个本地文件。

(load-file (concat my-emacs-config-path "/local-gui.el"))

这样问题基本解决。其实还有更简单的方法。。。不用修改配置文件,直接修改 emacs 程序的启动参数就可以达到这个效果。

D:\emacs\bin\runemacs.exe -fh -g 80x52+650+0

80x52+650+0 就是设置 emacs 初始大小的位置的参数,80 为宽度,52 是调度, 650 是 x 坐标,0 是 y 坐标。