Posts categorized "Emacs" Feed

Dec 09, 2016

この記事は『トレタ Advent Calender 2016』 の9日目の記事です。開発メンバーの日々の試行錯誤がなんかいい感じにまとめられた記事が続く中、完全に箸休め感ある内容...。

今年もEmacs

4月にトレタに転職してから業務で主に使う言語をPerlからRubyにスイッチしたけど相変わらず Emacs 使い続けてる。 同僚が RubyMine つかってたのみてちょと挑戦したけどだいぶ脳内変えないといけなくていったん挫折...。 GUI な Emacs も挑戦してみたものの Emacs とターミナルとの行き来がどうにも手間でそちらも挫折...。 結局いままでどおり iTerm2 + tmux + (CUI) Emacs 使ってる状況で、これが加齢か...と感じずにはいられない...。

そんな感じで右往左往してた状況だったので、dotfiles 内にある Emacs 関係のファイルの今年のコミット数かぞえてみたら、

➜ git log --oneline --since=2016-01-01 | wc -l
233

➜ git log --oneline --since=2016-01-01 .emacs.d | wc -l
128

となって、dotfiles 全体で半分以上の変更だった...。意外になんかワチャワチャやってたので振り返る。

use-package

今年は use-package を使うようになって設定をまるっと書き直した、というのが結局一番コミットすうに貢献(?)したようだ。 今までゴミゴミ散乱してたやつがだいぶスッキリしたので精神衛生上だいぶ良くなった。特に helm 周りはこれで結構すっきりまとめれた印象。

