Emacs Part 39
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2011/11/29(火) 17:50:44.24Emacs Part 38
http://hibari.2ch.net/test/read.cgi/unix/1308635178/
0583名無しさん@お腹いっぱい。
2012/01/07(土) 14:21:09.160584名無しさん@お腹いっぱい。
2012/01/07(土) 14:39:22.040585名無しさん@お腹いっぱい。
2012/01/07(土) 15:03:07.770586582
2012/01/07(土) 16:00:50.27なるほど、re-builderは""内に書くから\\(\\)と書かなければならなくて、
replace-regexpは""内に書かないから\(\)と書くということですね
すっきりしました
0587名無しさん@お腹いっぱい。
2012/01/07(土) 16:21:58.76The Cliffs of Inanity ? Emacs and Common Lisp http://tromey.com/blog/?p=709
そうなると長い目で見ればcommon lispを知っておいた方がよさそう
0588名無しさん@お腹いっぱい。
2012/01/07(土) 16:26:03.1710年前に Erik Naggum が言ってたのと同じことやん。
歴史は繰り返す。
0589名無しさん@お腹いっぱい。
2012/01/07(土) 16:53:47.360590名無しさん@お腹いっぱい。
2012/01/07(土) 17:10:02.39このあたりの話が関係するか。emacsをcommon lispで、っていうのは真っ正面から議論されていたのかな?
Island Life - 「Cで書くコードの方がCommon Lispで書くより速いって人がいたら、それは彼のCの技量が高すぎるってことだね。」
http://blog.practical-scheme.net/shiro/20100620a-lisp-speed
0591名無しさん@お腹いっぱい。
2012/01/07(土) 17:15:34.53それはそうと emacs 24で`image-library-alist' is renamed to `dynamic-library-alist' ってなってるの見て
ああもう本当にストールマンいなくなったんだなと実感した
0592名無しさん@お腹いっぱい。
2012/01/07(土) 17:22:54.270593名無しさん@お腹いっぱい。
2012/01/07(土) 17:32:50.08正規表現リテラルでもありゃあいいのにな。
0594名無しさん@お腹いっぱい。
2012/01/07(土) 17:51:12.15emacsの開発歴史というよりも
どういう人がemacsにどういう影響を与えたか、を聞きたい
0595名無しさん@お腹いっぱい。
2012/01/07(土) 18:00:10.330596名無しさん@お腹いっぱい。
2012/01/07(土) 18:03:58.85http://ja.wikipedia.org/wiki/Emacs
結構ちゃんと人物も記載されてるよ。
0597545
2012/01/07(土) 19:07:20.82test_func {
test
}
のように{が行末に来たときは次の行をスペース2つ分(かタブ1つ分)右にシフトさせて
}が行頭に来たときには左にシフトさせる設定はdefine-generic-mode向けに何かありますか
(上の例では全角スペースを使っています)
単体のemacsでは設定できずyasnippetのようなものを併用しなければならないでしょうか
0598名無しさん@お腹いっぱい。
2012/01/07(土) 19:52:42.00凝ったことしたくなったら generic-mode 使わないで素でmajor-mode作ってもいいような気もするけど
{ を入力したときに勝手に整形されるようにするのか、
改行したときに勝手にそうなるようにしたいのか、
C-i だの TAB だの入力して indent したときにそうしたいのかによって微妙に入り口は異なると思うけど
基本的には自力で整形処理を書かなきゃいけないと思うよ。
c-mode の c-indent-line の辺り読んで頑張れ
0599名無しさん@お腹いっぱい。
2012/01/07(土) 19:59:36.410600名無しさん@お腹いっぱい。
2012/01/07(土) 22:41:57.810601名無しさん@お腹いっぱい。
2012/01/07(土) 22:46:09.78(require 'cl)
; cl
(defun mapbetween (f l)
(let (y)
(mapl #'(lambda (x)
(when (cadr x)
(push (funcall f (cadr x) (car x)) y)))
l)
(nreverse y)))
; mapbetween
(mapbetween #'+ '(1 2 3 4 5))
; (3 5 7 9)
(mapbetween #'- '(0 1 4 9))
; (1 3 5)
0602名無しさん@お腹いっぱい。
2012/01/07(土) 22:47:16.570603名無しさん@お腹いっぱい。
2012/01/07(土) 22:47:31.32もう解決してるかもしれないけど、別のスクリプト (qlgrep) に
lgrep を包むって方法は採れそう。
#!/bin/sh
lgrep "$@" > /dev/null 2>&1
さらに別の関数 (find-lgrep-dired) も用意する。
(defun find-lgrep-dired (dir regexp)
(interactive "DFind-grep (directory): \nsFind-grep (grep regexp): ")
(find-dired dir
(concat "-type f -exec qlgrep - "
(shell-quote-argument regexp)
" "
(shell-quote-argument "{}")
" "
;; Doesn't work with "+".
(shell-quote-argument ";"))))
0604名無しさん@お腹いっぱい。
2012/01/08(日) 12:25:43.230605名無しさん@お腹いっぱい。
2012/01/08(日) 12:29:35.160606名無しさん@お腹いっぱい。
2012/01/08(日) 13:46:03.010607名無しさん@お腹いっぱい。
2012/01/08(日) 14:16:32.10解説とか殆ど見たことないけど、emacs23からは
インデントカスタマイズ用の smie ってライブラリが入ってるみたい。
つかったことないけどドキュメント読んだ感じ結構凝ったこと出来そうね。
http://www.gnu.org/software/emacs/manual/html_node/elisp/SMIE.html#SMIE
emacs24 の octave-mode とかは実際に使ってるみたいだから見てみたけど
文法定義から始まる重量級のライブラリだなこれ
0608名無しさん@お腹いっぱい。
2012/01/08(日) 17:34:12.70て,フルパス付きのファイル名をkill-ring-saveする方法はあるでしょうか。
ちょっとわかりにくかもしれませんが,例えば,diredで一覧表示した.emacs
に適用したなら,/home/hogehoge/.emacs という情報をコピペできる関数を探
しています。
0609名無しさん@お腹いっぱい。
2012/01/08(日) 17:49:12.340610名無しさん@お腹いっぱい。
2012/01/08(日) 17:51:00.10C-0w
0611名無しさん@お腹いっぱい。
2012/01/08(日) 19:00:19.17C-u 0 w
w runs the command dired-copy-filename-as-kill, which is an
interactive compiled Lisp function in `dired.el'.
It is bound to w.
(dired-copy-filename-as-kill &optional ARG)
Copy names of marked (or next ARG) files into the kill ring.
The names are separated by a space.
With a zero prefix arg, use the absolute file name of each marked file.
0612名無しさん@お腹いっぱい。
2012/01/08(日) 19:51:29.65まだ開発続いてると思うけど。
0613名無しさん@お腹いっぱい。
2012/01/08(日) 20:38:47.17lookup て辞書検索できる lookup のことかな。
次といっても dict と epwing が理解できればそれで十分に思える、自分には。
0614名無しさん@お腹いっぱい。
2012/01/08(日) 20:54:03.71変換スクリプトもメンテされてないし、入手不可能だったり。
0615名無しさん@お腹いっぱい。
2012/01/08(日) 20:57:40.10ただ emacs-w3m がいまいちだからねえ。
emacs-xwidget + webkit が安定して使えるようになったらうっはうはなんだが・・・
0616名無しさん@お腹いっぱい。
2012/01/08(日) 21:14:40.45それなら普通にブラウザ使う方がいい。
0617名無しさん@お腹いっぱい。
2012/01/08(日) 21:56:44.63RHEL6のx64でまともに動かんかった
emacsが悪いのか外部が悪いのかよく分からん
4文字の単語を退いたときだけ駄目とか変な挙動いろいろで調べる気が起きん
0618名無しさん@お腹いっぱい。
2012/01/08(日) 22:02:12.17むしろブラウザだけでいい
0619名無しさん@お腹いっぱい。
2012/01/08(日) 22:21:01.130620名無しさん@お腹いっぱい。
2012/01/08(日) 22:25:56.900621名無しさん@お腹いっぱい。
2012/01/08(日) 22:34:39.67Emacsにブラウザ組み込むのどっちが楽だろう
0622名無しさん@お腹いっぱい。
2012/01/08(日) 22:42:25.03後者は既出感が…
0623名無しさん@お腹いっぱい。
2012/01/08(日) 22:44:19.100624名無しさん@お腹いっぱい。
2012/01/08(日) 22:48:48.360625名無しさん@お腹いっぱい。
2012/01/09(月) 01:29:57.86seimei.el
tako.el
trr.el
0626名無しさん@お腹いっぱい。
2012/01/09(月) 01:43:55.290627名無しさん@お腹いっぱい。
2012/01/09(月) 02:55:49.39Javascript PC Emulator
ttp://bellard.org/jslinux/
で、ブラウザ上でQEmacsが使えます。
~ # which emacs
/usr/bin/emacs
~ # ls -l /usr/bin/emacs
lrwxrwxrwx 1 root root 2 May 14 2011 /usr/bin/emacs -> qe
~ # ls -l /usr/bin/qe
-rwxr-xr-x 1 root root 108240 May 16 2011 /usr/bin/qe
~ # strings /usr/bin/emacs | fgrep -i version
QEmacs version 0.3.1, Copyright (c) 2000-2003 Fabrice Bellard
0628名無しさん@お腹いっぱい。
2012/01/09(月) 03:17:21.81【スタッフ募集】路線名を擬人化させたエロゲ【鉄オタも】
http://hayabusa.2ch.net/test/read.cgi/news4vip/1326032146/
【wiki】
http://www38.atwiki.jp/train_erog/
【避難所】
http://jbbs.livedoor.jp/game/54004/
0629名無しさん@お腹いっぱい。
2012/01/09(月) 08:39:46.95tako.el みて普通に日本語のシンボル名作れることに驚愕した
0630名無しさん@お腹いっぱい。
2012/01/09(月) 12:53:58.93(defun greeting (msg who) (message "%s, %s" msg who))
(defun hello (who) (message "===hello===") (greeting "hello" who))
みたいになっている時、 hello の中で直接呼ばれてる message だけ置き換えたいのです。
flet を使うと greeting の中の message まで置き換えられてしまいます。
関数定義をそのまま引っ張ってきて書き換えたものを再定義したり fset したりする以外に方法はありませんでしょうか?
0631名無しさん@お腹いっぱい。
2012/01/09(月) 12:58:14.670632名無しさん@お腹いっぱい。
2012/01/09(月) 12:58:40.710633名無しさん@お腹いっぱい。
2012/01/09(月) 13:57:27.13呼び出し元の関数を判断して挙動を変えようと思ったのですが、
今度は呼び出し元の関数の調べ方がわかりません。
http://b.hatena.ne.jp/IMAKADO/elisp/callee/ とかは見つかったんですが
肝心のリンク先が壊れて見れないという・・・トレースとか書いてあるから
バックトレースの内容を参照するってことなんでしょうかね・・難しい。
0634名無しさん@お腹いっぱい。
2012/01/09(月) 14:42:51.45なんかもっとスマートな方法はないのか・・・・
(defun greeting (msg who) (message "%s, %s" msg who))
(defun hello (who) (message "===hello===") (greeting "hello" who))
(defun callee ()
"呼び出し元の関数名を文字列で返す"
(let ((bt (split-string (with-output-to-string
(backtrace)) "^ *\\|\n" t)))
(while (and bt
(not (string-match "^callee\\>" (pop bt)))))
(cadr bt)))
(defadvice hello (around ad-hello-no-heading activate compile)
"hello が直で呼び出している message だけ ignore に置き換える"
(let ((org-message (symbol-function 'message)))
(flet ((message (format-string &rest args)
(if (string-match "^ad-Orig-hello\\>" (callee)) ;; advice の場合は ad-Orig-* になる
(ignore)
(apply org-message format-string args))))
ad-do-it)))
0635597
2012/01/09(月) 16:29:31.21ありがとうございます。
indent-line-function等で制御するよりも>>607を改変すればよさそうだと思いました
ですが改変がうまくいきません
if (x>0) {
proc1()
proc2()
} else if (x<0) {
proc3()
proc4()
} else {
proc5()
proc6()
}
こういう風に自動的にインデントさせようとして
http://www.gnu.org/software/emacs/manual//html_node/elisp/SMIE-Grammar.html#SMIE-Grammar
の("then" insts "end")を("{" insts "}")、
("if" exp "then" inst "else" inst)を("if" exp inst "else" inst)、
(insts (insts ";" insts) (inst))を(insts (insts insts) (inst))、
に書き換えましたが、{を入力してC-jを押すと(newline-and-indent)
(wrong-type-argument integer-or-marker-p nil)
とエラーが出ました
このif (test) {procs} else if (test) {procs} else {procs} を
(procsは改行区切りです)
インデントさえできればいいのですが
どうすればよいでしょうか
0636597
2012/01/09(月) 16:39:18.77http://www.emacswiki.org/emacs/IndentingC#toc1
このcc modeをdefine-generic-modeで作成したモードで
使えればよさそうだと思いました
というのも整えようとしているのがc++ likeのコードに似ているからです
上のsmie改変がうまくいかないときにはこれで十分です
define-generic-modeで作成したモードの初期化部分で
このcc modeの機能を利用することはできるでしょうか
0637名無しさん@お腹いっぱい。
2012/01/09(月) 16:39:19.97smieって何やってるのかわからなかったけど
smie-setup で indent-line-function 設定してるのな。
ちょっと真面目に使い方勉強してみるか。
0638名無しさん@お腹いっぱい。
2012/01/09(月) 16:40:28.70特定のモードを元にモードを作る場合は
define-derived-mode を使うといいよ。
0639名無しさん@お腹いっぱい。
2012/01/09(月) 17:09:57.88"}"とかが token として認識されてないんじゃないの?
0640597
2012/01/09(月) 17:50:59.31はい。サンプルは動きました。↓の各セクションから以下の設定をコピペして
http://www.gnu.org/software/emacs/manual//html_node/elisp/SMIE.html#SMIE
(eval-when-compile (require 'cl))
(require 'smie)
(defvar sample-smie-grammar
(defvar sample-keywords-regexp
(defun sample-smie-forward-token ()
(defun sample-smie-backward-token ()
インデント分をこう設定し
(defvar sample-indent-basic 4)
メジャーモードを作成する (define-generic-mode の初期化部分で
(list (function (lambda () (add-hook 'hoge-mode-hook (lambda ()
(smie-setup sample-smie-grammar #'sample-smie-rules)
と書きました。
あと、>>635の(insts (insts ";" insts) (inst))は書き換えないままでした
書き換えるとエラーになります すみません
>>639
確かにtokenの設定が抜け落ちていました。ですが
(defvar sample-keywords-regexp
(regexp-opt '("+" "*" "," ";" ">" ">=" "<" "<=" ":=" "="))) を
(defvar sample-keywords-regexp
(regexp-opt '("+" "*" "," ";" ">" ">=" "<" "<=" ":=" "=" "{" "}" "(" ")")))
に書き換えましたがだめでした
>>638
なるほど、ただキーワードの色づけ設定は引き継ぎたくないのでdefine-gereric-modeで設定しました
インデントとキーフックのみ特定のモードを引き継ぐという機能があればいいのですが
0641名無しさん@お腹いっぱい。
2012/01/09(月) 18:02:41.16自分とこでちょっと動かしてみたいけど長そうだから
↓ここにコピペしてURL教えてくれ
http://paste.lisp.org/new/emacs
0642597
2012/01/09(月) 19:05:20.29http://paste.lisp.org/display/126938
よろしくお願いします
0643名無しさん@お腹いっぱい。
2012/01/09(月) 19:42:06.40とりあえずコメントの ';' と 区切り文字の ';' が干渉してるのと
sample-smie-forward-token で a+b みたいなのが一気に通過しちゃうのが気になったけど
じっくり取り組まないとわからんなあ・・・
0644名無しさん@お腹いっぱい。
2012/01/09(月) 21:32:24.24emacs 24 で実行するとエラーは出ないけどちゃんと動いてるような感じがしない。
サンプルそのままで実行してもぶら下がりelseがちゃんと処理できてないように見えるなぁ。
0645名無しさん@お腹いっぱい。
2012/01/10(火) 00:11:10.77skk に含まれてる skk-ja-names.el とか見てみろよ。
こんなだぞ。
(defalias 'SKKモード 'skk-mode)
(defalias 'SKKのバージョン 'skk-version)
(defalias 'SKKのバグを報告する 'skk-submit-bug-report)
(defalias 'SKKのチュートリアル 'skk-tutorial)
0646名無しさん@お腹いっぱい。
2012/01/10(火) 11:26:09.75止めたら起動時間が 500〜700ms 近く早くなって感動した
0647名無しさん@お腹いっぱい。
2012/01/10(火) 15:26:23.62それともそのまま?
0648名無しさん@お腹いっぱい。
2012/01/10(火) 15:30:40.420649名無しさん@お腹いっぱい。
2012/01/10(火) 15:34:21.26MSなんか公式でCTRL<=>CAPS逆にするドライバ配布してるし。
これも呪いの一つだとは思う。
0650名無しさん@お腹いっぱい。
2012/01/10(火) 17:29:15.59(string-match (migemo-get-pattern "popw") "popwin")
ここまでは大丈夫なのに。
(string-match (migemo-get-pattern "pop") "popwin")
0651名無しさん@お腹いっぱい。
2012/01/10(火) 17:37:09.14キャッシュがぶっ壊れていただけだった。
0652名無しさん@お腹いっぱい。
2012/01/10(火) 18:44:24.40MSのドライバ配布なんて聞いたことがなかったから調べてみた
http://www.atmarkit.co.jp/fwin2k/win2ktips/1182ctrl2cap/ctrl2cap.html
ふむふむこれか。楽ちんなツールもあるもんだな
0654名無しさん@お腹いっぱい。
2012/01/10(火) 19:51:36.16ちょっと同僚が叩いた時とかに面倒がなくていいわ
0655名無しさん@お腹いっぱい。
2012/01/11(水) 00:27:15.52ttp://savannah.gnu.org/projects/emacs/
ここに書いてあるとおり
bzr branch bzr://bzr.savannah.gnu.org/emacs/trunk
としても、メールで[Emacs-diffs]が届いた時点のソースが取得出来ない。
その後、bzr updateしても一向に更新されないし、bzrよーわからん。
そもそも、bzr branchが異様に時間が掛かるし、bzr腐ってる。
0656名無しさん@お腹いっぱい。
2012/01/11(水) 00:32:21.68https://github.com/emacsmirror/emacs
>A Mirror of the Emacs Bazaar repository ― Read more
>http://www.emacswiki.org/emacs/EmacsFromGit
0657名無しさん@お腹いっぱい。
2012/01/11(水) 01:05:13.240658名無しさん@お腹いっぱい。
2012/01/11(水) 08:32:51.990659名無しさん@お腹いっぱい。
2012/01/11(水) 10:21:02.180660名無しさん@お腹いっぱい。
2012/01/11(水) 12:14:29.240661名無しさん@お腹いっぱい。
2012/01/11(水) 12:40:39.01カーソル位置にある文字とその一つ前の文字を取得する関数はありますか?
取得した文字によって処理を分岐させたいのですが方法が分かりません
0662名無しさん@お腹いっぱい。
2012/01/11(水) 12:56:44.81が似たようなことをやっている。
0663名無しさん@お腹いっぱい。
2012/01/11(水) 13:01:57.880664名無しさん@お腹いっぱい。
2012/01/11(水) 13:08:21.16ありがとうございます
0665名無しさん@お腹いっぱい。
2012/01/11(水) 13:49:11.90いや、普通に残ってる。
w3 っていつの間に消えてたんだろう・・・
0666名無しさん@お腹いっぱい。
2012/01/11(水) 16:05:23.89開く方法無いですか?
やりたいことは,*scratch*バッファの内容を復元することではなく
メモ用のバッファを作ることなのですが・・・
0667名無しさん@お腹いっぱい。
2012/01/11(水) 16:09:05.64http://www.bookshelf.jp/soft/meadow_29.html#SEC392
とかを参考に。
0668名無しさん@お腹いっぱい。
2012/01/11(水) 16:10:02.14お好みで initial-major-mode にしてあるメジャーモードにすればいい。
scratch の内容保存系の lisp おいてるところよく見ると
消せないようにするだけの設定が抜き出せるからそれ参考にしてみれば?
0669名無しさん@お腹いっぱい。
2012/01/11(水) 16:10:06.91http://www.bookshelf.jp/soft/meadow_11.html#SEC75
つーかこっちか。
モード設定は勝手にやってくれるかも。
0670名無しさん@お腹いっぱい。
2012/01/11(水) 16:36:53.69しばらくC-x b *scratch* を使ってみることにします.
ありがとうございます.
0671名無しさん@お腹いっぱい。
2012/01/11(水) 19:20:52.27C-u C-x a l
0672名無しさん@お腹いっぱい。
2012/01/11(水) 21:05:05.68abbrev まともにつかったことないな・・・
0673名無しさん@お腹いっぱい。
2012/01/11(水) 21:43:02.80あのわけわからん世界に繋がりつつあるんだと思うとちょっとうれしい
0674名無しさん@お腹いっぱい。
2012/01/11(水) 21:56:17.64ただし、"$$" はエスケープ処理のパターンなので "$$@" なんて場合は "$$ " に置換したいです。
( "hoge$@$$@hage" なんかは "hoge $ hage"になる)
こういうエスケープ文字を含む置換は一回の置換で済ますのは難しいでしょうか?
0675名無しさん@お腹いっぱい。
2012/01/11(水) 22:18:20.68> ただし、"$$" はエスケープ処理のパターンなので "$$@" なんて場合は "$$ " に置換したいです。
だと
"hoge$@$$@hage" -> "hoge $$ hage"
にならないといけないような。
とりあえず
(replace-regexp-in-string "\\(\\$?\\)\\$@?" "\\1 " "hoge$@$$@hage")
-> "hoge $ hage"
となる。
0676名無しさん@お腹いっぱい。
2012/01/11(水) 22:40:32.37ああっ・・・すみません、"hoge$@$$@hage" は "hoge $$ hage" でした。
なるほど、直前の $ があれば保存するって書き方も出来るんですね。
もう少し考えてみます。ありがとうございます。
0677名無しさん@お腹いっぱい。
2012/01/11(水) 22:44:05.81下手糞だけれど、
(replace-regexp-in-string "\\(\\$?\\)\\$@?" "\\1\\1 " "hoge$@$$@hage")
0678名無しさん@お腹いっぱい。
2012/01/11(水) 22:57:17.40$$ の場合、前の$を2つおいちゃうわけですね
ただその場合 "hoge$$hage" が "hoge$$ hage" になってしまいます
ううむ・・・
0679名無しさん@お腹いっぱい。
2012/01/12(木) 08:16:55.07mamalade 追加したら予想してたよりしっかり登録されてて感心した。
0680名無しさん@お腹いっぱい。
2012/01/12(木) 09:45:12.560681名無しさん@お腹いっぱい。
2012/01/12(木) 09:57:57.84これ最強な
0682名無しさん@お腹いっぱい。
2012/01/12(木) 10:00:49.74■ このスレッドは過去ログ倉庫に格納されています