gofujita notes

on outline processing, writing, and human activities for nature


Org との日々 #12

 

8. Spacemacs の外へ

久しぶりの「Org との日々」です。

そしてこの記事は、先週公開した「Minimum migration」のつづきでもあります。

先にもかいたように、ぼくは Emacs をつかいはじめたとき、初心者から熟練まで幅広いファンに支持されているというフレームワーク、Spacemacs を選びました。

この Spacemacs のおかげで、ぼくは多機能すぎるように見えるテキストエディタのつかい始めでも途方にくれずにすみ、Emacs の本格的な機能を楽しみながらこの世界に馴染めました。

それから5年、そろそろ次へすすむ気もちが高まりました。欲しいカタチの Emacs org-mode のセットアップ設定を自分でかくのだという覚悟も固まり、この6月に MacBook Air を買ったのをきっかけとして、素の Emacs から自分の設定ファイルをつくることにしました。

 

8-a. 設定ファイルなしの Emacs で org をつかってみる

まずは Emacs のダウンロード。

少しだけ考えて「Org との日々 #7」にかいた、ぼくにとっていちばんかんたんな方法で、Emacs のサイトからダウンロードし、インストールしました。

ここまでの所要時間は3-4分。今の Emacs は、こんなにかんたんに素早くつかいはじめられるのです。

Application フォルダに入った Emacs.app を起動させると、以下のような Emacs が 体感 1/100 秒くらいの高速で起動します。

ものは試しと、この素の Emacs で org ファイル (かなり大きいサイズ) を開いたところ、思った以上に違和感なく文章をかくこともアウトラインを操作することもできました。これはうれしい発見。

この段階で設定ファイルはゼロ行、というか設定ファイルがありません。設定ファイルなしでも org-mode の大きなファイルをふつうにつかえました。

5年前に Emacs org-mode をつかいはじめたとき、ぼくとしてはできるだけ最小限のセットアップを心がけたつもりでしたが、今思うといろいろ囚われていたことに気づきます。

選んだ項目へのズームインやそこからのズームアウトはタイプしやすいショートカットキーの組み合わせでないといけないとか、Bullet の形は目立たない方がいいとか。

でもまぁ、そんな設定なぞやらなくても、地球は回るのです(笑)。

 

8-b. そのまま Emacs で設定ファイルをかきはじめる

肩の力がほど良く抜けたところで、設定のためのファイルをつくりはじめます。

設定ファイルを複数に分けるやり方もありますが、シンプルに「init.el」ひとつに、自分の設定をかくことにします。

起動した素の Emacs で「init.el」ファイルをつくります。C-x C-f (ctrl+x, ctrl+f) とタイプしてから、mini bufferに以下のようにかけば、init.el ファイルが「.emacs.d」フォルダ内につくられます。

~/(user name)/.emacs.d/init.el

Emacs は起動時最初に「.emacs.d」フォルダ内にあるこの名前のファイルをよみに行くそうです。init は initilization の最初の4文字だと思います。最初に「.」がついているのは、隠しフォルダであることを示しています。

(macOS のファインダで隠しフォルダや隠しファイルを表示するには cmd+shift+. とタイプします)

 

8-c. Emacs のメニューバーと窓をシンプルに

最初にかいたのは Emacs の画面をシンプルにするコード。

(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)

Emacs の設定ファイルは、Emacs Lisp (elisp) という言語でかきます。

menu-bar-mode は、Emacs のメニューバーを制御するモード。同じように tool-bar-mode はツールバー、scroll-bar-mode はスクロールバーを制御するモードです。

Emacs のメニューバーはmacOS のメニューバーと同じ位置、画面いちばん上に表示されます。デフォルトでは「File」や「Edit]などのメニューがあります。ツールバーは窓の上枠で、ファイルを開く、フォルダをつくる、保存するといったメニューがアイコンで示されています。スクロールバーは窓右枠にあるスクロールのためのバーです。

「-1」は、それぞれのモードを無効にするための引数です。たとえば (menu-bar-mode -1) というコードは、menu-bar-mode に自分を無効にしなさいと命令しています。

このコード3行の init.el を保存し (C-x C-s)、Emacs を再起動すると、Emacs の外見は、ほんのちょっとですが、こんな風に変わります。

本体の窓の上枠に並んでいたアイコンがすべて消えていますし、右枠にあったスクロールバーもありません。

 

8-d. かくための UI のセットアップ

