気分を変えるために StumpWM を久々に動かしてみた。
StumpWM は Common Lisp で記述されたシンプルなウインドマネージャーで、タイル型と呼ばれるウインドマネージャーです。キーボードを中心に操作を行い、Emacs と相性が良いです。
xrdp で動かす場合の導入のメモを残しておきます。roswellのおかげですごく簡単になっています。
-
このページの記事一覧
- 2020年2月2日日曜日 - ContOS8 StumpWM & Emacs 26.3
- 2014年5月10日土曜日 - term, ansi-term, multi-term + cygwin-mount.el で発生する No such directory found via CDPATH environment variable について
- 2014年5月4日日曜日 - Helm から Hyerspec/CLtL2 を引く
- 2013年12月9日月曜日 - OpenStack Tips with Emacs
- 2013年4月2日火曜日 - popwin.el が本当に便利。今まで使わなかった事を後悔するレベル。
- 2012年7月8日日曜日 - 「Gitポケットリファレンス」でOSSコントリビュート
- 2012年4月8日日曜日 - Emacs Mozc の変換候補の表示場所
- 2012年3月24日土曜日 - EmacsからDBを確認(Emacs DBI)
- 2012年3月11日日曜日 - Emacs で git blame
- 2011年10月8日土曜日 - Emacs 英辞郎 + sdic + sary
- 2011年8月5日金曜日 - 最近のdot.emacs
- 2011年6月30日木曜日 - Emacs フォント関連の設定
- 2011年6月28日火曜日 - Emacs wanderlust mailcapを参照せずに添付ファイルを開く(fiber.exe利用)
- 2011年6月24日金曜日 - Emacs isearch で C-h できない
- 2011年6月23日木曜日 - Emacs Warning: past XX % of memory limit
- 2011年6月19日日曜日 - Solaris11/Emacs ATOK + IIIMECF による日本語入力
- 2011年6月18日土曜日 - Solaris11/Emacs inconsolata フォントを使う
- - Solaris11 Alt を Metaキーとして使う
- 2011年6月1日水曜日 - NTEmacsのデフォルトブラウザをChromeに変更
- 2011年5月10日火曜日 - Emacs anythig から hyperspec と cltl2 を引く
term, ansi-term, multi-term + cygwin-mount.el で発生する No such directory found via CDPATH environment variable について
少々長いタイトルになってしまいましたが、題記の通りです。cygwin-mount.el を有効化した環境で、term.el系を起動したタイミングや、特定ディレクトリへ cd したタイミングで発生します。
この現象は、ターミナル側の cd を捕捉して、Emacs 側でも cd を動かそうとして発生しますので、.emacs や init.el で、
として、ターミナル側の入力をキャッチしている関数を無効化すると、とりあえずは現象を回避できます。
この根本原因は、cygwin-mount.el によって変換される cygwin マウントポイント となるディレクトリを直接指定する場合に、末尾に / つきパスでないと変換してくれない、という仕様によるもののようです。
このようなマウントポイントの場合、
これは上手くいきますが、
これはエラーになります。
このあたりをいじるとよくなるかもしれないですが、どんな影響があるかわからないので、今回の対策としました。
No such directory found via CDPATH environment variable
この現象は、ターミナル側の cd を捕捉して、Emacs 側でも cd を動かそうとして発生しますので、.emacs や init.el で、
;; term側 cd 捕捉によるEmacs側の cd を抑制(term.elで定義されている関数) (fset 'term-command-hook '(lambda (x)))
として、ターミナル側の入力をキャッチしている関数を無効化すると、とりあえずは現象を回避できます。
この根本原因は、cygwin-mount.el によって変換される cygwin マウントポイント となるディレクトリを直接指定する場合に、末尾に / つきパスでないと変換してくれない、という仕様によるもののようです。
このようなマウントポイントの場合、
(shell-command "df -h") ファイルシス サイズ 使用 残り 使用% マウント位置 C:/gnupack_devel-12.02/app/cygwin/cygwin/bin 230G 153G 77G 67% /usr/bin C:/gnupack_devel-12.02/app/cygwin/cygwin/lib 230G 153G 77G 67% /usr/lib C:/gnupack_devel-12.02/app/cygwin/cygwin 230G 153G 77G 67% / C:/gnupack_devel-12.02/app/cygwin/local 230G 153G 77G 67% /usr/local C:/gnupack_devel-12.02/home 230G 153G 77G 67% /home
これは上手くいきますが、
(cd "/home/") "c:/gnupack_devel-12.02/home/"
これはエラーになります。
(cd "/home")
Debugger entered--Lisp error: (error "No such directory found via CDPATH environment variable")
signal(error ("No such directory found via CDPATH environment variable"))
error("No such directory found via CDPATH environment variable")
ad-Orig-cd("/home")
cd("/home")
eval((cd "/home") nil)
eval-last-sexp-1(t)
eval-last-sexp(t)
eval-print-last-sexp()
call-interactively(eval-print-last-sexp nil nil)
このあたりをいじるとよくなるかもしれないですが、どんな影響があるかわからないので、今回の対策としました。
cygwin-mount-activate is an interactive Lisp function in `cygwin-mount.el'. (cygwin-mount-activate) Activate cygwin-mount- and cygwin-style-handling.
file-name-handler-alist
(("\\(?:\\.dz\\|\\.xz\\|\\.lzma\\|\\.lz\\|\\.g?z\\|\\.\\(?:tgz\\|svgz\\|sifz\\)\\|\\.tbz2?\\|\\.bz2\\|\\.Z\\)\\(?:~\\|\\.~[-[:alnum:]:#@^._]+\\(?:~[[:digit:]]+\\)?~\\)?\\'" . jka-compr-handler)
("\\.gpg\\(~\\|\\.~[0-9]+~\\)?\\'" . epa-file-handler)
("\\`/[^/]\\{2,\\}\\'" . tramp-completion-file-name-handler)
("\\`/\\([^[/|:]\\{2,\\}\\|[^/|]\\{2,\\}]\\):" . tramp-file-name-handler)
("\\.lnk\\'" . w32-symlinks-file-name-handler)
("^/cygdrive/[A-Za-z]/" . cygwin-mount-map-drive-hook-function)
("^//[A-Za-z]/" . cygwin-mount-map-drive-hook-function)
("^/[^:@]*$\\|^/|/[^/:]+\\(\\'\\|/\\)" . cygwin-mount-name-hook-function)
("\\`/:" . file-name-non-special))
Helm から Hyerspec/CLtL2 を引く
** 2014/05/11 slime をバージョンアップ したらHyperSpec が引けなくなったので修正
HyperSpec と CLtL2 を Helm から引けるようにします。 anything とまったく一緒です。
HyperSpec は ANSI Common Lispのリファレンス、CLtL2 は Common Lisp the Language, 2nd Editionの略記で仕様書風の読み物。CLTL1 → ANSI と仕様がFIXするまでの経緯等にもついて記載されているらしいです。私はほぼ HyperSpec しか使っていません。
設定方法は以下
HyperSpec と CLtL2 を Helm から引けるようにします。 anything とまったく一緒です。
HyperSpec は ANSI Common Lispのリファレンス、CLtL2 は Common Lisp the Language, 2nd Editionの略記で仕様書風の読み物。CLTL1 → ANSI と仕様がFIXするまでの経緯等にもついて記載されているらしいです。私はほぼ HyperSpec しか使っていません。
設定方法は以下
OpenStack Tips with Emacs
OpenStack Advent Calendar 2013 JPネタ
OpenStackに関する作業をしているとReST APIを直接コールする事がよくあります。
ReSTを操作するにはたくさんのツールがありますが、一番イケてるのはEmacsから操作する方法です(妄想
ちなみにイケてない人は curl -X POST とかしたりします(大嘘
ということで、Emacs用のReSTクライアントを紹介します。
https://github.com/pashky/restclient.el
利用方法は簡単で、git clone して得られる el ファイルを load-path の通ったパスへ配置します。
その後は、
■使用方法
シンプルです。リクエストした内容をバッファに書いて、C-c C-c とするだけです。
使用感はこんな感じです。
■便利な設定
popwin.el と連携して出力結果ウインドを制御してやると使い勝手が向上します。
popwinの詳細はこちら。
http://aikotobaha.blogspot.jp/2013/04/popwinel.html
popwinの設定に以下を追加しておきます。
■mailcap-parse-mailcaps がねえよ的なエラー
使ってるEmacsのバージョンや、導入しているelファイルによっては、mailcap-parse-mailcaps に関するエラーが出ることがあります。
【参考】http://d.hatena.ne.jp/rubikitch/20080124/1201180306
エラー例
ほとんどの場合はFLIMを使ってる場合に出ます。
flim の mailcap.el はもう使われていないので最新版に変更した上で削除するか、(require 'restclient) する直前に (load "c:/gnupack/app/emacs/emacs/lisp/gnus/mailcap.el") としてEmacsが標準で持っている mailcap.el をロードさせてやると回避できます。
OpenStackに関する作業をしているとReST APIを直接コールする事がよくあります。
ReSTを操作するにはたくさんのツールがありますが、一番イケてるのはEmacsから操作する方法です(妄想
ちなみにイケてない人は curl -X POST とかしたりします(大嘘
ということで、Emacs用のReSTクライアントを紹介します。
https://github.com/pashky/restclient.el
利用方法は簡単で、git clone して得られる el ファイルを load-path の通ったパスへ配置します。
その後は、
(require 'restclient)と、ロードして、
M-x restclinet-modeで restclinet-mode へ移行出来ます。
■使用方法
シンプルです。リクエストした内容をバッファに書いて、C-c C-c とするだけです。
使用感はこんな感じです。
■便利な設定
popwin.el と連携して出力結果ウインドを制御してやると使い勝手が向上します。
popwinの詳細はこちら。
http://aikotobaha.blogspot.jp/2013/04/popwinel.html
popwinの設定に以下を追加しておきます。
(push '("*HTTP Response*") popwin:special-display-config)
■mailcap-parse-mailcaps がねえよ的なエラー
使ってるEmacsのバージョンや、導入しているelファイルによっては、mailcap-parse-mailcaps に関するエラーが出ることがあります。
【参考】http://d.hatena.ne.jp/rubikitch/20080124/1201180306
エラー例
Symbol's function definition is void: mailcap-parse-mailcaps
ほとんどの場合はFLIMを使ってる場合に出ます。
flim の mailcap.el はもう使われていないので最新版に変更した上で削除するか、(require 'restclient) する直前に (load "c:/gnupack/app/emacs/emacs/lisp/gnus/mailcap.el") としてEmacsが標準で持っている mailcap.el をロードさせてやると回避できます。
popwin.el が本当に便利。今まで使わなかった事を後悔するレベル。
Emacsを使っていると、コマンド補完候補表示ウインドの *Completions* 等が別ウインドで表示されることがあります。これはこれで便利なのですが、問題はその開く場所と閉じるときの挙動です。
上下に2分割(C-x 2)していると下のウインドを切り替えてバッファを表示して、閉じる時にウインドごと閉じてしまい、また C-x 2 するはめになったりすることがよくあります。
このアクションを起こした際に起こるウインドとバッファの切り替えを制御してくれるのが、popwin.el です。地味な機能ですが、使ってみると手放せなくなります。本当に便利です。
上下に2分割(C-x 2)していると下のウインドを切り替えてバッファを表示して、閉じる時にウインドごと閉じてしまい、また C-x 2 するはめになったりすることがよくあります。
このアクションを起こした際に起こるウインドとバッファの切り替えを制御してくれるのが、popwin.el です。地味な機能ですが、使ってみると手放せなくなります。本当に便利です。
Emacs Mozc の変換候補の表示場所
メインのFedora16を yum update したら mozc.el がアップデートされ、Emacs内ので変換候補の表示がインラインで表示されるようになった。
はじめは便利だと思っていたけど、編集している文書が大きくなると変換がもっさりしてくるのと、リモートから -nw で使っている時の使い勝手があまりよくない。
この設定を元の状態(ミニバッファに変換候補を表示)に戻す方法。
はじめは便利だと思っていたけど、編集している文書が大きくなると変換がもっさりしてくるのと、リモートから -nw で使っている時の使い勝手があまりよくない。
この設定を元の状態(ミニバッファに変換候補を表示)に戻す方法。
;; 変換候補をミニバッファへ表示 (setq mozc-candidate-style 'echo-area) ;; 変換候補をインライン表示 ;(setq mozc-candidate-style 'overlay)
EmacsからDBを確認(Emacs DBI)
これはすごい便利。
・DB操作ツール Emacs DBI を作ってみた
コードをEmacsで確認しつつ、テーブルを直感的&簡単に除くことができる。
主にOpenStackのMySQLスキーマを確認しつつ使ってる。
Fedora16への導入
root# yum install perl-DBD-MySQL
root# yum install perl-CPAN
root# cpan install Module::Build::Compat
root# cpan install RPC::EPC::Service
これらをload-pathの通った場所に配置。
https://github.com/kiwanami/emacs-deferred/raw/master/deferred.el
https://github.com/kiwanami/emacs-deferred/raw/master/concurrent.el
https://github.com/kiwanami/emacs-ctable/raw/master/ctable.el
https://github.com/kiwanami/emacs-epc/raw/master/epc.el
https://github.com/kiwanami/emacs-edbi/raw/master/edbi.el
https://github.com/kiwanami/emacs-edbi/raw/master/edbi-bridge.pl
後はdot.emacsへ
(require 'edbi)
を追記して、
M-x edbi:open-db-viewer
で起動。接続先を聞いてくるのでDBI形式で入力してやる。
素晴らしい!
・DB操作ツール Emacs DBI を作ってみた
コードをEmacsで確認しつつ、テーブルを直感的&簡単に除くことができる。
主にOpenStackのMySQLスキーマを確認しつつ使ってる。
Fedora16への導入
root# yum install perl-DBD-MySQL
root# yum install perl-CPAN
root# cpan install Module::Build::Compat
root# cpan install RPC::EPC::Service
これらをload-pathの通った場所に配置。
https://github.com/kiwanami/emacs-deferred/raw/master/deferred.el
https://github.com/kiwanami/emacs-deferred/raw/master/concurrent.el
https://github.com/kiwanami/emacs-ctable/raw/master/ctable.el
https://github.com/kiwanami/emacs-epc/raw/master/epc.el
https://github.com/kiwanami/emacs-edbi/raw/master/edbi.el
https://github.com/kiwanami/emacs-edbi/raw/master/edbi-bridge.pl
後はdot.emacsへ
(require 'edbi)
を追記して、
M-x edbi:open-db-viewer
で起動。接続先を聞いてくるのでDBI形式で入力してやる。
素晴らしい!
Emacs で git blame
ここを参考に設定。そのまんま。
ソースを開いた状態で C-cG で git blame を開けるようになる。
elispは以下から入手する。
https://github.com/voins/mo-git-blame
事前にgitコマンドが使えるようになっている必要がある。
# yum install git
load-libraryが通ったパスに配置し、バイトコンパイルする。
# emacs -q --no-site-file -batch -f batch-byte-compile mo-git-blame.el
dot.emacsへ以下を追記
ソースを開いた状態で C-cG で git blame を開けるようになる。
elispは以下から入手する。
https://github.com/voins/mo-git-blame
事前にgitコマンドが使えるようになっている必要がある。
# yum install git
load-libraryが通ったパスに配置し、バイトコンパイルする。
# emacs -q --no-site-file -batch -f batch-byte-compile mo-git-blame.el
dot.emacsへ以下を追記
Emacs フォント関連の設定
ここを参考に設定。使っているのはNTEmacs。
;; デフォルトフォントの設定
(set-face-attribute 'default nil
;; :family "inconsolata"
:family "MS ゴシック"
:height 100)
;; 日本語フォントの指定(指定しない場合はデフォルトが使われる)
(set-fontset-font "fontset-default"
'japanese-jisx0208
'("MS ゴシック*" . "jisx0208.*"))
(set-fontset-font "fontset-default"
'katakana-jisx0201
'("MS ゴシック*" . "jisx0201.*"))
;; 文字飾りを有効にする
(setq w32-enable-synthesized-fonts t)
;; フォントの大きさを調整する
;; 無くても綺麗に表示されるのでMSゴシックの場合は必要なし?
(add-to-list 'face-font-rescale-alist
`(,(encode-coding-string ".*MS.*bold.*iso8859.*" 'emacs-mule) . 0.9))
(add-to-list 'face-font-rescale-alist
`(,(encode-coding-string ".*MS.*bold.*jisx02.*" 'emacs-mule) . 0.95))
;; 行間を指定
(setq-default line-spacing 0.2)
Emacs wanderlust mailcapを参照せずに添付ファイルを開く(fiber.exe利用)
これはすごい便利。以下をdot.emacsかdot.wlに記載しておけば、添付ファイルにカーソルを合わせてvでアプリが起動してくる。
(defvar my-mime-preview-play-current-entity-appname "fiber"
"meadow なら fiber, mac なら open, linux なら xdg-open")
(unless (functionp #'mime-preview-play-current-entity-orig)
(fset #'mime-preview-play-current-entity-orig
(symbol-function #'mime-preview-play-current-entity)))
(setq mime-play-delete-file-immediately nil)
(defun mime-preview-play-current-entity (&optional ignore-examples mode)
(interactive "P")
(if (and mode (not (equal mode "play")))
(mime-preview-play-current-entity-orig ignore-examples mode)
(let* ((entity (get-text-property (point) 'mime-view-entity))
(name (mime-entity-safe-filename entity))
(filename (expand-file-name (if (and name (not (string= name "")))
name
(make-temp-name "EMI"))
(make-temp-file "EMI" 'directory))))
(mime-write-entity-content entity filename)
(message "External method is starting...")
(let* ((process-name
(concat my-mime-preview-play-current-entity-appname " " filename))
(process
(start-process process-name
mime-echo-buffer-name
my-mime-preview-play-current-entity-appname
filename)))
(set-alist 'mime-mailcap-method-filename-alist process filename)
(set-process-sentinel process 'mime-mailcap-method-sentinel)))))
参考>> 俺 wanderlust。さっき mailcap と別れてきた
Emacs isearch で C-h できない
恥ずかしながらずっとこういうものだと思っていたんだけど、以下のように設定するればちゃんと使えました。
(global-set-key "\C-h" 'backward-delete-char-untabify)
↓
(keyboard-translate ?\C-h ?\C-?)
(global-set-key "\C-h" nil)
参考>> emacsのisearchでC-hで削除できない
(global-set-key "\C-h" 'backward-delete-char-untabify)
↓
(keyboard-translate ?\C-h ?\C-?)
(global-set-key "\C-h" nil)
参考>> emacsのisearchでC-hで削除できない
Emacs Warning: past XX % of memory limit
gc-cons-threshold を大きくするとガベージコレクションの頻度が落ちてEmacsが早くなる、というのを聞いて大きめの値を設定していたんだけど、これを大きくしすぎるとGCが働かなくなってすぐにメモリが上限に近づいてタイトルのメッセージを出してくる。
最近のマシンじゃGC頻度を上げたことで目に見えるパフォーマンスに差は無さそうな感じなので、gc-cons-threshold を小さめに設定しておくと一度起動したEmacsを長く使い回せます。
(setq gc-cons-threshold 10000)
最近のマシンじゃGC頻度を上げたことで目に見えるパフォーマンスに差は無さそうな感じなので、gc-cons-threshold を小さめに設定しておくと一度起動したEmacsを長く使い回せます。
(setq gc-cons-threshold 10000)
Solaris11/Emacs inconsolata フォントを使う
Emacs自身はパッケージマネージャーで23.1.1がインストール可能。
フォントの公式サイトは以下。
http://www.levien.com/type/myfonts/inconsolata.html
Solaris11はOTFが使えるので以下を入手する。
http://www.levien.com/type/myfonts/Inconsolata.otf
入手したフォントは/usr/share/fonts/TrueType以下に好きなディレクトリを追加して配置する。
# mkdir /usr/share/fonts/TrueType/emacsfonts
# cp Inconsolata.ttf /usr/share/fonts/TrueType/emacsfonts/
フォントキャッシュを再構築
# fc-cache -vf
確認
# fc-list |grep Inconsolata
Inconsolata:style=Medium
Emacsでの設定
フォントの公式サイトは以下。
http://www.levien.com/type/myfonts/inconsolata.html
Solaris11はOTFが使えるので以下を入手する。
http://www.levien.com/type/myfonts/Inconsolata.otf
入手したフォントは/usr/share/fonts/TrueType以下に好きなディレクトリを追加して配置する。
# mkdir /usr/share/fonts/TrueType/emacsfonts
# cp Inconsolata.ttf /usr/share/fonts/TrueType/emacsfonts/
フォントキャッシュを再構築
# fc-cache -vf
確認
# fc-list |grep Inconsolata
Inconsolata:style=Medium
Emacsでの設定
;; フォント設定
(set-face-attribute 'default nil
:family "inconsolata"
:height 120)
時刻:
2:57
Solaris11 Alt を Metaキーとして使う
VBox上のSolaris11でAltがMetaとして使えなかったので、以下で対処。
参考>> emacs -nw で Alt を Meta として使う
xmodmap -e 'keycode 64 = Alt_L Meta_L'これを~/.bashrcに書いておけばOKだった。
参考>> emacs -nw で Alt を Meta として使う
NTEmacsのデフォルトブラウザをChromeに変更
WindowsではNTEmacsからURLを開くときに標準でOS規定のデフォルトブラウザが使われる。通常はもちろんIE。それをChromeに変更するには以下を.emacsへ追記する。パスは自分の環境に合わせて編集が必要。
もちろんOSのデフォルトブラウザを変更してもいいけど、IEじゃないと困ることもあるのでEmacs内でのみ有効になるようにしてみた。
もちろんOSのデフォルトブラウザを変更してもいいけど、IEじゃないと困ることもあるのでEmacs内でのみ有効になるようにしてみた。
;; デフォルトブラウザをChromeへ
(defvar *chrome-path* "C:/Users/win7-u24/AppData/Local/Google/Chrome/Application/chrome.exe")
(setq browse-url-browser-function
'(("." . browse-url-generic)))
(setq browse-url-generic-program *chrome-path*)
Emacs anythig から hyperspec と cltl2 を引く
こちらを参考に、そのままで動きました。
http://d.hatena.ne.jp/kitokitoki/20100912/p1
私はCygwinを使っていないですが、w3m.exe を cygwin でコンパイルされたものを利用しているのでパスの与え方だけ注意。
cltl2.el http://www.uuhaus.de/software/cltl2.el
ドキュメント http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_ht.tgz
dot.emacs は以下
http://d.hatena.ne.jp/kitokitoki/20100912/p1
私はCygwinを使っていないですが、w3m.exe を cygwin でコンパイルされたものを利用しているのでパスの与え方だけ注意。
cltl2.el http://www.uuhaus.de/software/cltl2.el
ドキュメント http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_ht.tgz
dot.emacs は以下
登録:
投稿 (Atom)

