トップページunix
1001コメント315KB

Emacs Part 43

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2013/06/09(日) 14:05:32.09
語り合いましょう。

GNU Emacs - GNU Project - Free Software Foundation (FSF)
https://www.gnu.org/software/emacs/

EmacsWiki: サイトマップ
http://www.emacswiki.org/emacs/

Emacsのトラノマキ | 検索結果: | ありえるえりあ
http://dev.ariel-networks.com/wp/?s=Emacs%E3%81%AE%E3%83%88%E3%83%A9%E3%83%8E%E3%83%9E%E3%82%AD

前スレ
EmacsPart42
http://toro.2ch.net/test/read.cgi/unix/1356319580/
0771名無しさん@お腹いっぱい。2013/11/07(木) 22:39:25.58
X11のフォント設定に依存しない、直接ttfファイル等を指定して
フォントを設定することはできますか?
0772名無しさん@お腹いっぱい。2013/11/08(金) 02:11:35.30
今のところ OS に認識させないと無理だと思う。
0773名無しさん@お腹いっぱい。2013/11/08(金) 12:40:42.05
twittering-modeを使っているのですが
urlをクリックしたときに指定したブラウザでそのリンクを開くよう設定できますか
0774名無しさん@お腹いっぱい。2013/11/08(金) 12:55:08.45
browse-url を使ってるみたいだから、
browse-url-browser-function を browse-url-firefox とか好きなのに変更すればいい。
デフォルトで何が選べるかは browse-url の先頭のコメントのところに列挙されている。
そこにない場合は自分で適当に追加すればいい。

twittering-mode の url クリックの時だけ変更したいなら
twittering-click に包囲 advice でも追加してそこでだけ browse-url-browser-function を変更すればいい。
0775名無しさん@お腹いっぱい。2013/11/08(金) 16:50:57.45
>>774
できました!大変助かりました。感謝です。
07767682013/11/09(土) 01:24:53.69
>>769-770
両方を参考にしてorg-mode-hookでorg-startup-truncatedをnilにすることにしました
ありがとうございました
0777名無しさん@お腹いっぱい。2013/11/09(土) 22:33:14.63
package で color-theme のSolarizedをインストールして
設定ファイルにGithubに書かれているように書き込んだのですが
Emacsを起動する際に
Unable to find theme file for `solarized-dark'と出て、適用されない状態で起動されます。
Pathを確認したところしっかりとPackageでインストールされたものが
はいるディレクトリは通っていますし、
M-x load-file RET ~/.emacs.d/init.el
とするとエラーは出ずにしっかりとSolarizedのColorthemeが適用されます。
原因は何なのでしょうか?
0778名無しさん@お腹いっぱい。2013/11/09(土) 22:48:15.90
>設定ファイルにGithubに書かれているように書き込んだのですが
これのURLがないとなんとも
0779名無しさん@お腹いっぱい。2013/11/10(日) 11:09:20.67
>>750
遅レスだけど、これは caml.el の作者のバグっぽいね。
c-toggle-auto-state は、cc-cmds.elを読み込まないと定義されないけど
きっと作者の環境の .emacs には、これをどこかで読み込ませる設定でも
あって、これを require するのを忘れたんだろう…

対処するならば、
(eval-after-load 'caml
'(require cc-cmds))
という方法もある。

というか、ocaml 使うなら MELPA から tuareg 入れておいたら、
autoload設定も auto-mode-alist の追加も不要なはずなんだけどなぁ。
**
0780名無しさん@お腹いっぱい。2013/11/10(日) 11:19:21.48
>>758
この話題、ちょっと前の gnu.emacs.devel でもあったね。
Emacs 24.4 では lexical-binding の機能を活かして、
コンパイル時に変数チェックまでしてくれるから、
eval-after-load の中もコンパイルすると、変数名のミスなどが見つかるので
有効。もっとも、読み込まないライブラリがあると逆にこれは鬱陶しいので、
ライブラリがない場合は、
(with-no-warnings) で囲むようなマクロを作っておけばさらに便利。

実は Emacs 24.4 には、すでに同じようなことをしてくれる
with-eval-after-load マクロが定義されている。。。
0781名無しさん@お腹いっぱい。2013/11/10(日) 11:32:27.62
>>777
勘で書くけど、
多分、init.el で、
(package-initialize)
を先頭の方で書いていないんじゃないかな。
これ書かないと、MELPA経由でインストールしたパッケージへの
アクセスが init.el でできない。
(package-initialize) は、init.el 読み込み完了後に
(もしinit.el で実行していないなら)自動的に行われるので
起動後は設定できるとか。
0782名無しさん@お腹いっぱい。2013/11/10(日) 11:35:18.32
>>780
>with-eval-after-load マクロが定義されている。。。
なんでいままでなかったんだレベルだな
0783名無しさん@お腹いっぱい。2013/11/10(日) 11:37:23.74
これか
(unless (fboundp 'with-eval-after-load)
(defmacro with-eval-after-load (file &rest body)
`(eval-after-load ,file
`(funcall (function ,(lambda () ,@body))))))

さっさか導入しちゃうのも悪くないな
0784名無しさん@お腹いっぱい。2013/11/10(日) 12:29:19.02
>>730
これも遅レスだけど、最近、一部で話題の領域選択ツール:
https://github.com/magnars/expand-region.el
rの連打でどんどん選択領域を広げてくれる。
0785名無しさん@お腹いっぱい。2013/11/10(日) 13:04:05.71
投下

auto-insert で挿入するテンプレートを yasnippet に処理させる
& ~/.emacs.d/template にモード名でファイルを放り込んでおけば勝手に auto-insert の対象にする

(add-hook 'find-file-hook 'auto-insert)

;; テンプレートファイルのフォルダ. モード名のファイルを配置する (java-mode.java や emacs-lisp-mode.el など)
(setq auto-insert-directory (locate-user-emacs-file "template"))

(defvar auto-insert-template-modtime nil "テンプレートディレクトリの更新時間.")

(defun auto-insert-yas-expand ()
"`auto-insert' するテンプレートを `yasnippet' のスニペットと見做して展開する."
(yas-expand-snippet (buffer-string) (point-min) (point-max)))

(defadvice auto-insert (before auto-insert-update-template activate)
"`auto-insert' 前にテンプレート一覧を更新する."
(let ((modtime (file-attributes auto-insert-directory)))
(unless (equal modtime auto-insert-template-modtime)
(setq auto-insert-template-modtime modtime)
(setq auto-insert-alist nil)
(dolist (template (directory-files auto-insert-directory nil "^[^.]"))
(add-to-list 'auto-insert-alist
(cons (intern (file-name-sans-extension template))
(vector template 'auto-insert-yas-expand))))
))
0786名無しさん@お腹いっぱい。2013/11/10(日) 17:01:24.63
>>777
theme は、普通の load-path とは、違う変数をたどるんだけど、
そこいらへんも、package system で、ちゃんと、面倒見てくれてるのかな?

custom-theme-directory
custom-theme-load-path

調べてみると、良いかもしれない。
0787名無しさん@お腹いっぱい。2013/11/10(日) 18:20:01.75
locate-file (locate-library とか executable-find) の実行結果をキャッシュするのを作った。
init.el なんかでパッケージの有無で分岐して設定変更なんかしてる場合にちょっとだけ起動が速くなる。

http://pastebin.com/hCAGBh6H

locate-file-cache.el で保存してなるべく早い位置で require する。
二回目以降の起動ではキャッシュを読むようになるのでディスクアクセスが発生しなくなって
ちょっとだけ速くなる。
0788名無しさん@お腹いっぱい。2013/11/10(日) 18:26:48.25
>>785
いいね。abbrev, dabbrev, skeleton, tempo, とか全部 yasnippet/auto-complete
に整理してるんで助かった。
(defadvice auto-insert (before auto-insert-update-template activate)
"`auto-insert' 前にテンプレート一覧を更新する."
(dolist (template (directory-files auto-insert-directory nil "-mode\\.[^~]+$"))
(let ((mode (intern (file-name-sans-extension template))))
(setq auto-insert-alist (assq-delete-all mode auto-insert-alist))
(add-to-list 'auto-insert-alist
(cons mode (vector template 'auto-insert-yas-expand))))))
snippet ですむのにわざわざ elisp で実装してドヤ顔している人ってなんなの?
と思わないことはない。
0789名無しさん@お腹いっぱい。2013/11/10(日) 18:46:53.13
SSD だとあんまり気にならなくない?
0790名無しさん@お腹いっぱい。2013/11/10(日) 19:07:33.60
>>789
普通のHDDでも誤差レベル。
自分ところは 37 回ぐらい executable-find とか locate-library してるけど
起動時間が 1.0 sec から 0.9 sec になった程度の差だった。
自己満足ではある。
0791名無しさん@お腹いっぱい。2013/11/10(日) 20:34:49.57
1万回起動すれば1000秒(約16分)の差になる。
メロスも16分遅れていたら約束を果たせなかったかもしれない。
人生の行方を決めるには十分な時間さ。
0792名無しさん@お腹いっぱい。2013/11/10(日) 20:51:46.13
一日2回起動するとしても16分稼ぐのに13年もかかるのか・・・
PCの性能があがると更に差は縮まるだろうしなかなか過酷な旅路になるな
0793名無しさん@お腹いっぱい。2013/11/10(日) 21:17:59.12
>>787
一時的なファイルチェックなんかに locate-file 使われると詰むから
init.el 内のみで機能するようにした方が無難だと思う。
0794名無しさん@お腹いっぱい。2013/11/10(日) 21:29:59.18
init.elc ファイル見てて思ったんだけど、advice 定義の中身ってコンパイルされてないのね。
上の方で eval-after-load の中身をコンパイルしてたけどこっちは出来ないんだろうか。
オプションに compile って付けてみたけど効果がよくわからない。
0795名無しさん@お腹いっぱい。2013/11/10(日) 22:02:56.27
>>794
適当にadviceした関数の定義をsymbol-functionで見てみるとどうやらコンパイルされてるっぽいから
特に何もしなくてもいいんじゃないのかね。defadviceしたタイミングでコンパイルされるんだろうきっと。
0796名無しさん@お腹いっぱい。2013/11/10(日) 23:29:44.99
そうすると init.el に advice 書きまくるとバイトコンパイルのせいでどんどん遅くなるんじゃないかって気がしてきた
実際 flet とか advice の中に書いとくと起動時に Compile-Log のバッファが出来てて warning が記録されてる・・
0797名無しさん@お腹いっぱい。2013/11/10(日) 23:38:22.34
adviceは(あんまり)使うべきではない
http://www.emacswiki.org/emacs/AdviceVsHooks
0798名無しさん@お腹いっぱい。2013/11/10(日) 23:53:51.94
>>790
37回という回数はどうやって計測するの?
0799名無しさん@お腹いっぱい。2013/11/11(月) 00:04:03.16
>>798
occur で数えたよ。ダサい答えでごめんなさい。
require した別のファイルの中でも呼んでたりするだろうから実際はもう少し多いかもね。
それこそ advice でも書いて数カウントでもしたほうがいいのかもしれない。
0800名無しさん@お腹いっぱい。2013/11/12(火) 00:43:56.46
流れぶった切るけど。文字列の最初の空白のみからなる行を削除するのってemacsではどう書くのがいい?

Gaucheだと
(regexp-replace #/^( *\n)*/ str "")
と書けるけど、emacsだと
(string-match "^\( *\n\)*" " \n\n \n hoge\n \n")
はnilになるので。
0801名無しさん@お腹いっぱい。2013/11/12(火) 01:13:26.16
次のバージョンていつリリースされんだろう?
0802名無しさん@お腹いっぱい。2013/11/12(火) 01:41:42.06
>>799
なるほど
ありがとう
0803名無しさん@お腹いっぱい。2013/11/12(火) 02:15:21.12
>>800
\( \) を "" の中に書くときは "\\( \\)"
^ だと行頭すべてにマッチしてしまうので文字列の頭だけなら \\`

(replace-regexp-in-string "\\`\\(?: *\n\\)+" "" " \n\n \n hoge\n \n")
;=> " hoge\n \n"
0804名無しさん@お腹いっぱい。2013/11/12(火) 08:21:26.07
\\`[ \n]*\n

\t はいらんかえ
0805名無しさん@お腹いっぱい。2013/11/12(火) 15:59:22.67
マクロを eval-when-compile 内で定義しておいてロード時には見えないようにしてる場合、
defadvice の中でそのマクロを使ってしまうとコンパイル時に展開されないためか実行時にエラーになってしまいます。
これを回避する方法はないのでしょうか?

cl を eval-when-compile で使いたいのに advice の中で使ってるせいでうまくいかない・・・

; コンパイル時のみ有効なマクロ
(eval-when-compile
(defmacro moo ()
'"moo!"))

; 関数内でマクロ使用
(defun foo ()
(moo))

; アドバイス内でマクロ使用
(defun bar ()
nil)
(defadvice bar (before ad-bar activate)
(moo))

; コンパイル後のファイルをロードして実行した結果:
; (fboundp 'moo) => nil
; (foo) => "moo!"
; (bar) => Error: void-function moo ("moo!" になってほしい)
08068052013/11/12(火) 16:02:59.87
一部間違えました。
(defadvice bar (before ad-bar activate)
(moo))

(defadvice bar (after ad-bar activate)
(setq ad-return-value (moo)))
0807名無しさん@お腹いっぱい。2013/11/12(火) 16:18:13.86
eval-when-compileで思ったが>>787でやってるキャッシュなんか
全部eval-when-compileでやっちゃえばいいんじゃないかと思ったわ
どうせ違う環境にもってったらそんときinit.elコンパイルし直すだろうしな

(when (eval-when-compile (executable-find "w3m")) ...)

みたいな
マニュアルみてもコンパイル時に定数に置き換えるっていってるし
0808名無しさん@お腹いっぱい。2013/11/12(火) 17:17:42.94
>>806
ad-return-value は before after advice では使えなかった記憶が。
around advice 使うしかなかったような。
08098052013/11/12(火) 17:23:22.70
>>808
>>806 で after になおしています。
macroexpand でもダメだったし無理なんですかねえ・・・
08108052013/11/12(火) 17:24:22.75
じゃないや・・ マニュアルによると ad-return-value は after でも使えるみたいです。
0811名無しさん@お腹いっぱい。2013/11/12(火) 18:49:40.14
原理的なおっ説教ですまないが、
- advice を使う
- cl パッケージを cl-* なしで使う
という2重の意味でこまったことをしている気がする。。。

根本から立ち戻って、本当にそれしか方法がないのか再考はできないかなぁ。

Emacs 24.4. の nadvice.el が使えるようになったら色々と捗る気はするが、
捗らないかもしれない。
0812名無しさん@お腹いっぱい。2013/11/12(火) 19:09:32.20
>>811
advice はともかく cl-* を使ってるかどうかは関係なくね?
どっちにしろ (require 'cl) しないと使えない上
(require 'cl) はライブラリで使う時は eval-when-compile にしてランタイムに使うなってのは
変わってないでしょ。
0813名無しさん@お腹いっぱい。2013/11/12(火) 19:34:05.00
>>805
stackoverflow でも似たような質問出ていたけど最後は結局普通に require しろで終わってたな。

他に考えられる方法としては、advice の中身を別関数建てにして予めコンパイルさせるぐらいか。
これだとロード時じゃなくコンパイル時にちゃんと中身までマクロ展開されるし
関数名 typo とかしてても Warning 出してくれるようになる。

(eval-when-compile (defmacro moo () "moo!"))
(defun bar () nil)
(defun ad-bar-internal () (moo))
(defadvice bar (after ad-bar activate) (setq ad-return-value (ad-bar-internal)))
0814名無しさん@お腹いっぱい。2013/11/12(火) 21:39:43.17
(require 'cl) がランタイムで禁止だったのは同名のEmacs Lispの関数を上書きして、
他のソフトがどっちを使っているのか分からなくなる問題があったため。

最近のEmacs は、clパッケージの関数の先頭に全部 cl- をくっつけることで名前衝突を防ぎ、
普通にrequire できる、 (require 'cl-lib) というのがあるので、支障がなければこっちを
使うべき。
08158052013/11/12(火) 21:57:02.45
色々調べたり試してみましたが advice の中で素直にマクロ展開させるのは無理そうでしたorz
cl を止めて cl-lib にしたところコンパイル時の警告が出なくなったので、
自前のマクロ用に>>813さんに指摘された関数の形でくくりだすのと合わせて対応してみます。

>>811さんの教えてくださった nadvice ですが、さらっと見た感じ
advice の中身も普通の関数みたいにコンパイル時にパースされるみたいですね。
導入が楽しみです。

ありがとうございました。
0816名無しさん@お腹いっぱい。2013/11/13(水) 00:45:42.47
>>805,806
(defadvice bar (after ad-bar compile activate)
(setq ad-return-value (moo)))
08178002013/11/13(水) 02:53:28.57
>>803-804
ありがとう。汚いコードを書かずに済みました。
バックスラッシュは……普段rx使ってるのでという言い訳を。

(replace-regexp-in-string (rx string-start (* (or blank "\n")) "\n")
""
" \n\n \n hoge\n \n")
08188052013/11/13(水) 12:01:28.13
>>816
ありがとうございます。
それは前も試しましたが void-function になります。

compile オプションの説明、Info 見ても正直よくわからないんですよね。
elc ファイル直接見てもわかるんですが事前にコンパイルするって命令ではないようです。
(この場合だと elc の中で moo が展開されていない)

preactivate もいまいち使いどころがわからないし色々 advice は難しい・・・
0819名無しさん@お腹いっぱい。2013/11/13(水) 12:34:44.71
>>818
24.3.1 で (bar) -> "moo!" となるけど?
08208052013/11/13(水) 12:47:16.49
>>819
(fboundp 'moo) が t になってませんか?
(symbol-function 'bar) でコンパイル済みの中身がでますが、その中で moo は展開されていますでしょうか。

なにかの拍子に未コンパイルの方を一度でもロードしてしまうと
moo が定義されてしまってそのまま動いてしまったりするので。
0821名無しさん@お腹いっぱい。2013/11/13(水) 14:41:26.54
>>820
じゃあこれでどうだ?

(defadvice bar (after ad-bar preactivate activate)
(setq ad-return-value (moo)))

(eval-when-compile
(ad-compile-function 'bar))
08228052013/11/13(水) 15:19:12.49
>>821
うーむ、結果変わりませんでした。
preactivate の説明みてると事前にコンパイルしてくれても良さそうな内容に見えるんですけどねえ・・
0823名無しさん@お腹いっぱい。2013/11/13(水) 16:23:51.22
emacs終了時に.recentfへの書き込み時間がいつの間にか伸びるようになってしまいました
package経由でインストールしたelispのせいだと思うのですが、どれが原因か絞り切れていません
なにかいい調べ方はありますか
0824名無しさん@お腹いっぱい。2013/11/13(水) 16:41:56.79
recentf-save-list が終了時に .recentf に保存する関数みたいだけど、
実際にそれに時間かかってるのか、それとも他のが終了時に時間かかってて
たまたま .recentf に保存してるメッセージが長く表示されてるように見えてるだけなのか見てみたほうがいいかも。
benchmark とか elp 使って recentf-save-list の実行にかかる時間測ってみるとかね。
あと kill-emacs-hook の中身とか。
0825名無しさん@お腹いっぱい。2013/11/13(水) 19:15:16.60
バイナリファイルをオープンして最初の4byteをリトルエンディアンでリードして返す、
みたいな処理はemacs lispでどう書けますか?
C言語ならfopenしてfreadするだけなのですが…
0826名無しさん@お腹いっぱい。2013/11/13(水) 19:29:14.98
一旦どっかのバッファに読む必要があるけど insert-file-contents-literally を使えばいいと思う。
これだとファイルのどこをどれだけ読むか指定出来る。
文字コード変換とかしないで読み込んでくれるけど、(set-buffer-multibyte nil) は必要だったかもしれない。
0827名無しさん@お腹いっぱい。2013/11/13(水) 19:46:38.84
>>826
ありがとうございます!
やっぱりバッファに読む必要があるんですね。
ファイルサイズが大きいとメモリ喰いそうだけど、仕方ないんですかね。。
まずは教えて頂いた関数をヒントに試してみます。
0828名無しさん@お腹いっぱい。2013/11/13(水) 19:52:09.47
こんな感じ?なんかもっとスッキリ出来るのかな。
あと素の emacs だと 28bit までしか扱えなかったんじゃなかったっけ。最近のは違うんだろうか。

あと insert-file-contents-literally は全部読み込むわけじゃなく、指定した範囲だけ読み込むから
とんでもなく大きい場合でも問題ないよ。

(defun read-dword (filename pos)
(with-temp-buffer
(set-buffer-multibyte nil)
(insert-file-contents-literally filename nil pos (+ pos 4))
(let ((result 0))
(dotimes (c 4 result)
(setq result (+ (lsh result 8)
(string-to-char (buffer-substring (- 4 c) (- 5 c))))))

)))
0829名無しさん@お腹いっぱい。2013/11/14(木) 00:49:11.09
>>828
サンプルありがとうございます。期待通りに動作しました。
insert-file-contents-literallyは&optionalの引数(beg end)で読み込む範囲を指定できるのですね。
ちゃんとマニュアル読むべきでした。すみません。
あと自分のはemacs 23.4.1ですが整数型はsigned 29bitまでしか扱えませんでした。
0830名無しさん@お腹いっぱい。2013/11/14(木) 12:22:56.48
>>824
有難うございます!
0831名無しさん@お腹いっぱい。2013/11/16(土) 17:18:42.52
Emacsがどういうオプションでビルドされたかを見るにはどうすればいい?
0832名無しさん@お腹いっぱい。2013/11/16(土) 20:09:14.64
system-configuration-options でわかるみたいだ
0833名無しさん@お腹いっぱい。2013/11/17(日) 05:15:43.15
たまに *Quail Completions* ってバッファが出来てるんですけど
これは何者ですか?
0834名無しさん@お腹いっぱい。2013/11/17(日) 08:36:04.83
ソースをagでググれば
emacs/lisp/international/quail.el
にありますね。
簡易入力メソッドフレームワーク "qual" のつくるバッファ。

Emacsの入力フレームワークは「たまご」egg(たくさんまたせてごめんなさい)
→eggの簡易版「うずらのたまご」quail.el
→quailの簡易版「こまどりのたまご」robin.el
という形になっていて、ちょっとしたものをつくる場合は robin.el は便利。
0835名無しさん@お腹いっぱい。2013/11/17(日) 10:02:17.99
>>834
ありがとうございます。そういう事だったのですね。
Win や Mac の IME しか使ったことなくて分かってませんでした。
単に \ を入力したつもりが Ctrl + \ を押しちゃってただけでした・・・
0836名無しさん@お腹いっぱい。2013/11/18(月) 00:53:06.94
smartrepを導入したのですが、smartrepによる連続操作実行後にカーソルキーによるカーソルの移動や
Deleteキーによる文字削除の動作を行うと、smartrepの解除と共にアルファベットが入力されてしまうのですが
これを回避する方法はありますか??
C-fやC-b、C-dを使えば問題ないのですが・・


環境は Windows + Cygwin です。
08378312013/11/18(月) 01:52:01.08
>>832
おお!これだ!ありがとう!
0838名無しさん@お腹いっぱい。2013/11/18(月) 15:46:47.28
>>836
Mac使ってて、そういう現象は確認できなかったけど…
他のライブラリが影響を及ぼしていないかを確認するため、
素Emacsでsmartrep以外全てオフにした最小限の状態でも
同じ現象が起こるか確認できる?それで起こるなら
そのコードを張ってみてください…
0839名無しさん@お腹いっぱい。2013/11/19(火) 00:55:47.81
>>838
Macで.emacs.dを削除して最小構成でやってみたのですが、
C-x oooooで画面を切り替えたあと→を押すと「C」と入力されてしまいます。

設定は以下になります。
0840名無しさん@お腹いっぱい。2013/11/19(火) 01:01:35.18
(require 'package)
(add-to-list 'package-archives '("marmalade" . "略"))

;; load-pathを追加する関数を定義します.
(略

(add-to-load-path "elisp")
(add-to-load-path "elpa")

;;; C-x o,o,o...で画面切り替えを行えるようにします。C
(require 'smartrep)
(smartrep-define-key global-map (kbd "C-x")
'(("o" . 'other-window)))
0841名無しさん@お腹いっぱい。2013/11/19(火) 06:15:48.72
>>840
こうさん。こちらじゃ再現しない。最小限構成にしても出るのなら、
もうEmacsそのものの環境の問題とかじゃないかな?

でも確かに C-x o のsmartrep 化は便利だなぁ。
いつも windmove で動いてたけどこっちに乗り換えてみるか。
0842名無しさん@お腹いっぱい。2013/11/19(火) 08:24:01.35
>>841
最後まで付き合ってくれてありがとうございました。
これを機会にC-f,b,n,pを使用した操作に切り替える
という手法で解決しようとおもいます!
0843名無しさん@お腹いっぱい。2013/11/19(火) 21:06:07.19
カーソルキーがエスケープシーケンスな環境とか。
0844名無しさん@お腹いっぱい。2013/11/19(火) 22:07:38.27
24.4とか、25って、どうなってるん?
最近リリースないな
0845名無しさん@お腹いっぱい。2013/11/19(火) 23:02:57.58
24.4のリリースを検討し始めたとこだね。
俺的な改善点はeshellでgitのログとか見れるようになるとこだな。(わかる人しかわからんか)
0846名無しさん@お腹いっぱい。2013/11/19(火) 23:15:58.99
っていうかgitのログすら見れんシェルを付けるなと。
eshellって名乗るぐらいなら
gitログくらいグラフィカルに表示しろ。
0847名無しさん@お腹いっぱい。2013/11/19(火) 23:20:46.75
eshell なんかまだ使ってる人いるんだな
0848名無しさん@お腹いっぱい。2013/11/20(水) 00:07:56.62
eshellはるびきちさんが推してたので一応使ってる
0849名無しさん@お腹いっぱい。2013/11/20(水) 01:27:10.80
つうかeshell以外なに使うんだ?
0850名無しさん@お腹いっぱい。2013/11/20(水) 02:11:18.24
普通にshell-mode
と見せかけて通はterm、これ
素人が手を出すとバッファからぬけられなくなって往生する諸刃の剣
0851名無しさん@お腹いっぱい。2013/11/20(水) 09:23:43.23
僕は ansi-term ちゃん!
0852名無しさん@お腹いっぱい。2013/11/20(水) 09:33:37.82
eshellの利点はwindows上でMSYSとか入れなくても、とりあえずcd,ls,cpとか使える事だな。
後はgnuwin32とかからgrepなんかの必須コマンドを落としてくればOK
0853名無しさん@お腹いっぱい。2013/11/20(水) 09:55:01.65
eshellはなんつーか内部処理の実装が効率悪すぎなんだよね
安全側に寄せてるんだろうけど思わぬ所でシステムコールしまくりみたいな
0854名無しさん@お腹いっぱい。2013/11/20(水) 12:06:55.65
基本 shell-mode で、たまに ansi-term かな。
0855名無しさん@お腹いっぱい。2013/11/20(水) 12:30:42.98
Unix 系 OS 上での eshell のいいところってなんだろう
0856名無しさん@お腹いっぱい。2013/11/20(水) 15:30:20.84
やっぱりカラフルterm+ ♪
0857名無しさん@お腹いっぱい。2013/11/20(水) 16:52:17.10
eshell はファイルを一気に開いたりするにはいい
0858名無しさん@お腹いっぱい。2013/11/20(水) 17:11:59.76
find-file でもワイルドカード使えるよね普通に
0859名無しさん@お腹いっぱい。2013/11/21(木) 00:12:14.72
eshellのもうひとつ便利な機能は**/*.hとかで、ディレクトリを再帰的に辿ってpathを生成してくれるところ
0860名無しさん@お腹いっぱい。2013/11/21(木) 01:07:11.71
shell-mode 弄りすぎて他のは使えなくなってしまった
0861名無しさん@お腹いっぱい。2013/11/21(木) 14:28:57.98
マクロについて質問です。
elisp の info によると、マクロ内で let を使って変数を作った場合
引数内でのその変数名を上書きしてしまうことを問題点としてあげています。
http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Surprising-Local-Vars

この例の中で、(let ((max 0)) ...) ではなく (let ((tempvar (make-symbol "max"))) ...) を使えばいいと書いてあるのですが、
これって max については intern されないので問題ないですが
結局 tempvar については同じ問題をはらんでますよね?
0862名無しさん@お腹いっぱい。2013/11/21(木) 14:42:30.04
その上の例のmaxはマクロが展開された結果に残るけど、
下の例のtempvarは展開時に使うだけで展開された結果には残らない。
0863名無しさん@お腹いっぱい。2013/11/21(木) 15:05:26.93
>>862
なるほど、マクロの理解が足りてませんでした。
評価結果で置換されるわけだから外側の let は置換後の結果にあらわれてこないと。
(defmacro foo1 () (bar)) と (defmacro foo2 () '(bar)) の違いということですね。
いまいちなんでマクロ本体にシングルクォートを置くのかわからず使っていました。

ありがとうございます。
0864名無しさん@お腹いっぱい。2013/11/21(木) 15:16:24.70
もう一つ質問です。
intern-soft で非 nil が返ってくるのに obarray の中にシンボルが見つからないということはありうるのでしょうか。
emacs -q で起動した emacs に対して以下を評価しました:

(require 'cl-lib)
(intern-soft "cl-find") ; => cl-find
(cl-find (lambda (sym) (string-match "^cl-find" (symbol-name sym))) obarray) ; => nil

intern-soft では cl-find が定義されてるように返ってくるのですが、
cl-find で検索した結果は nil となってしまいました。
実際に obarray を展開してインクリメンタルサーチしても実際中に入っていないように見えます。
0865名無しさん@お腹いっぱい。2013/11/21(木) 15:45:04.87
mapatoms で vector (obarray) をお探しくだせぇ

参考

(let ((vec (make-vector 1 nil)))
(intern "a" vec)
(intern "b" vec)
(list
(intern-soft "a" vec)
(intern-soft "b" vec)
(intern-soft "c" vec)))
0866名無しさん@お腹いっぱい。2013/11/21(木) 15:50:00.99
obarray より cl-find の使い方からだな
0867名無しさん@お腹いっぱい。2013/11/21(木) 16:02:45.34
>>865
ありがとうございます。
mapatoms で探索させたところ見つかりました。

(require 'cl-lib)
(let ((found nil))
(mapatoms (lambda (sym) (when (string-match "^cl-find" (symbol-name sym))
(setq found t))))
found) ;; => t

vector ⊂ sequence だと思っていたのですが必ずしもそういうわけでもないってことなんでしょうかね
(pp obarray) させた結果にも cl-find が出てきませんでしたし。
もうすこし vector について勉強してみます。
0868名無しさん@お腹いっぱい。2013/11/21(木) 16:13:23.22
(length obarray) と mapatoms で数えた要素数が異なるのもなんでかわからない・・・

(let ((count 0))
(mapatoms (lambda (sym) (setq count (1+ count))))
count) ;; length の結果とかなり異なる (ex 1511 vs 22728 など)

length のドキュメントを見る限り普通に vector にも使えそうな感じではあるのですが。
0869名無しさん@お腹いっぱい。2013/11/21(木) 16:20:27.07
自己解決しました。
obarray は vector ではあるが、中身は hash 構造になっているので mapatoms 以外での探索は出来ないとのこと。
ちゃんと obarray の説明の所に書いてありますね。length での値が異なるのも納得できました。

http://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Symbols.html
0870名無しさん@お腹いっぱい。2013/11/21(木) 16:21:05.35
解決したらしいけどおまけ。

http://www.mew.org/~kazu/doc/elisp/hash.html
■ このスレッドは過去ログ倉庫に格納されています