代码补全

 

最近看emacs-devel里面关于IDE的讨论,有人提到semantic和irony-mode,分别尝试了一下,配置起来都很复杂,其中semantic无法补全LLVM里面的SmallVector,发信到邮件列表求帮助,暂时没有反馈。于是又试了irony-mode,折腾了好几天,才从log里面发现libclang couldn’t parse这样的错误信息,试了一下,原来是我们的项目用gcc编译没问题,用clang编译报错。改正之后就能正常工作了,补全信息非常准确,唯一的不足就是慢,尤其是第一次补全,要等十几秒,可能是LLVM的文件都比较大吧。

上图的效果是配合company-mode使用(单独使用irony-mode的话,使用C-M-i补全),需要分别下载company-mode, irony-mode, 和company-irony。我的配置如下:

(require 'company)
(add-hook 'c++-mode-hook 'company-mode)
(add-hook 'c-mode-hook 'company-mode)

;;; irony-mode

(add-to-list 'load-path "~/elisp/3rd-party-lib/irony-mode/")
(require 'irony)
(require 'irony-cdb)
(add-hook 'c++-mode-hook 'irony-mode)
(add-hook 'c-mode-hook 'irony-mode)

(add-to-list 'load-path "~/elisp/3rd-party-lib/company-irony/")
(require 'company-irony)
(eval-after-load 'company
  '(progn
     (setq company-idle-delay 3)
     (add-to-list 'company-backends 'company-irony)))

;; replace the `completion-at-point' and `complete-symbol' bindings in
;; irony-mode's buffers by irony-mode's function
(defun my-irony-mode-hook ()
  (define-key irony-mode-map [remap completion-at-point]
    'irony-completion-at-point-async)
  (define-key irony-mode-map [remap complete-symbol]
    'irony-completion-at-point-async))
(add-hook 'irony-mode-hook 'my-irony-mode-hook)
(add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)

(require 'irony-cdb-json)
(irony-cdb-json-add-compile-commands-path
 "~/src/llvm/trunk"
 "~/src/llvm/trunk/build/compile_commands.json")

需要最后一句手工配置LLVM项目是因为irony找不到compile_commands.json文件。产生这个文件的方法是添加一个cmake宏:-DCMAKE_EXPORT_COMPILE_COMMANDS=ON

Tasker任务二则

Tasker是个神器,支持一键(甚至全自动)完成复杂的、涉及多个手机程序的任务。前提是,程序要支持tasker。用过tasker之后,再看那些不支持tasker的app,简直就是半成品!

Macronos for Sonos有种相逢恨晚的感觉,买下之后,顺手创建两个tasker任务,生活顿时美好了许多!

先说一下早上锻炼的流程:

  1. Time Recording程序里check in,
  2. Sonos Play 5播放音乐,
  3. 热身
  4. 使用Sonos Controller for Android调高音量,不然跑步的时候完全听不到,
  5. 跑步机上跑步,
  6. 音量调回到正常,
  7. 力量练习,
  8. 停止播放音乐,
  9. Time Recording程序里check out。

使用Tasker + Macronos for Sonos之后的流程:

  1. 点击手机主屏上的Workout图标,这会启动一个tasker任务,它会自动完成之前的步骤1到步骤6(定时调节音量),
  2. 热身、跑步、力量练习,
  3. 再次点击Workout图表,完成步骤8和步骤9。

 

晚上睡觉的流程就更复杂了,tasker任务的实现也更加复杂,首先看看任务流程。

首先酝酿睡眠气氛(点击Bedtime图标):

  1. 启动tasker任务自动打开Sonos Play 3播放舒缓音乐,
  2. Philips Hue灯泡调成暗红色(下图任务4,使用AutoHue)。

再次点击Bedtime图标,关灯睡觉,监控睡眠。

播放音乐子任务流程如下:

  1. 使用Macronos for Sonos从5个播放列表里面随机选择一个,
  2. 随机循环播放其中的音乐。

 

正式睡觉子任务流程如下:

  1. 调低Sonos Play 3音量,
  2. 设置15分钟倒计时停止播放音乐,
  3. 启动Sleep as Android监控睡眠,
  4. 等待两分钟,
  5. 关闭所有Philips Hue灯泡。

拥有tasker,美好生活,触手可及!