既にある自分の Cygwin 環境で gnupack の emacs だけ使ってみたい
うちの環境は 64bit Windows 10 で Cygwin 64bit 版を利用している。
emacs は Cygwin に入っていたのをターミナルで使っていたが、最近そぞろに GUI 版を使いたくなってきたので gnupack の emacs を入れることにした。
ここにその顛末を述べたいと思う。
gnupack をインストールする
上記のサイトを参考にインストールする。
emacs だけ欲しいので
パッケージ emacs for gnupack - gnupack - OSDN
にある emacs 24.2 を入れればいいのかもしれないが、 gnupack に入っている emacs のほうが 24.5 とバージョンが新しいようなので欲を掻いて
gnupack_devel-13.06-2015.11.08.exe
を入れることにした。
インストール方法は Users Guide に記載あり。ほぼダウンロードして解凍するだけ。
C:\gnupack
にインストールした。
emacs の起動
もともと入っている 64bit 版 Cygwin の bash を起動し、その中から gnupack Users Guide に書かれた startup_emacs.exe を使って起動を試みる。
$ /cygdrive/c/gnupack/gnupack_devel-13.06-2015.11.08/startup_emacs.exe
起動するにはするが、これだと gnupack 専用の設定で起動してしまう。
HOMEの位置も変わってしまうし、いつも使っている .emacs も読んでくれない。
なんか変な感じ。
そこで、直接 emacs を起動してみる。
$ /cygdrive/c/gnupack/gnupack_devel-13.06-2015.11.08/app/cygwin/emacs/bin/emacs.exe
すると、ウィンドウがポップアップして落ちる。
どうやら 64bit 版 Cygwin からは直接起動できないらしい…。
おとなしく gnupack が作り上げた世界で生きていくことも選択肢の一つだが、ここではとりあえず、ふつうの Cygwin 環境で gnupack の提供する emacs だけ使えるようにしてみる。
32bit 版 Cygwin を入れる
64bit版 Cygwin からは直接起動できないようなので 32bit Cygwin を入れることにした。(ここで、「Cygwin を入れ直すなら gnupack の構築した世界で生きていけばいいのでは……」という葛藤としばし戦うことになる)
setup-x86.exe (32-bit installation) を使う。
この記事の執筆時点での最新は 2.5.1。
(Cygwinのインストールについては64bit版の別の記事もご参考にどうぞ)
32bit 版 Cygwin から emacs を直接起動してみる
インストールも無事終わり bash を起動して、そこから gnupack の emacs を起動してみる。
すると、下の warning が出て起動しない。
$ /cygdrive/c/gnupack/gnupack_devel-13.06-2015.11.08/app/cygwin/emacs/bin/emacs
Warning: arch-dependent data dir `/app/cygwin/emacs/libexec/emacs/24.5/i686-pc-cygwin/': No such file or directory
Warning: arch-independent data dir `/app/cygwin/emacs/share/emacs/24.5/etc/': No such file or directory
Warning: Lisp directory `/app/cygwin/emacs/share/emacs/24.5/lisp': No such file or directory
Error: charsets directory not found:
/app/cygwin/emacs/share/emacs/24.5/etc/charsets
Emacs will not function correctly without the character map files.
Please check your installation!
/app をマウントする
どうやら gnupack の提供する /app が見えないために emacs が起動しないようなので gnupack についてきた /etc/fstab を参考に /app をマウントする。
gnupack の /etc/fstab
# For a description of the file format, see the Users Guide
# http://cygwin.com/cygwin-ug-net/using.html#mount-table
# This is default anyway:
# none /cygdrive cygdrive binary,posix=0,user 0 0
none / cygdrive binary,nouser,noacl,posix=0 0 0
C:/gnupack/gnupack_devel-13.06-2015.11.08/home /home ntfs binary,nouser,noacl,posix=0 0 0
C:/Users/ユーザー名/AppData/Local/Temp/gnupack /tmp ntfs binary,nouser,noacl,posix=0 0 0
C:/gnupack/gnupack_devel-13.06-2015.11.08/app/cygwin/local /usr/local ntfs binary,nouser,noacl,posix=0 0 0
C:/gnupack/gnupack_devel-13.06-2015.11.08 /root ntfs binary,nouser,noacl,posix=0 0 0
C:/gnupack/gnupack_devel-13.06-2015.11.08/app /app ntfs binary,nouser,noacl,posix=0 0 0
C:/Users/ユーザー名/Desktop /desktop ntfs binary,nouser,noacl,posix=0 0 0
C:/Users/ユーザー名/Desktop /top ntfs binary,nouser,noacl,posix=0 0 0
/app は C:/gnupack/gnupack_devel-13.06-2015.11.08/app が本体らしいので、うちの Cygwin の /etc/fstab にも同じ設定を追加する。
# /etc/fstab
#
# This file is read once by the first process in a Cygwin process tree.
# To pick up changes, restart all Cygwin processes. For a description
# see https://cygwin.com/cygwin-ug-net/using.html#mount-table# This is default anyway:
none /cygdrive cygdrive binary,posix=0,user 0 0
#none / cygdrive binary,nouser,noacl,posix=0 0 0
#C:/gnupack/gnupack_devel-13.06-2015.11.08/home /home ntfs binary,nouser,noacl,posix=0 0 0
#C:/Users/ユーザー名/AppData/Local/Temp/gnupack /tmp ntfs binary,nouser,noacl,posix=0 0 0
#C:/gnupack/gnupack_devel-13.06-2015.11.08/app/cygwin/local /usr/local ntfs binary,nouser,noacl,posix=0 0 0
#C:/gnupack/gnupack_devel-13.06-2015.11.08 /root ntfs binary,nouser,noacl,posix=0 0 0
C:/gnupack/gnupack_devel-13.06-2015.11.08/app /app ntfs binary,nouser,noacl,posix=0 0 0
#C:/Users/ユーザー名/Desktop /desktop ntfs binary,nouser,noacl,posix=0 0 0
#C:/Users/ユーザー名/Desktop /top ntfs binary,nouser,noacl,posix=0 0 0
とりあえず、全部コピペして /app 以外はコメントアウト。 /etc/fstab を保存して
$ mount /app
を実行してマウント。
再度 emacs を Cygwin から実行してみる
動いた!
その他の設定
gnupack の local に入っている諸々にアクセスできるように local もマウントしておいたほうがいいかもしれない。
でも /usr/local にマウントされるので、自分で /usr/local にインストールしたものがあるとそれは使えなくなる。
そういう向きは、とりあえず gnupack の local/bin に PATH だけ通しておいてもいいかもしれない。
.bashrc
export PATH=/app/cygwin/local/bin:$PATH
私の場合、32bit Cygwin を入れたばかりで /usr/local には空の bin, etc, lib ディレクトリがあるだけなので mount してみた。
/etc/fstab で下の設定のコメントを外し
C:/gnupack/gnupack_devel-13.06-2015.11.08/app/cygwin/local /usr/local ntfs binary,nouser,noacl,posix=0 0 0
/usr/local にマウントする
$ mount /usr/local
こうすると gnupack に入っている日本語 man も表示出来てありがたい。
$ man 3 printf
PRINTF(3) Linux Programmer's Manual PRINTF(3)
名前
printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 指定された書式に
変換して出力を行う書式
#include <stdio.h>int printf(const char *format, ...);
...(後略)...
やってみたことリスト
今回は、とりあえず起動しただけ。まだ使い込んでいないのでちゃんと動くのか、ちょっと不安だけど、下のようなことは出来た。
- Cygwin の bash から gnupack の emacs を直接起動。OK
- /app/cygwin/emacs/bin/emacs ~/.bashrc として自分の .bashrc が開く。(gnupack のホームのものではなく)
- Cygwin の標準的なドライブ指定方式 /cygdrive/c で Cドライブにアクセス。OK。(gnupack では /cygdrive はマウントされない)
- 日本語入力 OK。ATOK使えた。
- テキストファイルに utf-8-unix で書いて保存。OK
- M-x complile 実行。OK。 g++ -g -Wall -std=c++14 -o exe-name src-name.cpp を実行。コンパイルも通り、実行したら動いた。
ちょっと前には 64bit Windows では、 64bit Cygwin じゃないとダメなんじゃないかと思っていたけど、気のせいだったかな。それとも Cygwin のほうでなにか対処したのかな。
最後に
今回は、既存の環境に gnupack の emacs だけを追加してみる方法を検討してみたが、その作業のあいだ gnupack が提供してくれる環境を使っていくなかで、これでもいいかな、いやむしろこっちのほうがいいかな、という気持ちに傾きつつある。
どうしよう。