見かけをシンプルにできたので、つぎは文章をかくデザインを自分好みにします。

(global-visual-line-mode 1)

入力した文字が画面右端にとどいたとき折り返し表示する、そして英語などでは単語単位での折り返し表示するコードです。

(setq-default left-margin-width 4 right-margin-width 4)

これは、窓の左右両側にマージンをとるためのコードです。

(setq org-startup-indented t)

そして、階層に合わせて左にインデントを入れた表示にします。

(setq org-startup-folded t)

さらに、前回開いたり閉じたりした項目表示を、ファイルを開き直したとき再現するようにします。

(set-face-attribute 'default nil :height 160)

フォントサイズを大きくし、漢字の一部が日本のフォントとちがうので言語環境を日本語にします。

(set-language-environment "Japanese")

ここまで設定した段階で Emacs で org ファイルを開いたのが、以下の図です。

見かけはそれほど変わりませんが (笑)、左にインデントが入り、両側に余白ができています。

加えて yasnippet というお気に入りのスニペット・パッケージもつかうことにします。Emacs でパッケージをダウンロードしてつかう方法として、ぼくは MELPA というリポジトリをつかっています。まずこの MELPA を設定します。

(unless (assoc-default "melpa" package-archives)
  (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t))

つぎに yassnipet の設定。

(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
(setq yas-snippet-dirs '("~/.emacs.d/snippets"))
(yas-global-mode 1)

yassnipet のダウンロードとそのつかい方は「Yasnippet を試す」をご覧ください。

これと関連して、hippie-expand という機能もオンにします。過去につかったことば、たとえばファイル名やセンテンスなどを、最初の数文字で呼びだす機能です。Emacs に含まれている機能なので、デフォルトで似た機能としてオンになっている Dynamic Abbrev の代わりにオンにするだけで OK です。

(global-set-key [remap dabbrev-expand] 'hippie-expand)

hippie-expand については「Dynamic text expansion」に解説をかきました。よろしければ、よんでみてください。おもしろい機能です。

 

8-e. 手づくり関数をひとつ

自作関数のコードもひとつだけ入れました。delete-linebreaks という名前をつけた関数です。

ぼくは短く頻繁に改行しながら文章をかくのが好きなので、人に見せる文章の場合、かいたあとにその改行を一括して削除します。そのための関数です。

くわしくは「Org との日々 #11」をよんでみてください。Emacs での小さい機能のつくり方を紹介しました。

 

8-f. 自分用キーバインドは3つ

そしてパーソナルキーバインド。macOS 風にいうと自分用ショートカットキーです。これもエイヤと削って3つだけ。

(bind-key "C-t" 'org-copy-subtree)
(bind-key "C-o" 'delete-linebreaks)
(global-set-key (kbd "C-x C-j") 'skk-mode)

ひとつめは、org-mode のある項目の下位データだけをコピーする org-copy-subtree、ふたつめは上の自作関数 (delete-linebreaks)、最後は日本語入力システムを skk に切り換えるキーバインドです。

org-copy-subtree はデフォルトで C-c C-x M-w にキーバインドされています。これは長いですし、個人的には、この機能をつかいたい場面は長文の一部の切り貼りなど、ちょっとややこしい作業をしているときが多いので、シンプルなキーバインドを割り当てました。

5年前に org をつかいはじめたときは、特定の項目へズームイン (Emacs では narrowing と呼びます) したり、そこからズームアウトする機能こそ、アウトライナーの大切な機能と考えていましたので、よろこび勇んでいちばんタイプしやすい形にキーバインドしました。

でも今回は、デフォルトのキーバインドでよいことにしました。無理にオレ使用のキーバインドを 増やすこともないかな、と考えたからです。

 

8-g. おわりに

素の Emacs からの設定ファイル最初の作文は、こんなところでしょうか。今のところ、この「init.el」からの起動は、同じ体感 1/100 秒のままです。たぶん。

これ以外に、コードをかく環境を整備したいですが、それは追って楽しみながら。

ここで紹介した設定づくりにあたっては、以下のサイトの記事が参考になりました。

 

Sacha Chua's Emacs configrtion

The Basics of Emacs Configuration

Emacs Config

 

そうそう。ぼく自身がこれまで「.spacemacs」にかきつづけてきたコードが、何よりもの道しるべになったこともかいておきます。

「.spacemacs」からのコピー&ペイストは、自作関数以外はわざとつかいませんでした。