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

OSXにHomebrewでtmuxとEmacs 24.4をインストールする

More than 5 years have passed since last update.

普段はクラウド上のUbuntuコンテナやLinux Mintをメインの作業環境にしています。最近Arduinoなどマイコンを操作していると、USBシリアル通信をするホストマシンとしてOSXで一通りの開発環境が必要になりました。いつものクラウド上と同じようなの開発環境とOSX上にも用意しようと思います。

ターミナルマルチプレクサ

byobu-configが起動しない

UbuntuやLinix Mintではターミナルマルチプレクサにbyobuを使っています。OSXにもHomebrewでインストールしたかったのですが、byobu-configが起動しません。

$ brew update
$ brew install byobu
$ byobu-config
ERROR: Could not import the python snack module

原因はnewtパッケージとPythonのモジュールにありそうです。

$ brew info newt
newt: stable 0.52.18 (bottled)
https://fedorahosted.org/newt/
Not installed
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/newt.rb
==> Dependencies
Required: gettext ✔, popt ✔, s-lang ✔
==> Options
--with-python
        Build with python support

byobu: Python crashes when executing the program on 10.9 #30252のissueを読むと、--with-pythonオプションを付けてビルドすればよいとか、単にupgradeするだけで良いとか嫌な予感がします。

$ brew update && brew upgrade
$ brew remove newt && brew install newt --with-python

newtの最新0.52.18のFormulaを読むと指定したオプションは使われないようです。そもそもPythonがクラッシュするissueの対応なので、OSX版のbyobuは現在不安定な感じです。

/usr/local/Library/Formula/newt.rb
class Newt < Formula
  homepage 'https://fedorahosted.org/newt/'
  url 'https://fedorahosted.org/releases/n/e/newt/newt-0.52.18.tar.gz'
...
  def install
    args = ["--prefix=#{prefix}", "--without-tcl"]
    args << "--without-python" if build.without? 'python'
...
      # don't link to libpython.dylib
      # causes https://github.com/Homebrew/homebrew/issues/30252
      # https://bugzilla.redhat.com/show_bug.cgi?id=1192286
      s.gsub! "`$$pyconfig --ldflags`", '"-undefined dynamic_lookup"'
      s.gsub! "`$$pyconfig --libs`", '""'
....

tmux

byobuの場合でもいつもtmuxだけなので直接使うことにします。byobuと一緒にtmuxが入っていますが再インストールしました。

$ brew remove byobu
$ brew remove tmux && brew install tmux
$ tmux -V
tmux 1.9a

最近はあまりカスタマイズしないで使うようにしているので.tmux.confもシンプルです。

  • prifixのキーバインドをC-tに変更
  • コピーモードはC-t sで入る
~/.tmux.conf
set -g prefix C-t
unbind C-b
bind C-t send-prefix
bind s copy-mode

ウインドウの移動ができることを確認します。

  • 前のウィンドウ移動: C-t p
  • 次のウィンドウ移動: C-t n

C-t sでコピーモードに入りスクロール移動ができることを確認します。

  • 上にスクロール移動: Up Arrow
  • 下にスクロール移動: Down Arrow
  • 1画面上にスクロール移動: Shift + fn + Up Arrow
  • 1画面下にスクロール移動: Shift + fn + Down Arrow
  • コピーモードを出る: q

Emacs

OSX YosemiteにデフォルトでインストールされているEmacsは22.1.1と少し古いです。

$ emacs --version
GNU Emacs 22.1.1

HomebrewからEmacsをインストールします。--with-cocoaオプションを付けてGUIのEmacs.appも合わせてビルドします。

$ brew update
$ brew install --with-cocoa emacs

バイナリのインストール先とバージョンを確認します。

$ ls -l /usr/local/bin/emacs
lrwxr-xr-x  1 mshimizu  admin  30  3 19 16:43 /usr/local/bin/emacs -> ../Cellar/emacs/24.4/bin/emacs
$ which emacs
/usr/local/bin/emacs
$ emacs --version
GNU Emacs 24.4.1

Emacs.app

Emacs.appを/Applicationsにシムリンクを作ります。

$ brew linkapps emacs
Linking /usr/local/opt/emacs/Emacs.app
Finished linking. Find the links under /Applications.

GUIのEmacs.appの起動を確認します。

$ open /Applications/Emacs.app

Cask

Emacsのパッケージ管理はCaskを使います。OSXなのでHomebrewでもインストールできます。

$ brew install cask
$ cask --version
0.7.2

Caskファイル

~/.emacs.dディレクトリに移動してCaskファイルを作成します。

$ cd ~/.emacs.d/
$ cask init

作成されたCaskファイルにはパッケージがたくさん書いてあります。最初に必要なパッケージだけインストールします。Palletinit-loaderjs2-modeだけ定義します。

~/.emacs.d/Cask
(source gnu)
(source melpa)

(depends-on "pallet")
(depends-on "init-loader")

;; js2-mode
(depends-on "js2-mode")
(depends-on "ac-js2")

elispファイル

init.elの最初でcask.elを読み込みます。Homebrewでインストールした場合は、/usr/local/Cellar/cask/{version}/cask.elにあります。

~/.emacs.d/init.el
(require 'cask "/usr/local/Cellar/cask/0.7.2/cask.el")
(cask-initialize)
(require 'pallet)
(require 'init-loader)
(pallet-mode t)

(setq init-loader-show-log-after-init nil)
(init-loader-load "~/.emacs.d/inits")

init-loaderを使いelispは~/.emacs.d/initsに分割して書きます。

$ mkdir -p ~/.emacs.d/inits

削除キーとヘルプだけキーバインドを変更します。

~/.emacs.d/inits/00-keybindings.el
(define-key global-map "\C-h" 'delete-backward-char)
(define-key global-map "\M-?" 'help-for-help)

CUIがメインでメニューは邪魔なので消しました。

~/.emacs.d/inits/01-menu.el
(menu-bar-mode 0)

ファイルはバックアップを作らなかったり、タブの指定などを少し書きます。

~/.emacs.d/inits/02-files.el
(setq backup-inhibited t)
(setq next-line-add-newlines nil)
(setq-default tab-width 4 indent-tabs-mode nil)

Node.jsのプログラミング用にjs2-modeの設定をします。

~/.emacs.d/inits/03-js2-mode.el
(autoload 'js2-mode "js2-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))
(add-hook 'js2-mode-hook
          '(lambda ()
             (setq js2-basic-offset 4)))

(add-hook 'js-mode-hook 'js2-minor-mode)
(add-hook 'js2-mode-hook 'ac-js2-mode)

cask install

最終的に以下のようなファイルを作成しました。

$ tree -L 2
.
├── Cask
├── init.el
└── inits
    ├── 00-keybindings.el
    ├── 01-menu.el
    ├── 02-files.el
    └── 03-js2-mode.el

cask installコマンドを実行して、Caskに定義したパッケージをインストールします。

$ cask install
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
ユーザーは見つかりませんでした