Help us understand the problem. What is going on with this article?

CUIのEmacsからGUIのEmacsに移行するためにやったこと

More than 3 years have passed since last update.

この記事は.emacs Advent Calendar 2016の10日目です。

概要

Emacsを使い始めて3ヶ月目にして、CUIのEmacsからGUIのEmacsに移行しました。

環境はArch Linuxです。

そのために必要だったこと、できるようになったことも書いています。
Linuxなので、やったことはほとんどLinuxのウィンドウシステムに関係があります。

特に、現在CUIのEmacsを使っているが、GUIのEmacsも使いたいという方にお読みいただければ幸いです。

動機

3年くらいVimを使っていたので、テキストエディタをターミナルで動かすことに一種の美学を感じていました。(中二病)

ですが、ブログの記事などを見ると多くの人がGUIで起動しています。
確かにGUIで起動すると何となく便利そうです。

そんな事情でGUIのEmacsには興味があったのですが、かのるびきちさんがこう仰っていたのが決め手になりました。

CUI 版にも根強いファンがいますが、思い切って GUI 版を使ってみましょう。
筆者も長いこと CUI 版を使っていましたが、乗り換えました。
GUI 版には CUI 版にない多彩な表現方法が使えます。

Emacsテクニックバイブル
~作業効率をカイゼンする200の技~

結論

移行して良かったです。
苦労したこともそれなりにありましたが、Emacsの真の力を見ることができました。

移行するメリット

CUIでは使えないキーバインドが設定できる

M-%M-rightといった特殊なキーは、CUIのEmacsでは使えません。

よく聞くttyが何だか全くわかっていませんが、ttyコンソールではこれらのキーが使えないようです。
M-%はXTermのみ使うことができましたが、XTermはFcitxのインライン入力がどうしてもできなかったので使う気にはなれませんでした。

これではOrg-modeの使い勝手が悪くなってしまいます。

代替案として、これらの機能を別のキーにバインドする方法が、Org-modeのWikiに書いてありました。

Using Org on a tty

が、これらを全て設定して覚えるのは正直面倒です。

これらのような問題は、GUIのEmacsでは解決されます。
MuhenkanSuperといった特殊なキーも使えます。使わないですが。

表現力が豊かになる

テキストエディタに似つかない言葉ですが、GUIのEmacsの表現力は本当に豊かです。

下記のようなことができるようになりました。

  • 行番号をさり気なく表示する
  • Powerlineで様々な情報をきれいに表示する(powerline)
  • HTMLカラーをプレビューする(rainbow-mode)
  • カラーテーマを導入する(color-theme)

カラフルなGUIのEmacs

Screenshot_2016-12-06_08-14-51.png

CUIのEmacs、これはこれで好き

Screenshot_2016-12-06_08-23-56.png

ただし、ターミナルでやっていた背景透過はできなくなりました。
できるとは思うのですが、ハードルが高いようなのでやめておきます。

ハードルが高いと言えば、フォントの導入も難しかったです。
.Xresourcesを何回も書き直しました。

そのあたりのことはこちらの記事に書きました。

Emacsで日本語フォントを個別設定

インプットメソッドがバッファ毎のモードになる

東アジア圏で必ず問題になるインプットメソッド。

私がCUIの時に感じていた不満は、日本語入力ONの時にhelm-M-xなどで絞り込んでコマンド実行したい、という場合に、
日本語入力のままコマンドを打とうとしてイラッとすることが多かったです。

それを回避する方法もあるようですが、しっくりきませんでした。たまに切り替わらない時がありました。
※これは自分が設定できていないだけかもしれません。

C-x * とかを入力した時にfcitxをオフにする fcitx.elの導入

emacs-mozcを使えば、mozc-modeが有効になっているバッファのみ日本語入力状態になるので、かなり便利です。

また、下記のように設定することでより快適になりました。

  • mozc-modeの時にカーソルを青くして、見分けをつけるようにする
  • C-;でmozc-modeを開始
  • C-gでmozc-modeを終了
  • いくつかのキーがmozc-modeで消えてしまうので、取り返す
;; Mozc settings
(require 'mozc)
(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")

(setq mozc-candidate-style 'overlay)

(defun mozc-start()
  (interactive)
  (set-cursor-color "blue")
  (message "Mozc start")
  (mozc-mode 1))

(defun mozc-end()
  (interactive)
  (set-cursor-color "gray")
  (message "Mozc end")
  (mozc-mode -1))

(bind-key* "C-;" 'mozc-start)
(bind-key "C-g" 'mozc-end mozc-mode-map)
(bind-key "C-x h" 'mark-whole-buffer mozc-mode-map)
(bind-key "C-x C-s" 'save-buffer mozc-mode-map)

※emacs-mozcはCUIのEmacsでも使えますが、CUIのEmacsだとOSのIMEと共存させる必要があり、多少面倒です

OSのクリップボードとの連携

これは、クリップボードの内容が意図せずに書き換わってしまうというデメリットもあるので、人によるかもしれません。

移行するデメリット(と思えたもの)

シェルの呼び出しが面倒

これは今でも思っています。
M-x shellM-x termを試したのですが、うまくいきませんでした。特にzshとの相性が悪い。
pecoとか使わなければ良いのか。そのへんの機能はEmacsで代替できるしなー

結局、ターミナルは全く別のソフトを使って誤魔化しています。

これによる弊害は、今まではデュアルモニタで片方はターミナル、片方はブラウザという感じで使えていたのですが、
新たにEmacsが加わったことにより収まらなくなってしまったことです。

そのため、awesomeというタイル型ウィンドウマネージャを使って、ウィンドウサイズをキーボードで調節できるようにしています。

また、Emacs流儀に従って、なるべく多くの操作をEmacs上で行うことにして、そもそもターミナルへの依存頻度を減らしました。

  • Magit
  • Dired, WDired
  • helm-ghq
  • counsel-git-grep

あたりを使うようになってから、ターミナルを使う頻度が減りました。

あ、でもこれ使えばM-x termを快適にできるかも・・・
Copy/Paste in emacs ansi-term shell

背景の透過の設定が面倒

これは、Solarized-darkテーマが入るようになったのでトントンかと。

インプットメソッドが正常に動作しない

これはArch Linux特有の問題なのですが、fcitx-mozcemacs-mozcパッケージが競合してしまいます。

なので、systemd-nspawnでArch Linuxのコンテナを作り、
その中でemacs-mozcをビルドしてmozc_emacs_helperを取り出すことで解決しました。

Arch Linuxで、Systemd-nspawnによる仮想環境を構築し、Emacs-mozcをインストールする方法

多分もっとArch Linuxに詳しい人ならそんな力技しなくて良いのだと思う。

フォントの依存関係

これも面倒でした。
CUIだとターミナルの設定次第で簡単に変わるのに、一筋縄ではいきませんでした。

Macの人はもっと楽なのかな。

結論

Emacs最高

acro5piano
React.js / TypeScript / DevOps エンジニア。 Fastlane のコントリビューター。 Terraform と Ansible のファン。 https://twitter.com/acro5piano
https://github.com/acro5piano
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした