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

Emacs Part 43

レス数が1000を超えています。これ以上書き込みはできません。
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/
0942名無しさん@お腹いっぱい。2013/12/07(土) 12:56:08.08
きたねーコード貼るな
日記にでも書いてろ
0943名無しさん@お腹いっぱい。2013/12/07(土) 12:56:19.26
なにも表示させたくないならflymakeとかも検討してみたら?
0944名無しさん@お腹いっぱい。2013/12/07(土) 14:06:43.00
emacs 上でテストを書く時にサポートしてくれるようなパッケージってありますでしょうか?
具体的には本体とテストを簡単に行き来出来るようなパッケージを探しています。
0945名無しさん@お腹いっぱい。2013/12/07(土) 17:25:01.89
そんなものありません
0946名無しさん@お腹いっぱい。2013/12/07(土) 22:57:48.90
>>944
`ff-find-other-file' を使えば出来る気がする。
そう思ってググったらCofeeScript用の設定例が見つかった。
https://github.com/yasuyk/coffee-fof/blob/master/coffee-fof.el
0947名無しさん@お腹いっぱい。2013/12/08(日) 09:04:29.88
direx でディレクトリを先に表示するようなのを書いた

(defadvice direx:node-children (around sort-files activate)
"direx でディレクトリを最初に表示する."
(let ((org-directory-files (symbol-function 'directory-files)))
(cl-letf (((symbol-function 'directory-files)
(lambda (directory &optional full match nosort)
(if nosort
(funcall org-directory-files directory full match nosort)
(sort (funcall org-directory-files directory full match)
(lambda (a b)
(let ((dir-a (file-directory-p a))
(dir-b (file-directory-p b)))
(if (eq dir-a dir-b)
(string-lessp a b)
(if dir-a t)))))))))
ad-do-it)))
0948名無しさん@お腹いっぱい。2013/12/08(日) 10:37:49.54
設定ファイル内で、
コンパイル時にライブラリが存在してるかどうかチェックして require したり
実行ファイルが存在するかチェックして設定したり、なんてのがよくありますが、
Cのプリプロセッサみたいにコンパイル時にチェックを済ませてしまうことって出来ないんでしょうか?

(if (executable-find "ruby") (setq hoge "aaa"))
みたいなのがあった場合、コンパイル時に executable-find を実行、if の条件判断までやってしまって
ruby がない場合は elc ファイル内になにも残らず、存在する場合は setq だけ残したいです。
0949名無しさん@お腹いっぱい。2013/12/08(日) 11:03:21.40
マクロを使え
(defmacro if-on-compile (cond &rest form)
(when cond `(progn ,@form)))
0950名無しさん@お腹いっぱい。2013/12/08(日) 11:17:07.24
common lispなら
(if #.(executable-find "ruby") (setq hoge "aaa"))
でいけると思う。
emacs lispでも#.は使えるみたいだけど狙った結果になるかわからん
0951名無しさん@お腹いっぱい。2013/12/08(日) 11:21:30.61
すまん#.使えないやん
0952名無しさん@お腹いっぱい。2013/12/08(日) 12:06:16.44
>>949
それだと cond が評価されない気がする
(defmacro if-on-compile (cond &rest form)
(when (eval cond) `(progn ,@form)))
0953名無しさん@お腹いっぱい。2013/12/08(日) 12:37:34.71
(when (locate... をそれに全部置き換えて eval-when-compile を駆使しまくった結果・・・・
emacs-init-time が 0.9 から 0.8 になった

すげえ虚しい
修正に10分くらいはかかってそうだから 6000回 は emacs を起動しないと元が取れない
0954名無しさん@お腹いっぱい。2013/12/08(日) 13:30:22.30
emacsの起動時間が0.5秒を超えている奴は起動するたびに人生を無駄使いしていると悟るべき。
0955名無しさん@お腹いっぱい。2013/12/08(日) 15:27:05.37
emacsなんて一週間以上そのまま使い続けたりするし
0956名無しさん@お腹いっぱい。2013/12/08(日) 15:36:26.12
俺も再起動は滅多にしないな
するとしたらOSをリブートしたときとかinit.el関連を書き換えたときくらいかな
強制終了するまでは起動しっぱなしだわ
0957名無しさん@お腹いっぱい。2013/12/08(日) 16:02:39.75
navi2ch とか wanderlust とか twittering-mode を使わなくなったら
わりと頻繁に終了させるようになった。
0958名無しさん@お腹いっぱい。2013/12/08(日) 16:29:26.42
shell-mode が快適すぎて終了させる気にならない
0959名無しさん@お腹いっぱい。2013/12/08(日) 16:49:43.64
がんがん再起動するけど
0960名無しさん@お腹いっぱい。2013/12/08(日) 16:55:47.17
>>953
君にとっては小さな0.1秒でも、
1000年後、2000年後の子孫にとっては貴重な100時間になるかもしれない。
これこそが俺達がパフォーマンスチューニングをする最大の理由なんだ。
0961名無しさん@お腹いっぱい。2013/12/08(日) 17:06:54.96
emacs-uptime が 8時間こえたことない。たぶん。
0962名無しさん@お腹いっぱい。2013/12/08(日) 17:08:10.01
self-insert-command の処理時間短縮に成功したなら誇っていい
0963名無しさん@お腹いっぱい。2013/12/08(日) 17:29:32.30
shell-mode で exit した時にバッファやウィンドウも閉じて欲しいんですがどのようにしたらいいんでしょうか?
それっぽいフックがないか探したのですが見当たりませんでした。
09649632013/12/08(日) 17:50:04.03
自己解決しました。
ぐぐったら process-sentinel に設定してる例があったのでそれを参考に作ってみました。
(add-hook 'shell-mode-hook
(lambda ()
(set-process-sentinel (get-buffer-process (current-buffer))
(lambda (process event)
(let* ((buf (process-buffer process))
(win (get-buffer-window buf)))
(when (and win (not (one-window-p)))
(delete-window win))
(kill-buffer buf))))))
0965名無しさん@お腹いっぱい。2013/12/08(日) 23:51:05.87
>>960
パフォーマンスチューニングする時間にプログラム書いて金に変え、cpuスペックを2倍にした方が合理的。
あるいは、複数端末にして使い分けるとか。
0966名無しさん@お腹いっぱい。2013/12/09(月) 22:54:55.89
しかし最新のCPUにしてもEmacsは重く感じる…
光速を越える事が出来ないように、Emacsが軽くなることは永遠にないんだろうね。
0967名無しさん@お腹いっぱい。2013/12/09(月) 23:01:05.03
一昔前のノートPCでemacs24.3だけど軽いよ
0968名無しさん@お腹いっぱい。2013/12/09(月) 23:39:12.96
>>966
うはw
>>967 の報告で話盛ったのが即バレしてるww
だっさー
0969名無しさん@お腹いっぱい。2013/12/10(火) 04:15:12.92
>>941のだと grep とかの compilation-start を使う他の関数まで影響が出るので書き換えた
(dolist (func '(compile recompile))
(eval `(defadvice ,func (around ,(intern (format "%s-silently" func)) activate)
"エラー発生時のみ *compilation* バッファ表示"
(cl-letf (((symbol-function 'display-buffer) 'ignore)
((symbol-function 'set-window-start) 'ignore)
((symbol-function 'set-window-point) 'ignore))
(let (compilation-start-hook) ; local hook ではなく compile のみの hook
(add-hook 'compilation-start-hook
(lambda (proc)
(make-local-variable 'compilation-finish-functions)
(add-hook 'compilation-finish-functions
(lambda (buffer msg)
(with-current-buffer buffer
(font-lock-mode -1)
(font-lock-fontify-buffer)
(font-lock-mode 1)
(if (or (not (string-match "finished" msg))
(text-property-not-all (point-min) (point-max)
'compilation-message nil))
(display-buffer buffer)
(when (get-buffer-window buffer)
(delete-window (get-buffer-window buffer))))))
)))
ad-do-it))))
)
0970名無しさん@お腹いっぱい。2013/12/11(水) 10:11:26.40
ゴミはってんじゃねえよ
0971名無しさん@お腹いっぱい。2013/12/11(水) 18:53:48.05
add-hook とか設定を書き換えたときに
設定を有効にするにはどうしたらいいの
再起動するしかないかな
0972名無しさん@お腹いっぱい。2013/12/11(水) 19:03:51.74
add-hookしたらすぐ有効なんじゃね?
0973名無しさん@お腹いっぱい。2013/12/11(水) 19:10:21.42
eval-region したり eval-last-sexp したりすればいいのでは。
0974名無しさん@お腹いっぱい。2013/12/11(水) 19:16:04.18
>>972 >>973
どうもうまくいかないのさ
みんなうまくいってるの

global-set-key とかならうまくいくけども
0975名無しさん@お腹いっぱい。2013/12/11(水) 19:37:29.60
言葉が足りてない気がする。
09769712013/12/11(水) 19:42:05.14
例えば local-set-key とか書き換えて評価しても
反映されないんだけど
0977名無しさん@お腹いっぱい。2013/12/11(水) 19:53:45.41
(local-set-key (kbd "<f11>") "hello")

これを scratch バッファで eval-last-sexp で評価して f11 押して hello ってはいらんのなら
なんか余計な設定してるんだろ
0978名無しさん@お腹いっぱい。2013/12/11(水) 19:57:20.85
add-hook は run-hooks とかで実行されない限り有効にならんから
たとえば c-mode-hook になんか追加してもすでに c-mode になってるバッファでは何も起きないよ。
ファイル開き直すなり再度 c-mode にし直すなりしないと run-hooks が働かない。

local-set-key はしらん。目的のバッファじゃなくて init.el 開いてるバッファで eval してるってオチじゃないの。
0979名無しさん@お腹いっぱい。2013/12/11(水) 23:44:15.71
>>976
具体的に。
09809712013/12/12(木) 11:37:11.49
local-set-key のやつは
ファイル開き直すのでうまくいきました
以前にどうやってもうまく行かないケースがあって
質問しようと思ってたのを忘れてしまった
どうもありがとう
0981名無しさん@お腹いっぱい。2013/12/12(木) 17:12:42.30
init.el で eval してたってオチか
0982名無しさん@お腹いっぱい。2013/12/12(木) 21:05:21.60
Emacsでテキストをマウスクリック、またはテキスト上でEnterし特定の関数を実行させたいです。
set-text-properties等でイベント別に実行させたりできるのでしょうか?
または別に専用の関数等あるのでしょうか?
0983名無しさん@お腹いっぱい。2013/12/12(木) 21:22:38.38
>>982
お察しの通り、set-text-properties で指定したテキストに対して専用のキーバインドを設定できる。
そこで return なり mouse-1-down なりに好きな関数を設定してやれば ok。

http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Clickable-Text
http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Special-Properties

あたり参考に。
0984名無しさん@お腹いっぱい。2013/12/12(木) 21:55:15.46
>>983
ありがとうございます!
英語は苦手ですが参考にしてやってみます
0985名無しさん@お腹いっぱい。2013/12/13(金) 17:58:25.68
http://emacsrocks.com/e13.html
やべー凄過ぎて脱糞した
俺もこうなりたい
0986名無しさん@お腹いっぱい。2013/12/13(金) 19:17:13.70
そりゃ見た目にハデで効率あがるのも認めるけど
やってることはマークと正規表現とquery-replaceを縦横に使いこなすっつー
emacs使いにとっちゃ息をするほどの操作と同じことだろ
0987名無しさん@お腹いっぱい。2013/12/13(金) 19:22:31.50
emacs使いっていうか大抵のエディタ使ってる奴はそれぐらいのことするわな。
multiple-cursor ってなんかズレたらどうしようってイメージしかないんだよな
0988名無しさん@お腹いっぱい。2013/12/14(土) 00:43:18.79
もちろん普通のEmacserは関数内とかでC-M-hでリージョン選択してquery-replaceをするだろうね
それとC-x r tかな
ただ、インパクトは凄いんで multiple-cursor を暫く使ってみる事にするよ
0989名無しさん@お腹いっぱい。2013/12/14(土) 03:05:44.32
cua-mode で満足してたのに、また面白そうなもの教えてくれやがって・・・
0990名無しさん@お腹いっぱい。2013/12/14(土) 10:26:26.39
cua といえば C-S-space の cua-toggle-global-mark ってあんまり使われてなさそう
0991名無しさん@お腹いっぱい。2013/12/14(土) 13:14:07.36
代用はあるけど
単純にかっけえなあw
0992名無しさん@お腹いっぱい。2013/12/14(土) 14:39:31.77
>>990
cuaモードを使ってるけど、cua-toggle-global-markは使ったことなかった。
今使ってみたけどあらかじめペースト先を指定しておく位の使い方しか分からなかった。
何か便利な使い方があったら教えてくれ。
0993名無しさん@お腹いっぱい。2013/12/14(土) 16:30:21.76
連番を指定回数分バッファに出力する何かいい方法はないでしょうか
1
2
3
4
5
こういう風に各行に一つずつ出したいです
0994名無しさん@お腹いっぱい。2013/12/14(土) 16:35:39.39
rectangle-number-lines
0995名無しさん@お腹いっぱい。2013/12/14(土) 16:46:24.23
>>992
ぶっちゃけそれぐらいじゃない?
multiple-cursor みたいにへえーおもしれーって一回触っておわる系。
0996名無しさん@お腹いっぱい。2013/12/14(土) 17:32:26.95
C-u M-! seq 1 5
09979932013/12/14(土) 17:33:10.84
>>994
ありがとうございます。その関数を使えばリージョンの各行に数値を挿入できることを確認しました。
ですが指定した個数を挿入することはできないようです。
(defun test (start end)
(loop for i from start to end do (insert (concat (number-to-string i) "
"))))

(test 1 10)のように始まりと終わりの数値を指定すればそれを一気に挿入するのが理想ですが
そのようなものがあれば知りたいです。

あとlispの書き方でつまずいたのですがdefunの引数に&optionalを指定したとき、デフォルトの値を設定することはできませんか?
上の例だとstartの既定値を1にしたいと思ったのですが、やり方が分かりませんでした。
09989932013/12/14(土) 17:34:22.77
>>996
ばっちりです!ありがとうございます!
0999名無しさん@お腹いっぱい。2013/12/14(土) 17:36:46.70
Emacs Part 44
http://toro.2ch.net/test/read.cgi/unix/1387010164/
1000名無しさん@お腹いっぱい。2013/12/14(土) 20:29:30.22
おらー!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。