07/10/09 15:42:41
(message ">>1 乙")
3:デフォルトの名無しさん
07/10/10 01:16:09
(setq >>1 "乙")
4:デフォルトの名無しさん
07/10/13 00:14:53
System.out.println(">>1 乙");
5:デフォルトの名無しさん
07/10/13 00:17:01
スパイがいるぞ
6:デフォルトの名無しさん
07/10/13 22:02:03
ここまでバレバレだとスパイというより罠だな
そんなことよりコンスセルの話をしようぜ
7:デフォルトの名無しさん
07/10/13 22:37:42
いやでゴンス
8:デフォルトの名無しさん
07/10/14 18:51:50
ところで、lexbindはもうtrunkにマージされた?
9:デフォルトの名無しさん
07/10/14 19:43:25
elisp で perl みたいなテキスト処理をしたいんだけど、
ファイルから一行読み込む、ってどうやるの?
ファイルは馬鹿でかいから、バッファに全部は読み込めない。
10:デフォルトの名無しさん
07/10/14 20:13:06
insert-file-contents かな
11:デフォルトの名無しさん
07/10/29 23:54:17
リージョン内の文字列を対象に、ファイルサイズを知りたいです。
リージョンを指定して M-| wc -c だと、改行コードなどがバッファのものと違う、
string-width だと TAB が 8 にカウントされる、改行がカウントされない、
length だとマルチバイト文字も 1 文字とカウントする、
など、どれもちょっと期待と違います。
ちなみに、最終的には mode-line に表示させたいので、
外部プロセスなどは使わずにすませたいところです。
何かいい方法ないでしょうか?
12:デフォルトの名無しさん
07/10/30 02:23:12
buffer-file-coding-system に encode-coding-string して length 取る、とか…
13:デフォルトの名無しさん
07/10/30 11:33:17
毎回やるのか、それ。遅そう……。
14:デフォルトの名無しさん
07/10/31 00:20:40
>>11です。
>>12 を参考にコードを書いてみましたが、
1MBくらいのファイルになるとスクロールに影響がありました。
私の組み方も悪かったのかも知れませんね。
バッファ全体を substring して temp-buffer に insert して encode して length… だったので。
きっと、もちょっと効率良くできるのでしょう。
で、mode-line の表示をどうしたものかと xdisp.c を眺めていたのですが、
mode-line-format に %i や %I が使えることが分かったので、
もうこれでいいコトにします。
ありがとうございました。
15:デフォルトの名無しさん
07/10/31 23:46:14
> 1MBくらいのファイルになるとスクロールに影響がありました。
変更がなければ再計算する必要ないと思うが。
16:デフォルトの名無しさん
07/11/02 01:15:53
バッファに変更がないことを知るのは難しいよね?
undo-list はアテにならないから使えないと思うんだけど、
バッファに変更があったことをどうやって知ればいい?
17:デフォルトの名無しさん
07/11/02 03:27:25
buffer-modified-tickとか。
buffer-undo-listじゃどうアテにならないのかおせーて。
18:デフォルトの名無しさん
07/11/02 23:30:07
buffer-undo-list って、メジャーモードによっては消えたりするじゃない、
…と思ったけど、変化したら再計算するんだから、十分アテになるね。
19:デフォルトの名無しさん
07/11/04 10:58:58
after-change-functions
20:デフォルトの名無しさん
07/11/06 23:59:32
>>19
おお、これなら…、と思ってやってみましたが、
少し速くタイプすると描画がついてきませんでした。これは CPU の性能のせいかな?
もちろん、スクロールには影響なかったですよ。ありがとうございます。
after-change-functions 自体は便利そうなので、別の何かに使います。
21:デフォルトの名無しさん
07/11/25 23:44:53
昨日からelispを勉強しています。
Rubyが一応は書けます。
OSはUbuntu7.10を使っています。
質問なのですが
yatexは.elファイルをどっかに置いているのだと思いますが
これはどこに置いてあるのですか?
rpm系を使っていて
rpm -ql yatexのような事が出来ればいいのですが良く分かりません。
まずこれについて方法を教えていただければと思います。
次に、
例えば/usr/libとかに.elファイルが置いてあるとして
emacsはどこに書いてある命令でこれを読みに行くのでしょうか?
最後に
.emacsというのにelispを書くとemacsをカスタマイズ出来るそうですが
.emacsに例えば
(set-language-environment "Japanese")
(set-default-coding-systems 'euc-japan)
(set-terminal-coding-system 'euc-japan)
と書いた場合、確認した中では
何もファイルを指定せずにファイルを開いた場合と
.rbファイルを開いた場合に設定が反映されましたが、
.texの時は変わらず、JISのままでした。
例えば/usr/libにyatex.elというのがあると仮定して、
おそらくここにJISにしなさいという命令が書いてあるものと思われ
それにより上書きされているものと思われますが、
同一種の命令の場合、
.emacsの設定の方を優先順序を上にするにはどうすればいいですか?
22:デフォルトの名無しさん
07/11/25 23:54:29
>>21
ライブラリの場所は M-x locate-library でわかるよ
23:デフォルトの名無しさん
07/11/26 00:02:34
ありがとうございます。
無理やりですが
locate yatexで調べました。
/usr/share/emacs/site-lisp
とかにそれらしきパッケージが入っていますね。
しかしどうやって読み込んでるのかとか
どうやってyatexを使用した場合でも.emacsに書いたeuc-jpを使いなさい
という命令を優先させる事が出来るのかが分かりません・・・
24:デフォルトの名無しさん
07/11/26 03:19:52
yatexが入っているならそのinfoも入っているはずなので、
C-h iでyatexを探して読んでみるといい。
文字エンコーディングの設定方法はそこに書いてある。
25:デフォルトの名無しさん
07/11/26 13:07:15
このスレはEmacs設定スレじゃないと思うんだが……
26:デフォルトの名無しさん
07/12/09 06:15:49
Emacs Lispの成分解析結果 :
Emacs Lispの55%は陰謀で出来ています。
Emacs Lispの39%は祝福で出来ています。
Emacs Lispの6%は成功の鍵で出来ています。
27:デフォルトの名無しさん
07/12/11 23:00:49
リストの n 番目の要素を置き換えるような関数はありますか?
&optional な引数で、上書きと挿入を切り替えることができると嬉しいです。
(setq test '(A B C D E))
(func test 3 X)
=> (A B C X E)
(func test 3 X t)
=> (A B C X D E)
みたいなものがあったら嬉しいのですが、標準関数でこれと同じようなものはありますか?
自分でやると
(append (reverse (nthcdr (- (length lst) n ) (reverse lst)))
X
(nthcdr n lst))
みたいになってしまうのです。
28:デフォルトの名無しさん
07/12/12 01:45:09
;; 破壊的挿入
(setf (nthcdr n lst) (cons new (nthcdr n lst)))
;; 非破壊的挿入
(let ((lst (copy-list lst)))
(setf (nthcdr n lst) (cons new (nthcdr n lst)))
lst)
;; 破壊的上書き
(setcar (nthcdr n lst) new)
;; 非破壊的上書き
(let ((lst (copy-list lst)))
(setcar (nthcdr n lst) new)
lst)
or
(substitute-if new 'identity lst :count 1 :start n)
setfとsubstitute-ifはCL。あとは詳しい人が降臨するのを待とう。
おれもここは苦手なんだ。
29:デフォルトの名無しさん
07/12/12 09:05:50
>>27
仕様バグ。使い方は
(setq test (func test 3 x t))
でないとダメ。
なぜなら0番目に挿入がありえるから。
30:デフォルトの名無しさん
07/12/13 04:04:57
>>29
???
そういうこともあるから値返してんじゃないの?
どのへんがバグなのか分からないオレははんぶん素人です。
31:デフォルトの名無しさん
07/12/13 13:25:22
変更箇所を色分けするhighlight-changes-modeで、
保存のたびに色が変化する(tomato→black)ようにしたくて、以下を.emacsに書いたのですが、エラーが出てしまいます。
小関氏の『入門Meadow/Emacs』に載っているソースを真似たのですが、どこが問題なのでしょうか?
よろしくお願いします。
●.emacs
(setq highlight-changes-colours
(let ((r 255)(g 99)(b 71) ret) ;初期値tomato
(while (> (+ r g b) 0) ;だんだん色褪せる
(setq ret (append ret (list (format "#%02x%02x%02x" r g b))))
(setq r (* (/ r 10) 8)
g (* (/ g 10) 8)
b (* (/ b 10) 8)))
ret))
●エラー
Wrong type argument: symbolp, (* (/ b 10) 8)
32:デフォルトの名無しさん
07/12/13 14:07:35
じっと目を凝らしても君には見えないんだろうな。
33:デフォルトの名無しさん
07/12/13 19:21:51
>>31
Emacsが日本語でやさしく教えてくれるようになるまで別のもの使っときw
34:デフォルトの名無しさん
07/12/13 19:35:30
>>31
setqのgの後ろに幽霊が居るぞ
35:デフォルトの名無しさん
07/12/13 20:41:01
develockで赤くしました。
36:デフォルトの名無しさん
08/01/27 15:44:35
develockって一度有効にしちゃったらoffにできないよね……
37:デフォルトの名無しさん
08/01/28 19:23:27
バージョンが古いんじゃないの?
38:デフォルトの名無しさん
08/01/28 19:30:05
と思ったら、なんか変だね…
39:デフォルトの名無しさん
08/02/10 17:03:58
関数内で、自身の関数名を取得する方法はありますか?
40:デフォルトの名無しさん
08/02/10 18:17:53
backtrace-frame()
41:デフォルトの名無しさん
08/02/10 20:18:00
>>40
(defun hoge()
(interactive)
(setq self (second (backtrace-frame 3)))
(message "%s" self)
)
お、できた。
サンクス
42:デフォルトの名無しさん
08/02/13 17:30:07
let使えよ
selfが汚染されるだろ
43:デフォルトの名無しさん
08/02/17 23:27:54
変数 arg が string で空ではない事を判定するのは
こんな感じだと思うんですが
(and (stringp arg) (not (string= arg "")))
これに相当する標準のコマンドってありますか?
44:デフォルトの名無しさん
08/02/17 23:34:22
(equal arg "")じゃダメなん?
45:デフォルトの名無しさん
08/02/17 23:37:09
ああnonempty stringで真にしたいのか。ない、そんなの。
46:デフォルトの名無しさん
08/02/21 02:30:34
lisp のファイル内に時々 ^L (Control-L) だけの行があるけど
あれ何のためにあるの?
47:デフォルトの名無しさん
08/02/21 04:11:13
改ページ
48:デフォルトの名無しさん
08/02/21 10:15:45
Lispに限らず見かけるけど。
a2ps-j とかはそれを認識して改ページしてくれるので、
見やすくするために入れる。
49:デフォルトの名無しさん
08/02/21 13:19:31
EmacsのCソースコードにも入ってるよ。
一つのソースファイルをいくつかのセクションに分けたいときに使ってるね。
Emacsではbackword-page (C-x [), forward-page (C-x ])でページ単位で移動できる。
50:デフォルトの名無しさん
08/02/22 00:51:29
>>47-49
なるほど。勉強になりました。
51:デフォルトの名無しさん
08/03/28 02:29:22
文字列を N 回結合する関数ってありますか?
(defun foo (str num)
(let (i result)
(dotimes (i num result)
(setq result (concat result str)))))
こんなのを作るしかないんですかね?
52:デフォルトの名無しさん
08/03/28 02:48:27
ないんじゃないかな、こんなのやってみたけど
(defun X (s n) (apply 'concat (make-list n s)))
53:デフォルトの名無しさん
08/03/28 03:10:46
>>52
おお、素晴らしい。
そっちの方が色々応用できそうですね。
54:デフォルトの名無しさん
08/03/28 03:21:42
>> 53
カキコしたあと思い出したんだけど、前スレで同じ質問あったな。いくつかレスがついてる。
スレリンク(tech板:936番)
> perl の x 演算子みたいな関数って無い?
> make-string の文字列版というか、
> (hogefunc 3 "abc")
> => "abcabcabc"
> みたいなやつ。
55:デフォルトの名無しさん
08/03/28 03:31:06
>>53
mapconcat の方がいろいろ対応できるよ
56:デフォルトの名無しさん
08/03/28 03:36:39
>>54
確認しました。 ありがとうございます。
941 :デフォルトの名無しさん:2007/09/08(土) 00:20:18
ということは、まとめると
(mapconcat 'identity (make-vector 3 "abc") nil)
が一番速いのかね
>>55
みたいですね。
こういうコードをさらっと書けるように修行します。
57:デフォルトの名無しさん
08/03/28 08:20:28
(reduce 'concat (make-vector 3 "abc")) ;; ==> "abcabcabc"
ぱっとみて思いついた。
58:Zeno ◆5nZQbNmQPs
08/03/28 09:47:16
>>57
でもそれは >>51 のように順々に concat していくのと同様だから遅すぎである。
(reduce 'concat (make-vector 10000 "abc"))
Time: 5182 ms
(mapconcat 'identity (make-vector 10000 "abc") nil)
Time: 2 ms
59:デフォルトの名無しさん
08/03/28 10:29:12
>>58
さっさと本スレで初心者にやさしく答えてあげてください。
60:デフォルトの名無しさん
08/03/28 22:07:36
こっちの方が速かった。
(mapconcat (lambda (x) "abc") (make-bool-vector 10000 nil) nil)
くり返し回数が十分大きい場合はこっちのが速い
(with-temp-buffer
(let* ((n 10000) (s "abc") (l nil))
(while (/= n 0)
(setq l (cons (= 1 (logand n 1)) l))
(setq n (lsh n -1)))
(while (progn (if (car l) (insert s)) (setq l (cdr l)))
(insert-buffer-substring (current-buffer) (point-min) (point-max)))
(buffer-string)))
61:デフォルトの名無しさん
08/03/28 22:50:02
>>60
思いつく柔軟さはいいと思うけど、
そんなコード氾濫してたら嫌だというのが正直なとこだな
62:デフォルトの名無しさん
08/03/29 14:02:44
ならinline functionにすればいいじゃない
63:デフォルトの名無しさん
08/04/19 05:38:06
Perlの
$foo =~ s/abc/def/;
みたいにして変数の中身を正規表現を使って置換することはEmacsLispで出来ますか?
perfume-replaceをどう使っていいのか分かりません
64:デフォルトの名無しさん
08/04/19 06:58:41
>>63
replace-regexp-in-string
65:デフォルトの名無しさん
08/04/19 06:58:49
>>63
replace-regexp-in-string でいいんじゃね? と思ったが、
s/abc/def/ じゃなくて s/abc/def/g になっちまうな。
(let ((foo "abc123abc"))
(setq foo (replace-regexp-in-string "abc" "def" foo)))
⇒ "def123def"
replace-match なら s/abc/def/ になるかな。
(let ((foo "abc123abc"))
(string-match "abc" foo)
(setq foo (replace-match "def" nil nil foo)))
⇒ "def123abc"
66:デフォルトの名無しさん
08/04/19 07:09:01
>>65
あー s/abc/def/gでいいんです。すいません
とりあえずreplace-regexp-in-stringとstring-matchの使い方を覚えます
どうもありがとうございました
67:デフォルトの名無しさん
08/04/27 07:34:32
ヘルプでcount-mathesの説明を見るとhow-manyのアライアスだということで
how-manyのソースを見てみたところ
(defun how-many (regexp &optional rstart rend)
と、引数を3つしかとらないみたいなのですが
バッファ内で(how-many "aa" nil nil nil)と引数を4つ渡して評価しても何故か
普通に動作します。
どうして引数を4つ渡しても動作するんでしょうか?
emacsのバージョンは22です
68:67
08/04/27 07:50:01
すみません
使ってるバージョン(22)と見たソースのバージョン(21)が異なってただけでした。orz
22のソースだとちゃんと引数は4になってました。
あともう1つわからない点があって、22のcount-matchesの説明をc-h fで見ると
the function behaves in all respects has if it had been called interactively.
という英文があるんですが、これはどういう意味なんでしょうか?
特にin all respects has という部分がわかりません。
69:Zeno ◆5nZQbNmQPs
08/04/27 08:12:30
>>68
その英文は少々不自然である。 例えばそれは
if interactive is t, the function behaves as if it had been called interactively (in every respect).
(もし `interactive' が t であるならば、この関数は interactive に呼ばれた時と同じ動作をする。)
と訂正されるべきだろう。 "has" は "as" であって、単純なタイポである。
70:67
08/04/27 08:23:11
>>69
変な英文だと思ったらtypoだったんですね。
わかりました、ありがとうございます。
71:Zeno ◆5nZQbNmQPs
08/04/27 08:40:00
>>70
貢献できて嬉しいよ。
72:デフォルトの名無しさん
08/04/30 03:42:36
関数のカリー化はできないのでしょうか?
73:デフォルトの名無しさん
08/04/30 03:52:54
プ
74:デフォルトの名無しさん
08/04/30 20:39:14
emacs lisp からcommon lispのcl-whoなどのパッケージを使う方法ないでしょうか?
75:デフォルトの名無しさん
08/05/05 15:16:22
Google Desktop の検索結果に time というプロパティがあり、それを通常の日付/時間表示に変換する方法が分かりません。どうすればいいのでしょうか?
;Google Deskitop の time の値(milie second): 128542440648970000
; 試してみたこと。
; current-time-string に渡すため (high low)のフォーマットにしようとこころみた。
(let* ((second 128542440648970)
(high (/ second 65535))
(low (logand second 65535)))
(List high low))
;こんな結果になる。
(-380 28938)
76:デフォルトの名無しさん
08/05/05 19:21:47
(let* ((second "128542440648970")
(high (calc-eval (concat second " / 65535")))
(low (calc-eval (concat "and(" second ",65535"))))
(list high low))
=> ("1961431916.52" "28938")
で結果は正しい?
77:デフォルトの名無しさん
08/05/08 12:32:31
>>76
レスありがとう。
'high' が integer じゃないって怒られた。だめみたいです。
78:デフォルトの名無しさん
08/05/08 13:15:07
それくらい自分で型変換しようぜ…
79:デフォルトの名無しさん
08/05/08 14:11:31
>(concat second " / 65535")
65535 じゃなくて 65536 じゃないか?
80:デフォルトの名無しさん
08/05/08 16:53:42
emacs21 --batch --eval "(hoge ...) "
の出力が日本語を含むリストのはずなのですが
\222 が連続して並んでます
nkfでも変換できないみたいです
どうすれば普通の日本語にできるのでしょうか?
81:デフォルトの名無しさん
08/05/08 17:05:32
>>80
--batch の出力は必ず iso-2022 になるはず。
82:デフォルトの名無しさん
08/05/11 18:02:06
emacsで.emacs.elファイルが開かれている場合、閉じるときにeval(してエラーがあれば警告し)たいのですが、良い方法をお分かりの方、教えてくださると幸いです。
ちなみに、
URLリンク(www.jaist.ac.jp)
の、保存時に自動バイトコンパイルするよう設定を参考に、(byte-compile-file "~/.emacs.el")を(eval-current-buffer)に書き換えたりしてみたのですが、それだと、Emacsが重くなってダメでした。
高林哲氏のauto-save-buffersを使っているせいもあるんでしょうが。
83:デフォルトの名無しさん
08/05/11 22:45:10
>>82
その真上にある終了時に byte-compile ってやつはダメなの?
84:デフォルトの名無しさん
08/05/12 02:51:56
>>82
kill-buffer-query-functions で eval してはどうでしょうか。
(add-to-list 'kill-buffer-query-functions
(lambda ()
(when (string= (expand-file-name "~/.emacs.el")
(buffer-file-name))
(eval-buffer))
t))
85:82
08/05/12 05:10:30
>>84 的確なレスありがとうございます。
さっそく試したところ、うまいこと動きました。
ただ、やはり、バッファ終了時ではなく、手動保存時に
add-hookすることができればそれがベストかなと、
思い直した次第です。
つまり、'after-save-hookだとauto-save時にも適用されてしまいますが、自分でC-x C-sした時だけeval-bufferするようなことって、できますでしょうか?
たびたびすいませんです。これで最後の質問にいたします。
86:デフォルトの名無しさん
08/05/12 08:28:30
>>85
eval-bufferして本来の動作をするようなelispを定義して
C-xC-s のコマンドに上書きすればいいだけじゃないか。
87:デフォルトの名無しさん
08/05/12 08:28:31
そういうコマンド書いて C-x C-s に割り当てればいいんじゃないかな。
88:デフォルトの名無しさん
08/05/12 08:58:59
>>85
interactive-p で auto-save かどうかを判定できるかも。
89:デフォルトの名無しさん
08/05/12 09:30:03
選択範囲内のすべての行の先頭にタブを入れたいのですが,
どうすればいいですか?
わかる方がいましたら教えてください。
90:デフォルトの名無しさん
08/05/12 09:43:01
>>89
マークして C-x r t C-q TAB RET
基本的な操作は本スレで質問しような。
91:デフォルトの名無しさん
08/05/12 15:52:28
>>81
なぜかうちの環境ではならない
ubuntu7.10
92:デフォルトの名無しさん
08/05/13 12:03:29
>>90
そんな長いコマンドがちょっといやで,
C-c C-tあたりでできるようにしたいです
93:デフォルトの名無しさん
08/05/13 13:28:35
>>92
じゃあチラシの裏に書く前にさっさとそうしてください。
94:デフォルトの名無しさん
08/06/20 07:24:04
opensuse11 初心者だけど、manページが文字化けする。。。。
95:デフォルトの名無しさん
08/07/04 09:18:57
elispでもマクロがあるんだねぇ。しらなかった。試しに作ったけど
(defmacro definsert (name str)
(let ((dstr (gensym)) (len (gensym)))
`(defun ,name ()
(let* ((,dstr (concat ,str ,str)) (,len (length ,str)))
(insert ,dstr)
(backward-char ,len)))))
( definsert insert-double-aho "aho")
(insert-double-aho) => ahoaho カーソルの位置 最初のahoの後ろ
インデントは適当になおしてね。また、これは車輪の再発明でinsert-pairが
標準であることを付け加えておきますね。
96:デフォルトの名無しさん
08/09/28 07:16:03
一行コピーの一番エレガントな実装を教えてください。
取り合えず手元にあるものではこんな感じ。
(defun duplicate-line (n)
(interactive "p")
(save-excursion
(copy-region-as-kill (line-beginning-position)
(progn (forward-line 1) (point)))
(dotimes (i n)
(yank))))
ちなみに、コピー後のカーソル位置は任意です。(カラムが移動するのはイヤン)
97:デフォルトの名無しさん
08/09/28 08:05:33
;; エレガントかどうか知らんけど、最終行でも動作が変わらないようにしてみました
(defun duplicate-line (n)
(interactive "p")
(save-excursion
(let ((str (concat (buffer-substring (line-beginning-position)
(line-end-position))
"\n")))
(forward-line)
(when (= (line-end-position)
(point-max))
(insert "\n"))
(dotimes (i n)
(insert str)))))
98:デフォルトの名無しさん
08/09/28 10:44:45
(fset 'duplicate-line
[?\C-a ?\C- ?\C-e escape ?w ?\C-m ?\C-y ?\C-a ?\C-p])
99:96
08/09/28 11:13:49
ありがとうございます。
>>97
確かに最終行が改行で終わってないと動作がおかしいですが、
ある意味正しいというか、あまりないことなので現状でも
いいかなという気もします…
>>98
マクロも考えたんですが、カーソルのカラム位置が移動しちゃうのと
一回のUndoで元に戻らないのがちょっと微妙です。
100:96のお父さん
08/09/28 11:34:40
(insert (save-excursion (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))
101:96のお父さん
08/09/28 11:36:45
失礼。
× (insert (save-excursion (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))
○ (save-excursion (insert (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))
どっちでもいいけどな。
102:デフォルトの名無しさん
08/11/22 13:26:48
質問です。
grep-find で、あちこちの .svnディレクトリ以下を無視したいのですが、
参考:.svnを除外してfindする
URLリンク(snak.tdiary.net)
今は毎回、-name .svn -prune -o を手で付け加えていて面倒なのです。
そこで、デフォルトでこのオプションが追加されるようにしたいのですが、で
きたらgrep.elはそのままで、.emacs.el で設定したいのです。どうしたら良い
でしょうか?
103:デフォルトの名無しさん
08/11/22 13:35:06
なんか自己解決しました。grep-findじゃなくてrgrepだと.svnディレクトリを
デフォルトで無視してくれてるみたいです。
もっと調べてから質問するべきでした。すみません。
104:デフォルトの名無しさん
08/11/22 14:24:45
すみません、>>102-103です。
Emacs本スレに書いたつもりの誤投稿でした。本当にごめんなさい。
105:デフォルトの名無しさん
08/12/03 11:27:34
Emacs Lispでwgetみたいなことはできますか?
106:デフォルトの名無しさん
08/12/03 15:34:26
質問です。
x と lst が与えられたとき、x を lst から取りだす CAR と CDR の適用列を返す
関数 co を定義しなさい。 coは、そのような適用列が存在しない場合は NIL を
返すものとする。
107:デフォルトの名無しさん
08/12/03 15:43:05
>>106
> x と lst が与えられたとき、x を lst から取りだす CAR と CDR の適用列を返す
> 関数 co を定義しなさい。
この文章は 命令 とか 指示 とかいった文章で
> coは、そのような適用列が存在しない場合は NIL を返すものとする。
この文章は 補足 とか 追加説明 とかいった文章だな。
で質問は何?
108:デフォルトの名無しさん
08/12/03 17:02:51
;; >>106 エスパーして作ってみた
(mapc 'require (cl el-expectations))
(defun co (x lst &optional acc)
(assert (listp lst))
(macrolet
((recur (&rest lst) `(co ,@lst)))
(let ((cur (car lst)))
(cond ((null cur) nil)
((and (atom cur)) (if (eq x cur) (cons 'car acc)
(recur x (cdr lst) (cons 'cdr acc))))
((listp cur) (or (recur x (car lst) (cons 'car acc))
(recur x (cdr lst) (cons 'cdr acc))))
(t (error "unexpected lst: %s" cur))))))
;; test cases
(expectations
(error (co 'a '()))
(expect (co 'not-found '()))
(expect (co 'a '(a)) '(car))
(expect (co 'b '(a b c)) '(car cdr))
(expect (co 'c '(a b c)) '(car cdr cdr))
(expect (co 'x '((x) a b c)) '(car car))
(expect (co 'x '((a b c x) d e f)) '(car cdr cdr cdr car))
(expect (co 'x '(a b (c x d) e f)) '(car cdr car cdr cdr)))
109:デフォルトの名無しさん
08/12/03 17:04:03
(mapc 'require '(cl el-expectations))
ね
110:デフォルトの名無しさん
08/12/03 18:41:44
>>106
どこの学校の宿題 ?
111:デフォルトの名無しさん
08/12/03 21:04:29
戸塚ヨットスクール
112:デフォルトの名無しさん
08/12/03 21:40:53
;; とりあえず質問者からの動作報告求む
(defun* co (x lst &optional (compare 'eq))
"COMPAREで比較関数を指定できるようにしてみた。
引数無しでは`eq'を使って比較する。"
(assert (listp lst))
(labels ((f (lst acc)
(let ((cur (car lst)))
(cond ((null cur) nil)
((and (atom cur)) (if (funcall compare x cur) (cons 'car acc)
(f (cdr lst) (cons 'cdr acc))))
((listp cur) (or (f (car lst) (cons 'car acc))
(f (cdr lst) (cons 'cdr acc))))
(t (error "unexpected lst: %s" cur))))))
(f lst '())))
;; てすけ
(expectations
(error (co 'a '()))
(expect (co 'not-found '()))
(expect (co 'a '(a)) '(car))
(expect (co 'b '(a b c)) '(car cdr))
(expect (co 'c '(a b c)) '(car cdr cdr))
(expect (co 'x '((x) a b c)) '(car car))
(expect (co 'x '((a b c x) d e f)) '(car cdr cdr cdr car))
(expect (co 'x '(a b (c x d) e f)) '(car cdr car cdr cdr))
(expect (co "foo" '("bar" "foo") 'string=) '(car cdr)))
113:デフォルトの名無しさん
08/12/04 15:17:06
遅くなりました106です。
関数coを定義しなさいという問題でした。
みなさんのおかげできました。
ありがとうございました。
114:デフォルトの名無しさん
08/12/05 16:07:00
質問をさせてください。
read-string等でminibufferから読み込みをしている最中にC-x C-bとかすると
(if enable-recursive-minibuffers
(error "Command attempted to use minibuffer while in minibuffer")
(error "Cannot switch buffers in minibuffer window"))
なんですが
condition-caseでは捕まえられないし(switch-to-buffer中のエラー?)
*Backtrace*でqを押すとread-stringが戻る事無くトップレベルに返ってしまいます。
こういう場合はどう対処すればよいのでしょうか?
非同期プロセスと通信するプログラムを書いているので
いきなりtop-levelに返ってもらっては困るのです。
よろしくお願いします。
115:114
08/12/05 16:18:25
ifのthen式とelse式が逆でした
116:デフォルトの名無しさん
08/12/17 23:20:41
すみません、
>>106を>>108>>112
より簡単に書けませんか?
よく分かりません
117:デフォルトの名無しさん
08/12/17 23:50:38
宿題をここで教えてもらうような人間が提出するには
コードが綺麗すぎて困っているのですね、わかります。
118:デフォルトの名無しさん
08/12/18 15:56:12
(defun co (x lst)
(let ((f (lambda (node acc)
(cond ((eq node x) acc)
((consp node)
(or (funcall f (car node) (cons 'car acc))
(funcall f (cdr node) (cons 'cdr acc))))))))
(funcall f lst '())))
119:デフォルトの名無しさん
08/12/24 16:57:33
ある eval に時間のかかる式を
開発中に eval-buffer したときは eval せずに,
compile 時のみに eval したいんですが,
どうするんでしょうか?
(eval-when (compile) (hoge))
これはうまくいっていないように思う.
Emacs 22.
120:デフォルトの名無しさん
08/12/24 22:25:20
eval-when-compile
121:デフォルトの名無しさん
08/12/25 00:44:53
eval-when-compile は eval-buffer でも eval される.
質問の仕方を変えると, byte compiling 中のみ Non-NIL に
なる変数はどうすれば定義できるか?
(defvar hoge-byte-compiling-p ...)
122:デフォルトの名無しさん
08/12/25 09:15:49
>>119と>>121じゃ問題が全然違うだろ。
123:デフォルトの名無しさん
08/12/25 12:25:52
質問がへたでごめんなさい.
eval-when-compile は eval-buffer のときも byte-compile のときも eval されるが,
今どちらなのかを区別したいです.
124:デフォルトの名無しさん
08/12/25 16:32:59
>>121
backtrace/backtrace-frame を使って byte-compile-form あたりの有無で判定
できると思う.
125:デフォルトの名無しさん
09/02/07 11:11:43
大学2年です
春休みを使って、emacs lispを勉強して、より快適な環境を作り、雑多な手間を省きたいんですが
どのくらいのレベルに行けば、emacs lispを扱えるレベルと言えるんでしょうか?
現在、自分はレベル1でしょうか
実は、Pythonのほうが興味があって、Pythonのほうがメインの勉強だったりします
Pythonでも下記のリンクのようなことは、できそうですよね?
Lisp(emacs lispとの違いがまだよくわかっていませんが)のほうがスマートなんでしようか
古いネタですが、叩き台のネタに
Scheme:Schemeプログラマのレベル10
URLリンク(practical-scheme.net)
126:デフォルトの名無しさん
09/02/07 23:23:43
新しいmajor-modeを書いたり、標準のelispとか誰かが作ったelispのバグを取ったり拡張を書いたり
できるようになれば十分扱えてるといっていい状態だろうね
それ以外の項目については何が言いたいのかよくわからない
127:デフォルトの名無しさん
09/02/08 00:28:15
Lispの方がスマートに解ける問題もあればPythonの方が良い場合もあるでそ。
なんとなく思いだしたのでこれ貼っとく。
URLリンク(www.aoky.net)
128:デフォルトの名無しさん
09/02/08 06:58:22
>>127
リンク、サンクスです
この人の寸評だと、このころはRubyのほうが優れた言語とされていたんだね
elispで何ができるかというのは、漠然とだけど、掴めるんだけど
Schemeでなにができるかがよく掴めない(どういう用途に優れているとか)
単なる教養としての言語なのかな
言語仕様として一貫性があるとか、そんな感じなのかな
Scheme関連のチュートリアルを読んでみます
129:デフォルトの名無しさん
09/02/08 11:50:11
一応言っておくけど、Lispを学びたいからEmacs Lispをやるっていうのなら、
括弧になれるとか入口程度に思っておいた方がいいよ。
Emacs Lispは、見た目、Lispなだけだから。
末尾再帰を最適化できないから、再帰で書くことが事実上できなかったり、色々とLispらしくないから。
130:デフォルトの名無しさん
09/02/08 12:40:51
Emacs Lispはテキストエディタのマクロとは思えないほど多機能だけど
>>129に書かれてるような問題があるよということを>>127の人の最近のポストで書いてるね。
URLリンク(steve-yegge.blogspot.com)
Emacs LispでJavascriptを実装しちゃうってのも凄い話だけど。
あとLispの方言の説明がおもろい。
>Lisp is a whole family of languages, and can be broken down approximately as follows:
> * Scheme is an exotic sports car. Fast. Manual transmission. No radio.
> * Emacs Lisp is a 1984 Subaru GL 4WD: "the car that's always in front of you."
> * Common Lisp is Howl's Moving Castle.
131:デフォルトの名無しさん
09/02/08 13:02:07
>>130
コメント欄みてみるとハウルネタがやたらウケてるな。このアニオタどもめ!
132:デフォルトの名無しさん
09/02/08 13:11:50
言語仕様に問題のあるEmacs Lispだけどlispの総合環境としてはソースレベルデバッガあり、トレーサあり、
プロファイラあり勿論ディスアセンブラもありと割と至れり尽せりだったりする
133:デフォルトの名無しさん
09/02/08 13:43:30
>>130
ハウル、みていないんだがw
Emacs Lisp の"the car that's always in front of you."をYahooに訳させたら、
いつもあなたの正面にある車。と訳したんだけど、どういう意味だ
1984 Subaru GLは
URLリンク(farm1.static.flickr.com)
らしいけど、古い4WDって話か
>>132
そういう通常利用の一個上を行く使い方ってどういうのがあるんですかね
潜在能力が高いなら、もっと踏み込んで勉強したいところなんですが
ちょっとEmacs Lispをかじっただけですが、けっこうのことをEmacs1つでできそうだなと想像するんですが
Lisp関連であと2日ぐらいググって、今後のカリキュラムを組もうかな
言語仕様50ページだったSchmeは、ちょっとやりたくなるね
Schmeをやってから、Emacs Lispをやったほうが言語仕様も理解しやすいかな
関数名が長いのってEmacs Lispだけじゃなくて、Schmeもそうなんだね
略記もあるみたいだけど
個人的に長いほうが好きかも
保守しやすそうだし
チラシの裏
年齢(生まれ)比較
Lispは1958年生まれの51歳
Schmeは1970年代生まれの30代
Comon Lispは1984生まれの25歳
Emacs本体(Emacs Lisp)は約1976年生まれ, 32~33歳
Pythonは1991生まれの18歳
C言語は1972年生まれの37歳
134:デフォルトの名無しさん
09/02/08 16:19:28
>>133
"the car that's always in front of you."
は、俺だったら
「いつもそこにある車」 って訳すかな
(=古くてダサくて定番中の定番で面白くないけど、結局乗るのはこの車なんだよね、
的な意味で)
あと、「Scheme」 だぞ。typoかと思ったけど全部Schmeって書いてるってことは
本気で勘違いしてる?
135:デフォルトの名無しさん
09/02/08 16:27:08
schemeやelispはhogeライブラリのfoo関数ってのをhoge-fooみたいに定義せにゃならんからね
この規則を使って階層になったライブラリの関数、hogeライブラリの中にあるfooライブラリの関数fの名前を付けると
hoge-foo-fのようになってしまう
長くなるのは仕方ないけど、この規則ででかいアプリケーションは書きたくないよね
136:デフォルトの名無しさん
09/02/08 16:31:26
the car that's always in front of you というネタの原型はフォードT型。
あまりに売れすぎて、「どんなレーシングカーもフォードTの前に出ることはできない。どれだけ抜いてもまだ前にもう1台いる」というジョークが生まれたので。
スーパーカーとの対比で、性能はプアだけどみんなが使ってる普及版っていうニュアンスだろうな。
elispはよくも悪くもEmacsと切り離せないものなので、本当に言語の勉強をしたいならcommon lispかschemeのほうがいいよ。
逆にEmacsいじって遊びたいならelisp使うしかないし。
137:デフォルトの名無しさん
09/02/08 16:39:45
>>136
134だが勉強になった。トン
138:デフォルトの名無しさん
09/02/08 18:12:24
>>136
> elispはよくも悪くもEmacsと切り離せないものなので、本当に言語の勉強をしたいならcommon lispかschemeのほうがいいよ。
言語の勉強したいまでは、まだ至っていません
Emacsを使いこなせるようになりたいだけで
Schemeは、知っていて損はなさそうですね
チュートリアルの語彙も特徴的で好奇心をそそられる
英語・日本語の資料も豊富そうで資料には、困らないだろうし
プログラマとしての幅が広がるなら、なおうれしいかな
139:デフォルトの名無しさん
09/02/14 00:26:28
俺はバッファ、リージョン、選択範囲なんか用の
map関数を書いてよく使ってるんだがこれ便利よ
色々関数を別途定義しといて
関数を行に対して呼び出す
2chに書き込むときによくやるのは
タブ→スペース変換と
半角スペース→nbsp変換
こうするとプログラムはインデントされて見やすい
ところで、久しぶりにここきたんだが
xyzzyスレってどこいったの?
見つからないんだけど
140:デフォルトの名無しさん
09/02/14 00:34:37
ソフトウェア板とWindows板に1つずつあるよ。
141:デフォルトの名無しさん
09/02/14 00:45:02
あったあった、さんきゅー
142:デフォルトの名無しさん
09/02/19 18:25:06
行の(半角相当で)80文字目の位置をを色づけしたいとおもったんですが,
とりあえず思いついた
'(("^......................................................\
.........................\\(.\\)" 1 highlight-long-line-face append))
というのをfont-lock-add-keywordsして加えたところ、
当然ながら全角文字をいれると後ろにずれました
半角で80文字目の位置をを色づけする方法について、
なにかお知恵を拝借できませんでしょうか?
143:デフォルトの名無しさん
09/02/19 19:21:13
URLリンク(www.emacswiki.org)
144:デフォルトの名無しさん
09/02/19 22:19:43
質問者じゃないけど
めちゃめちゃ重いなそれw
145:デフォルトの名無しさん
09/02/20 15:29:29
>>143
ありがとうございます
そんなものが作られてたんですね、試してみます
146:デフォルトの名無しさん
09/02/23 22:05:35
>>144
うまい工夫をしないと速くならないだろうからなぁ。常に80文字目を数えるって
いうことだしね。
147:デフォルトの名無しさん
09/02/23 23:00:47
cygwin環境下でgaucheをリッチに使いたくて
行ごとに色を変えたいんですが教えてください
まさに自分がやりたいことがこれ
URLリンク(pitecan.com)
上のプログラムをざっと読んだ感じ、
色の変更に関するプリミティブな部分ってのは
「put-text-propertyに背景色を設定したfaceを設定する」
というように感じたのですがあってますか?
それらしきコードを書いてみたのですがうまくいかず・・
(setq symbol (make-symbol "test"))
(setq face (make-face symbol))
(set-face-background face "DarkSeaGreen1")
(point)
134 ←評価結果
(point)
146 ←評価結果
(put-text-property 134 146 'face face)
148:デフォルトの名無しさん
09/02/23 23:02:07
あ、補則。このコードは行は意識してなくて、とりあえず指定箇所の背景色を変えたいだけです
149:デフォルトの名無しさん
09/02/24 00:19:05
とりあえずfont-lock-faceにしたら動いたけど
(put-text-property 1 20 'font-lock-face 'highlight)
150:デフォルトの名無しさん
09/02/24 00:39:13
ありがとうございます。
それを実行したときはtが返るんですよね?
M-x list-faces-displayで書いてあるフェイスをいくつかうちこんでは見ましたが
自分の環境ではnilが返ってきて色が変わらないです
↓動作はよくわかってませんが、これを切り替えた場合はちゃんと色が変わります
(global-font-lock-mode t)
(global-font-lock-mode nil)
今日は寝て、また明日調べてみますわ
151:デフォルトの名無しさん
09/02/25 12:19:45
ver22で拡張された \,(function \1) みたいなのが
replace-match では使えない(不正な\エラーになる)のは何で?
こんな感じ↓
(re-search-forward "\\(.+\\)" nil t)
(replace-match "\\,(my-func \\1)" nil nil)
=> Invalid use of `\' in replacement text
152:デフォルトの名無しさん
09/02/25 15:06:59
est
153:デフォルトの名無しさん
09/02/25 17:08:20
>>151
君の頭が腐っているというのを疑った方がいいよ
154:デフォルトの名無しさん
09/02/27 00:26:35
>>151
プログラマブル正規表現だっけ?
よくわからん
155:デフォルトの名無しさん
09/02/27 01:11:40
プログラマブルなのが使えるのは、インタラクティブに実行した場合だけでしょ。
NEWS
*** When used interactively, the commands `query-replace-regexp' and
`replace-regexp' allow \,expr to be used in a replacement string,
ちなみに replace-regexp を実行したら次のように展開された(repeat-complex-command)。
(replace-regexp "\\(.+\\)"
(quote
(replace-eval-replacement replace-quote
(my-func (match-string 1))))
nil
(if (and transient-mark-mode mark-active)
(region-beginning))
(if (and transient-mark-mode mark-active)
(region-end)))
で、replace-regexp をプログラムの中で使うのはbadなので、
(while (re-search-forward "\\(.+\\)" nil t)
(replace-match (my-func "\\1") nil nil))
156:151
09/02/28 01:47:45
>> 154
そんな名前があるとは知らなんだ。
google先生は記号の検索には弱いしね・・・
>> 155
サンクス。インタラクティブ専用だったんだ。
よく使う置換の組を「お気に入り」みたいに登録して一発で呼び出せるlispを作ってたんだけど、
仕組み上、正規表現は自由に指定可能だから関数決めうち実行ができなくて。
プログラマブル正規表現は非対応とあきらめるしかないか。
157:デフォルトの名無しさん
09/02/28 03:23:53
>> と数字の間は開けないで
158:デフォルトの名無しさん
09/02/28 22:18:39
起動時にインタラクティブな関数を自動的に呼び出すにはどうしたらいい?
2画面で起動して、片方にSchemeインタプリタを起動したい
2画面の分割は、.emacsに(split-window-vertically)を追記したらうまくいったが
M-x run-schemeが呼び出せないんだ
159:デフォルトの名無しさん
09/02/28 22:50:34
(run-scheme) ではだめなのけ?
160:デフォルトの名無しさん
09/02/28 23:14:03
だめぽ。そうするとこんなわけわからんエラーが出る
Wrong number of arguments: #[(cmd) "\304\305!\204^Y^@\306^H!^Y\307\310\311 @\312 A%q\210\313 \210)^H^R\305^S\314\305\
!\207" [cmd cmdlist scheme-program-name scheme-buffer comint-check-proc "*scheme*" scheme-args-to-list apply make-comint "s\
cheme" nil inferior-scheme-mode pop-to-buffer] 6 ("/usr/share/emacs/21.2/lisp/cmuscheme.elc" . 6428) (list (if current-pref\
ix-arg (read-string "Run Scheme: " scheme-program-name) scheme-program-name))], 0
161:デフォルトの名無しさん
09/02/28 23:18:46
describe-function(C-h f)ぐらい覚えような
162:デフォルトの名無しさん
09/02/28 23:29:14
>>160
(run-scheme scheme-program-name)
163:デフォルトの名無しさん
09/03/01 09:48:57
(call-interactively 'run-scheme)
164:デフォルトの名無しさん
09/03/01 14:28:41
>>161-163
㌧牛㌧牛トーン・・カツ!
すばらしく快適な環境になった
165:デフォルトの名無しさん
09/03/01 17:07:00
>>164
(call-interactively 'run-scheme)
これしらんかった、すげぇ勉強になった、ありがとう
いままでintaractive関数の機動失敗時はいつも.elの中調べてた。