(use-package helm
  :bind (("M-x" . helm-M-x)
         ("C-x b" . helm-mini)
         ("C-x C-f" . helm-find-files)
         ("C-c y"   . helm-show-kill-ring)
         ("C-c m"   . helm-man-woman)
         ("C-c o"   . helm-occur)
         :map helm-map
         ("C-h" . delete-backward-char)
         :map helm-find-files-map
         ("C-h" . delete-backward-char))
  :init
  (custom-set-faces
   '(helm-header           ((t (:background "#3a3a3a" :underline nil))))
   '(helm-source-header    ((t (:background "gray16" :foreground "gray64" :slant italic))))
   '(helm-candidate-number ((t (:foreground "#00afff"))))
   '(helm-selection        ((t (:background "#005f87" :weight normal))))
   '(helm-match            ((t (:foreground "darkolivegreen3")))))
  :config
  (helm-mode 1))

(色指定のスタイルなんかまざっとるな...)

Projectile

今更感ありつつも Projectile 使い始めた。これはだいぶ具合がよい。helm-projectilehelm-ag でさらに具合が良い。

(use-package helm-projectile
  :diminish projectile-mode
  :bind ("C-c p p" . helm-projectile-switch-project)
  :init
  (use-package helm-ag)
  :config
  (projectile-global-mode t)
  (helm-projectile-on))

最も使うのは helm-projectile-find-file と helm-projectile-ag で、helm-projectile-ag のお陰でコマンドラインに移動して ag する回数がまぁまぁ減った。 「まぁまぁ」にとどまったのは、helm-ag だとマッチした前後の行を表示できなくて、情報たりなくて結局コマンドラインにもどって普通に ag するということがあるというところで(でもあらためて helm-ag の README 読んだらなんか ag に渡すオプション追加できそうなのでひょっとしてできる?)。

ちなみに生 ag もあまり使うことなくて .gitconfig に以下のような alias 追加して git grep と 生ag の出力だいたい揃えてそちらばかり使ってる(gitで管理されてないものがもはやあんまりないし)。

[alias]
ag = grep --heading --break --line-number --color --show-function

Ruby

そう。Ruby を始めた。が、Emacs の設定はいままで使ってきた Perl ほど森っとしてない。

(use-package ruby-mode
  :mode ("\\.rb$" "Capfile" "Gemfile")
  :interpreter "ruby"
  :config
  (defun my-ruby-mode ()
    (custom-set-variables
     '(ruby-insert-encoding-magic-comment nil))
    ;; use flycheck with rubocop
    (setq flycheck-checker 'ruby-rubocop)
    (flycheck-mode t))

  (add-hook 'ruby-mode-hook 'my-ruby-mode))

(use-package ruby-end
  :diminish ruby-end-mode
  :init
  (add-hook 'ruby-mode-hook '(lambda () (ruby-end-mode t))))

(use-package ruby-block
  :diminish ruby-block-mode
  :init
  (setq ruby-block-highlight-toggle t))
  (add-hook 'ruby-mode-hook '(lambda () (ruby-block-mode t)))

(use-package rbenv
  :config
  (global-rbenv-mode))

(use-package robe
  :init
  (add-hook 'ruby-mode-hook '(lambda () (robe-mode)))
  (add-hook 'robe-mode-hook '(lambda () (ac-robe-setup))))

robe はいまのところそれほど役にはたってないかも。auto-complete と dabbrev の補完で概ね事足りてる感。

Cask やめて use-package + package.el へ

Emacs 25.1 にアップグレードしたら、会社の Mac でなぜか Cask でたしてるはずの load-path からまったく読み込んでくれないという現象に陥って、にっちもさっちも行かなくなった。 結局のところバージョン固定もしてないし使ってるパッケージは elpa、melpa に全部あるものだけだったので Cask は捨てることにした。代わりに use-package が package.el を透過的につかってくれるのを当てにして use-package のみで管理することにした。

(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(package-initialize)
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))
(eval-when-compile
  (require 'use-package)
  (setq use-package-always-ensure t))
(require 'diminish)
(require 'bind-key)

コレ入れて Emacs 起動すれば自動でインストールされるし、あたらしいパッケージ使うときも use-package で設定書いて eval すればよし。バージョンアップも Cask でも雑にやってたのでそのへんの雑さは変わらず、Cask と use-package で2重管理する必要もなくなった。大変具合が良い。

まとめ

来年は RubyMine もっかい挑戦します!

Jun 07, 2016

息抜きで iTerm2 + tmux + Emacs な環境下でフォントをイタリック表示できるようにしてみた。

バージョンなどは以下の通り。

  • Mac OS X 10.11 (El Capitan)
  • iTerm2 v3.0.0
  • tmux 2.2
  • Emacs 24.5

terminfo

tmux 2.1 以降 screen-256color など screen- で始まる terminal を default-terminal として設定している場合はイタリック表示を無効にされてるらしいので、別の terminfo entry を作って指定する。FAQ の感じで。

$ cat tmux.terminfo
tmux|tmux terminal multiplexer,
    ritm=\E[23m, rmso=\E[27m, sitm=\E[3m, smso=\E[7m, Ms@, ncv@,
    use=xterm+tmux, use=screen,

tmux-256color|tmux with 256 colors,
    use=xterm+256setaf, use=tmux,

El Capitan のシステムの screen-256color だと underline も表示できていなかったので、それの表示に必要な(?) ncv@ もついでに追加。で、このファイルを tic -x tmux.terminfo としたいのだが、xterm+tmuxxterm+256setaf もシステムになかったりしたのでその辺りを ncurses v6.0 から持ってきて追加する。

$ cat xterm.terminfo
xterm+tmux|advanced xterm features used in tmux,
    Cr=\E]112\007, Cs=\E]12;%p1%s\007,
    Ms=\E]52;%p1%s;%p2%s\007, Se=\E[2 q, Ss=\E[%p1%d q,

xterm+256setaf|xterm 256-color (set-only),
    ccc@,
    colors#256, pairs#32767,
    initc@,
    setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
    setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
    setb@, setf@,

xterm-256color-italic|xterm 256color with italic and underline,
    ritm=\E[23m, rmso=\E[27m, sitm=\E[3m, smso=\E[7m, Ms@, ncv@,
    use=xterm-256color,

で terminfo entry 作る。

$ tic -x xterm.terminfo
$ tic -x tmux.terminfo

iTerm2

iTerm2 で、イタリックフォントを有効にしつつ、Terminal の設定に xterm-256color-italic を設定。

tmux

次に tmux.conf で設定。

set -g default-terminal "tmux-256color"

これで、iTerm2 + tmux 上のシェルで italic 出てるか確認できる。

$ echo `tput sitm`italics`tput ritm`

Emacs

最後に Emacs。daemon モードで起動している場合は emacsclient を、そうでない場合は emacs コマンドを italic 対応した term 環境化で起動する感じ。

alias emacsclient="TERM=xterm-256color-italic emacsclient"

コメントをイタリックにしてみたの図。

悪くない。

参考

Jan 20, 2010

いまいちやる気がでないときはドットファイルをいじったりします。ということで、今日は .screenrc とか .emacs を少し。

.screenrc はどうでもいい設定とか削ったり、下記を参考に caption と hardstatus の違いを認識した上で設定しなおしたりした。

卜部昌平のあまりreblogしないtumblr - 俺の .screenrc が火を吹くぜ

そして、Mac にスイッチしてからというもの iTerm 使っていたけど描画の遅さに辟易してきたので Terminal 使うことにした。そもそも iTerm 使ってた理由は、Terminal で 256 色表示できないからという理由だけ...。それを諦めれば全然 Terminal のほうが快適っていうのはわかっていたので今回ばっさりあきらめてみた。

BEFORE: (3年前くらい)
emacs22-color

AFTER:
screen + emacs + Mac Terminal

Emacs の色設定もぜんぶ ANSI な感じに。まぁ、色味についてはそのうち慣れるであろう。しかし、Terminal の "Pro" のカラースキームは今ひとつだな。特に青。

Terminal にスイッチしてひとつこまったのが Emacs の Undo。僕は C-x / を使って Undo してたんだけど、Mac の Terminal ではそれが入力できない。/ は ASCII じゃないからとかなんとかという話らしい。ので、今がんばって C-x _(C-x -)に慣れる最中...。