すみません,きわめて初歩的な質問です. setq で,関数側の名前空間に lambda 関数をセットするにはどうしたら良い のでしょうか?つまり,(defun square (x) (* x x)) と同じことを setq で やるにはどうしたら良いでしょうか? Common Lisp (というか,xyzzy Lisp)では (setq square #'(lambda (x) (* x x))) でできるのですが.
fset
462 :
名無しさん@お腹いっぱい。 :2005/05/29(日) 19:00:09
∧ ∧ (σ・∀・)σ 460 ゲッツ!! \ \ / \ ∪ ̄ ̄ ̄\)
463 :
460 :2005/05/29(日) 19:10:01
>>461 ありがとうございます.(fset 'square (lambda (x) (* x x))) でうまく行き
ました.それにしても,名前空間は本当にややこしいですね.このあたりは,
Scheme が本当に楽だと思います.
>>462 騙りはやめてください.私はアスキーアートを貼ったりすることに興味はあり
ません.
464 :
名無しさん@お腹いっぱい。 :2005/05/29(日) 19:14:17
>>460 騙りじゃないYO。
|:::|::|__ 、-'''"´ ̄ ̄`"''''-、 __|_::::||
__|::::|::|_|_ / / \ \|::::||;;;||.. ___ .___
m|::|::|::::|_/ ● ,,. .,, ● ヽ:||::::::_|__|_ | |iiii
::::||::::|;;;;;|. (__人__) |目;;‖|≡| ̄|iiii
::::||::::|旦''-、、,,,,,,______,,,,,,、、-'' 超巨大ショボーン
関数の名前空間にlambda関数をセットするって意味わからん
466 :
460 :2005/05/29(日) 19:22:01
訂正です.xyzzy-Lisp で,(setq square #'(lambda (x) (* x x))) という書
き方ができると書きましたが,間違いでした.これだと変数側の名前空間にセッ
トされるだけでした.ごめんなさい.しかし,xyzzy ではどう書くのだろう...
fset もないみたいだし.
>>464 すみませんでした.ただ,どうも私は,「番号ゲット」の人と,アスキーアー
トが苦手なのです.前者は全く意義がわからないし,後者は w3m ではアスキー
アートはきちんと表示されませんし.
お前の好みをここに書くことに意義はあるのか。
468 :
460 :2005/05/29(日) 20:40:11
>>467 遅くなりました.個人的には意義があると思っております.
道端で大音量の音楽をかけている人がいたとして,そういう人に「私はその種
の行為を好まない」と伝えることには,意義があるというのと同じです.
もちろん,それを聞いてその人が音楽を止めるかはその人の自由ですし,周囲
の第三者が一連の流れをどう受け取るかも,それぞれの自由です.
道端じゃなくてライブハウスでもそうするのかな?
470 :
460 :2005/05/29(日) 20:57:21
>>469 なるほど,良い例えですね.ライブハウスなら私はそれをしないでしょう.た
だし私は,その比喩に乗っかるなら,ライブハウスには行きません.
私は UNIX 板などの専門板は道端(ないしは公共空間)と考えており,ラウン
ジやニュース速報板などをライブハウスだと考えているということです(だか
らその種の板には行きません).
しかし,その受け取り方が正しいかはわかりません.というより,こういうも
のに正しいということは存在しません.ただし,その場の第三者の支持をより
多く受ける意見のほうが選択として望ましいでしょう.
以上です.しかし,この種の意見をたくさん書くのは,明らかにこのスレにとっ
て望ましくないですね.これで終わりにします.すみません.
書いてて自己矛盾してるのに気付かないもんかね、まったく。
結論: 句読点に , や . を使うやつはおかしなひとがおおい
この辺で雑談終わりにしないか
>>472 私も句読点は「,」「.」にしてるよ.日本語の論文誌では
そう指定されることが多いから,私の周りでもそういう人は多い.
君はきっとそんな世界とは無縁なんだろうね.
texの時だけそうしてる。
大学院に行くやつはたいてい就職できなかったやつ。
TeXの場合はその方が見栄えがいいから「, 」「. 」だけど、それとてASCIIコードの方だしなあ。 なんにせよ、場もわきまえずに関係の無いことをグダグダと垂れ流し、 挙句の果てには「私も」なーんて他人の振りして自己弁護するような池沼だということだけは分かった。
ID がでないので証拠はありませんが,私は
>>470 を最後に書き込みはしてお
りません.私の書き込みは,fill-region で整形してありますので,句読点以
外でも見分けがつくのではないかと思います.私の批判をなさるのは皆さんの
自由ですが.
(それにしても,私はよく自作自演の誤解を受けます.理由はわかりませんが,
>>474 さんには申し訳ありません)
ただ一点だけ,
>>471 の書き込みの「自己矛盾」という言葉が何を指している
のか,しばらく考えましたがどうしてもわかりません.よろしかったら,矛盾
点をご指摘いただけたら幸いです.皮肉でなしに,真剣に知りたいのです.
もし,お教えする価値がないと思われましたら,このレスを最後に,スレ本来
の流れに戻していただければ幸いです.
460よりもこいつ↓の方が断然好ましいと思う。つか気に入った。 |:::|::|__ 、-'''"´ ̄ ̄`"''''-、 __|_::::|| __|::::|::|_|_ / / \ \|::::||;;;||.. ___ .___ m|::|::|::::|_/ ● ,,. .,, ● ヽ:||::::::_|__|_ | |iiii ::::||::::|;;;;;|. (__人__) |目;;‖|≡| ̄|iiii ::::||::::|旦''-、、,,,,,,______,,,,,,、、-'' 超巨大ショボーン
xyzzy-lispってなぁ…
>>477 > TeXの場合はその方が見栄えがいいから「, 」「. 」だけど、それとてASCIIコードの方だしなあ。
日本語の論文では,ASCIIでなくて全角の「,」「.」を指定されるんだけど.
君はほんとに何も知らないんだね.Fランク大の出身者でしょうな.
> なんにせよ、場もわきまえずに関係の無いことをグダグダと垂れ流し、
> 挙句の果てには「私も」なーんて他人の振りして自己弁護するような池沼だということだけは分かった。
最早このあたりになると哀れというか見っともないというか・・・
自作自演じゃないんだけどね.まあ,君のような頭の悪そうな人に
どう思われてもかまわないけど (笑)
結論: 句読点に , や . を使うやつはおかしなひとがおおい
>>481 は学歴しかとりえがない社会不適合者かな?
大学はこういうやつを隔離しておくところ。
ずっと入院して、永遠に退院してこないでください。:-)
いつまで続けんのよ。
>>481 これはどっちのキャラで読んだらいいのかな。
フシアナしてないから「弁護する他人」キャラ?
>>479 いいよな。初めて見た。
:-) ←とかいう顔文字を使う奴が自分は社会に適合できてると思ってるのが笑える
>>481 日本語の論文って、あんた、Gランク大ですか?
島国根性まるだしですね。
>>488 はあ? いま日本語の論文の話題をしてるんだろ?
なんで突然英語の論文の話題になるの? ふつーは論文を英語で
書いてるよ,そんなの言うまでもないじゃん.
得意げに島国根性だってよ (苦笑).馬鹿と話すと疲れるね.
>>489 (add-hook 'yatex-mode-hook
(lambda ()
(require 'skk)
(setq skk-kutouten-type 'en)))
とでもしとけ。
結論: 句読点に , や . を使うやつはおかしなひとがおおい
日本でまともな研究しているやつっているの?
まともな研究したいやつは皆アメリカへ行く。
494 :
Zeno ◆5nZQbNmQPs :2005/06/01(水) 21:51:38
495 :
名無しさん@お腹いっぱい。 :2005/06/14(火) 21:04:19
M-x で呼び出せる関数書いたんですが、 それに C-u を前置しても4回連続で実行とかしてくれません ESC [任意の数字] でも同じ 複数回連続動作させたい場合は、何か特別な事をしなくちゃならないんでしょうか?
(interactive "p")
>>495 特別なっつーか、引数を自分のやりたいように処理してやんなきゃ。
その前置引数を見てその回数だけ繰り返すように関数を書かないと駄目っしょ。
C-u を前置すると Emacs が勝手に繰り返してる訳じゃなくって、C-u が渡さ
れたら繰り返すように関数が作ってある訳で。
(defun hoge (n) (interactive "p") (dotimes (i n) (insert "hoge")))
500 :
498 :2005/06/14(火) 23:26:34
一応解決しました
ifの使い方で躓いてただけだった
perlとかCみたいに{}で複数行をひとまとめにできないんで
>>499 ありがとうございます
dotimesなんてものもあるんですね
関数もっと知ってれば結構書けるんじゃないかな、とか思っちゃってる俺
ネット上に結構充実したリファレンス(しかも日本語訳されてる)とかあるし、
金出さなくても勉強できそう
emacs lisp は info のヘルプが超便利だと思うよ。
そだね いろんな日本語のinfoを捜して、 それ読むだけでもいいんじゃない
lisp 以下のソースを見たらいいんじゃない? 使用したい function の使用例として。
文字列で与えられたシンボルを束縛したいんだけどどうやればいいでしょうか。 font-lock-mode => t (let* ((bound-str "font-lock-mode") (intern-soft bound-str)) font-lock-mode) => t これじゃ駄目だし orz
eval すればいい (let ((bound-str "font-lock-mode")) (eval `(let ((,(intern bound-str) nil)) font-lock-mode))) => nil よく使うならマクロに (defmacro hoge (str value &rest body) (let ((sym (intern (eval str)))) `(let ((,sym ,value)) ,@body))) (let ((bound-str "font-lock-mode")) (hoge bound-str nil font-lock-mode)) => nil
>>505 おおー、できました。
eval すりゃいいのか…ってまだよく理解できてないけど。感謝。
eval 必要ないみたい。 (defmacro let-string (str-value-list &rest body) `(let ,(mapcar (lambda (sval) (list (intern (car sval)) (cadr sval))) str-value-list) ,@body)) (let-string (("font-lock-mode" nil) ("test" 11)) (cons font-lock-mode test)) => (nil . 11)
eval 無いと (let ((bound-str "font-lock-mode")) (let-string ((bound-str nil)) ...)) みたいに使えないよね。 文字列リテラル書けるのなら最初からシンボルにすればいいんだから、 よそから持って来た文字列に値を束縛したいって話なんじゃないの?
すみません、書いてから気付きました。
hoge という関数が定義されているか調べるにはどのように書けばよいのでしょ うか?
(fboundp 'hoge)
Linux板のAtok Wnnスレで放置されたんで作ってみた。 (defun to-hankaku () "change current word from zenkaku to hankaku" (interactive) (save-excursion (push-mark) (backward-word 1) (japanese-hankaku-region (region-beginning) (region-end)) (pop-mark))) (global-set-key "\M-n" 'to-hankaku) どなたか叩いてくだひゃい。 本当に聞きたいのはWnn7eggで半角カタカナ入力できるか否かなんだが
普通、関数内部の処理では mark は使わない。 mark は基本的に、ユーザーが手動で region 指定したり移動したりするためのもの。 移動コマンドなんかで、あとでユーザーが使えるように push-mark しとくとか、そういうときに使う。 普段の処理で使うのは marker のほう。 でもこの場合は、その場で region 指定するだけだから、 marker も使わないで済みそうかな。 (save-excursion (let ((end (point))) (backward-word 1) (japanese-hankaku-region (point) end))) みたいな。
>>513 ありがとさんです。regionといっても
markしなきゃいけないわけじゃないんですね。
えらくすっきりしました。
またなんかあったらよろしく
質問なんですが、例えば(decode-time)の結果のようなリストを これまた例えば(sec minute hour day month)のような変数(のリスト)に 一気に代入するようなコマンドってないもんでしょうか。 Perlでいう ($sec, $minute, $day, $mon, $year) = localtime(); みたいなイメージなんですが。 あと、Emacs-Lisp Farm ていうMLがあるようですが 過去ログって見れないんでしょうか?
間違った使い方な気がするけど、multiple-value-setqとか? ログはMLはいってからコマンドメール投げれば取得できるよ。
>>515 (apply (lambda (sec minute hour day month year dow dst zone)
...)
(decode-time))
とか CL 使うなら
(destructuring-bind
(sec minute hour day month year dow dst zone)
(decode-time)
...)
>>516 ,517
レスどうもっす。
(setq num '(1 2 3 4))
(multiple-value-setq (a b c d) num)
みたいに簡単にできるのですね。助かります。
「間違った使い方」つうのが気になるけど、、。
(apply (lambda (sec minute hour day month year dow dst zone)
(message "%d年%d月%d日%d時%d分" year month day hour minute sec)
)
(decode-time))
として動くのは確認しました。が、当方未だラムダ式とかよくわかっていないので
じっくり考えてみようと思います。
とりあえずapplyのドキュメントを丸のみすれば
「(decode-time)で返されたリストを引数(リスト)としたlambda式が実行された」
ということですね?
間違った使い方な気が……っていうのは、 elispには多値はないのにmultiple-value-*を使ってるから。
520 :
Zeno ◆5nZQbNmQPs :2005/08/23(火) 11:25:55
ユニバーサルな解釈など存在しない為 間違った使い方など存在しない _________________ If T is consistent then T !|- R_T If T is consistent then T !|- ¬R_T. -- John B. Rosser
そういう考えだとあらゆる価値が平等に無意味になって 思考停止に陥るお。
思考する前に馬鹿を殺そう
523 :
Zeno ◆5nZQbNmQPs :2005/08/23(火) 21:34:07
Reply-to:
>>521 知っていた (る) 人の文調に似ている・・・
君は吾がそう思っている人物か?
> そういう考えだとあらゆる価値が平等に無意味になって
> 思考停止に陥るお。
人間は無限近くのチョイスを全て吟味するパワーはない為、
結局はプラグマティク、若しくは他人が選んでいるチョイスを
選んでしまう。
ただ 520 は「Lisp のような自由度の高い -- 故に創造性の必要とされる --
言語でただ一つの解釈を強要するのは間違っているのではないのか」
ということを伝えたかっただけだ。
> Reply-to:
>>522 お前誰だよ
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
520と523がみえない
見えないのが気になるならフィルタ使わないほうがいいよ
526 :
521 :2005/08/24(水) 04:51:42
よくわからんがニューハーフに知り合いはいないよ。
ゴキブリを見て見ぬふりする愚かさ
今は一匹なんだから叩いてつぶしちゃうよりは、 どっかに行くのを待ってもらった方がいい。
529 :
Zeno ◆5nZQbNmQPs :2005/08/24(水) 13:45:30
Reply-to:
>>524 お前もな
Reply-to:
>>526 > よくわからんがニューハーフに知り合いはいないよ。
人違いのようだ
Reply-to:
>>528 お前誰だよ
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
530 :
名無しさん@お腹いっぱい。 :2005/08/24(水) 14:20:22
Reply-to:
>>529 う ざ い
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
インライン関数を変更した際、 それを呼出している関数(バイトコンパイル済み)に反映させる 手軽な方法はないでしょうか? いちいち定義してるとこに飛んで評価するのは面倒なもので。
>>531 unload-featureとか使えない?
わたし自身、一度も使った事が無いから
良く分かんないけど。
テキストファイルを Emacs でバッチ処理して結果を stdout に吐きたいんです が、 --- testout.el --- (defun testout (file) (insert-file-contents file) ;; なんか処理する とりあえずここではなにもしない (princ (buffer-string))) --- testout.el ends here --- emacs -Q --batch -l testout.el --execute='(testout "in.txt")' > out.txt とした時に、in.txt にある日本語が out.txt では化けてしまいます。(各文字 の頭に '\222' が付くみたい、ascii は大丈夫) ちゃんと動かすにはどうすりゃいいでしょうか。
a) coding systemを設定する。 b) testout.elの中でout.txtに書く。
>>533 set-terminal-coding-system
stdout がファイルの場合は terminal-coding-system は無視されて emacs-mule になるよ。なので 534 の b のようにするしかない。
537 :
533 :2005/08/31(水) 18:13:37
>>534-536 むむ、write-file するしかないのかあ。フィルタの類ではないとはいえちょっ
と意外な気も。まあ、関数内でファイルに書いてもなんとかなるのでそうしま
す。サンクスでした。
encode-coding-string したものを princ するのはだめか? (未確認)
>>538 おお、なるほど。
(princ (encode-coding-string (buffer-string) 'euc-jp))
でやってみたら大丈夫なようです。エンコードが決め打ちなのが格好悪いです
が、まぁしょうがないかな。ありがとうございました。
terminal-coding-systemにすれば?
>>540 emacs -Q --batch --execute='(print (terminal-coding-system))'
で japanese-iso-8bit が返ってきますね。.emacs 読んでなくても大丈夫なの
か。terminal-coding-system 使うことにします。どうもでした。
>>541 ロケール見てるっぽいね。
$ LC_ALL=C emacs -Q --batch --execute='(print (terminal-coding-system))'
だと nil だったから。nil の時だけ us-ascii にしておけば問題ないと思う。
>>539 入力ファイルと同じ coding-system にしたいのであれば,
insert-file-contents した直後の last-coding-system-used を
使うというのはどうだろう。
Elispを初めて改造してみたのですが うまく行きませんでした changeが設定されていれば、nonにchangeを入れたいのですが 以下のように書いたところうまくいきませんでした 間違っているでしょうか? (if change (setq non change))
545 :
544 :2005/09/04(日) 13:49:30
ちなみに、 (setq change 'hoge) のように設定されていると、うまくどうさします
546 :
544 :2005/09/04(日) 13:51:48
解決しました 変更しない場合は (setq change ') として、変数は作成しておかないとダメなんですね 変数が無い場合も正しく動作するようにはできないでしょうか?
547 :
名無しさん@お腹いっぱい。 :2005/09/04(日) 14:04:21
質問は上げとけ
>>543 なるほど。今回のは元ファイルと常に同じって訳でもなかったんですが、そう
限定できる場合はいいかもしれませんね。アドバイスどうもです。
>>546 よくわからんが
(and (boundp 'change) change
(setq non change))
とか?
>>546 そんな構文あるのかー!
と思って思わず確認しちゃったよ。
emacs-cvs 使おうと思ったら、its とやらが含まれてないっぽいんんだけど、 どうしたらいい?
あ、みっけた。
>>552 emcws あてますた。
Makefile.in は手でなおして、configure は autoconf で作りなおしますた。
tamago と emcws ってどっちがいいの?
tamago
555 :
名無しさん@お腹いっぱい。 :2005/09/15(木) 03:44:22
Elispはじめて間もないのですが、質問です。 ある変数に入っている文字コードを判別するのって どうやればいいのでしょうか?? 例えば、 (setq hoge1 "ほげ" hoge2 "hoge") ここで、hoge2 に入っている文字列がローマ字であるかどうかだけ 分かれば、もしくは hoge1 に2バイト文字が入っているかどうかが 分かれば分かればいいのですが・・・ get-text-property あたりを見ているのですが・・・ ご教授お願いします。
>>555 その目的なら multibyte-string-p でよさそうな気がする。
正規表現で調べるって手もあるだろうけど。
「ローマ字であるかどうかだけ」 これは、「アルファベットのみからなる」と置き換えてもいいの?
そーいえばset-buffer-multibyteの使い方よくわからん
560 :
555 :2005/09/15(木) 10:03:45
皆様、レスありがとうございます。
>>557 さんの言うとおり、入っている文字列が
ただ単に日本語かまた違うものかを判別したいだけ
なので”アルファベットのみからなる”と
置き換えても構わないと思います。
すみません、よろしくお願いします。
Ro-maji hyouki no nihongo wa dousuruno?
hoge が、アルファベットのみで構成された文字列かどうか調べるなら、 (string-match "\\`[A-Za-z]+\\'" hoge) charset で調べるなら、 (let ((charsets (find-charset-string hoge))) (catch 'done (while charsets (unless (memq (car charsets) '(ascii eight-bit-control eight-bit-graphic)) (throw 'done t)) (setq charsets (cdr charsets))) nil)) とか?
563 :
555 :2005/09/15(木) 10:34:56
おお、素早いレスありがとうございます!! 今試して見ます!!
564 :
555 :2005/09/15(木) 10:50:33
>>562 おお、出来ました!!
正規表現での判別と文字そのものの判別ですか〜
なるほどなるほど。どうもありがとうございます。
勉強になりました。
カテゴリ使って (string-match "\\Ca" "abc") => nil (string-match "\\Ca" "あいうえお") => 0
再度書き込みすみません。
例えば、以下のように関数の続きとして
>>562 さんのコードを
使いたいのですが、(let を外してしまうと
上手く動いてくれません。let は局所的変数宣言でしたよね?
(defun .....
.
.
(setq hoge (split-string "name1 name2 name3"))
(setq name_s (length hoge) name_n 0 mew-from-sex 1)
(if (let ((charsets (find-charset-string (nth name_n hoge))))
(catch 'done
(while charsets
(unless (memq (car charsets)
'(ascii eight-bit-control eight-bit-graphic))
(throw 'done t))
(setq charsets (cdr charsets)))
nil))
(setq people 0)
(setq people 1))
.
)
よろしくお願いします。。。
(let を外したいのは何故?
関数の始めにいっきに let で変数宣言したくて、 (let ((charsets (find-charset-string (nth name_n hoge)))) も含めて宣言しようと外したのですが。。。
多段let撲滅
該当の部分を函数にする 途中に let がある事に慣れる (let (charsets) ... (if (progn (setq charsets (find-charset-string ... のどれか
>>569 参考までに教えて欲しんだけど
1. 実行速度
2.可読性
のいづれかの理由によるものでしょうか? それとも他の理由?
572 :
569 :2005/09/15(木) 19:55:16
>>571 いや、俺はちょっと皮肉(?)ってみただけで。
えっと、以下のようにするということでしょうか?? (let (charsets) hoge name_s name_n people mew-from-sex (setq hoge (split-string "name1 name2 name3")) (setq name_s (length hoge) name_n 0 mew-from-sex 1) (if (progn setq charsets (find-charset-string (nth name_n hoge)) (catch 'done (while charsets (unless (memq (car charsets) '(ascii eight-bit-control eight-bit-graphic)) (throw 'done t)) (setq charsets (cdr charsets))) nil)) (setq people 0) (setq people 1)))
うわ、空白がすごくみずらいですね。。。 すみません。。
あ、申し訳ないです。 変数リストを()でひとまとめにしていなかったですね。 (let (charsets) hoge name_s name_n people mew-from-sex こんな感じでしょうか??
こうでした、何度もすみません。 (let ((charsets) hoge name_s name_n people mew-from-sex)
初心者は setq 禁止
579 :
名無しさん@お腹いっぱい。 :2005/09/15(木) 21:34:54
Emacs をわたし色に染めて♪ の人は自殺しそうでしたがまだ生きてますか?
581 :
名無しさん@お腹いっぱい。 :2005/09/17(土) 06:30:27
LISPのクラスを取るか迷っている初心者ですが、LISPが出きると、どういうことができるようになるのか教えてください。
584 :
名無しさん@お腹いっぱい。 :2005/09/17(土) 11:44:54
>>581 クラスって大学か何かか。
EmacsLispでCLOSみたいなもんを誰か作ったのかと思った。
587 :
名無しさん@お腹いっぱい。 :2005/09/17(土) 14:29:15
学校の授業という意味です。
588 :
名無しさん@お腹いっぱい。 :2005/09/17(土) 14:44:13
>>585 ありがとうございます。読みました。
中で「Lispはパワフルな言語だとは知っているけど」等、LISPは凄いと絶賛していますが、
具体的にどう凄いのかってのが、どんなところで使われているのかってのが分からないのですが…。
LISPが出きると、どういうときにそれを活かせますか?
この授業は卒業のため取らなければならない科目ではないのですが、
将来役に立つのなら、取って見ようかなと迷っています。
学生なのに自分からは何も調べようとしないやつには、どんなことであろうと将来役に立たない
lisp なんかできたとして、将来研究所とかに行かない限り用途ないのでは? perl なり php なり使えたほうがバイトも出来ておとく。
perlなんか授業でやるか?
592 :
名無しさん@お腹いっぱい。 :2005/09/17(土) 16:06:14
perlの授業あります。 将来はネットワークエンジニア希望です。
593 :
sage :2005/09/17(土) 17:56:43
久しぶりに2chに来たらsageるつもりがageちまった。
とりあえず、この板ってのは古い知識しか持たない老人が多いので、 こんな場所で進路相談をするのは不適切なんじゃないかなと思う。
将来役に立つかっつったら微妙だわな。 だけど大学において考え方を学ぶ、学び方を学ぶって意味ではlispはおすすめ かもしれず。 関係ないけど、「出きる」って変換は気持ち悪いな。
LISPを使って(応用して)なにをするかによるだろう。 単純に、LISPを勉強するだけなら独学で(Emacs使ってるうちに)勉強 できるよ。なにしろ、単純な言語だからな。 インタプリタの作成とかまでやるんだったらいいんじゃないかな? 言語仕様が簡単だから結構楽しいと思うよ。
> 将来役に立つかっつったら微妙だわな。 > だけど大学において考え方を学ぶ、学び方を学ぶって意味ではlispはおすすめ > かもしれず。 関係ないけど、気持悪い書き方だな。
599 :
名無しさん@お腹いっぱい。 :2005/09/17(土) 21:24:34
だいたい、Emacs Lispの板でLispについて訊いても……
> 訊 おじさん、何でこんな漢字つかってるの?
>>601 一時帰宅が許されたのですか。病状も多少はよくなったようで、
御同慶の至り。
Emacs Lispの板???
604 :
名無しさん@お腹いっぱい。 :2005/09/18(日) 02:21:31
返事が遅れました。初心者に付き合っていただいて、ありがとうございます。 LISPがC言語とどう違うのか教えてください。 言語が違うってのは略。利点や使う場面等。 UNIXと深い関係にあるのですか?
Lisp なんかつかうやつはばかです。ということじゃないかな。
ム板のlispスレできいたら?
とりあえず初心者装った釣りでないならバカでしょう 知ってか知らずかかまうね、ここの人は
使う場面: スクリプティング用途
例:
Emacsのカスタマイズ
Gimpのプラグイン (script-fu)
ゲーム作り (AisleRiotのルールとかtrackballsのステージとか)
WMのカスタマイズ (
http://scwm.sourceforge.net/ とか)
uimの各種IMの実装
利点:
クロージャとマクロが使える
いや、「LispとCがどう違うか」なんて言ってる奴にマジレスするなんて
我ながら釣られているとしか思えないが…
C 使えれば、ライブラリ使っていろんなもの開発できるしなぁ。
複雑なことをやろうとすると、 結局Cで未完成なLISP(略
どれだけ lisp な製品が世の中に出ているかもあわせて考えるべきんじゃないかと。
>>611 誰かがクラッシュバンディクーの中でlispが動いているとか言っていた
建築系でメジャーな AutoCAD も lisp でカスタマイズする。 Emacs みたいに lisp interpreter をコアにしてるのか?
ってか、俺としてはむしろ、LispとCの共通点の方が知りたい。
>>612 ゲームはメモリ管理がシビアだから既存の物を使えないんで、
1から実装することになって、結局、実装の容易なlispになるんだろう。
>>616 正直、PythonやRubyが普及している今となってはlispを使う意味はないよなぁ。
その記事で、オブジェクトの永続化とか動的バインドとかで、すごい助かった
って言ってるけど、それなら別にlispでなくてええやん。Pythonでええやん。
まとめると、lisp なんか使う奴はバカですってことか。
別に Python でなくてもええやん。
いつまでもこのスレでこの話を扱ってる奴が知障
池沼がこのスレに粘着するから、 そんなこと書いてはいけません。
Lisp 道場らしくいこう。 java のソース上で、find-file-at-point したときに、クラスに対応したファイルを探 してみる。 制限: - 同じソースツリー上にあるものだけが対象。 - 今見てるソースと同じディレクトリにクラス名と同じパッケージがあったりするとダメ だったりする。 次のレスからソース。
623 :
622 :2005/09/22(木) 05:24:27
;; その1 (require 'ffap) (eval-when-compile (require 'cl)) (defun ffap-java-package-to-path (package-or-fqcn) (replace-regexp-in-string "\\." "/" package-or-fqcn)) (defun ffap-java-import-list () (save-excursion (goto-char (point-min)) (let (list) (while (re-search-forward "import\\s-+\\(.+\\)\\s-*;" nil t) (push (match-string 1) list)) (nreverse list)))) (defun ffap-java-src-directory () (save-excursion (goto-char (point-min)) (if (re-search-forward "package\\s-+\\(.+\\)\\s-*;" nil t) (let ((package (match-string 1))) (replace-regexp-in-string (concat (regexp-quote (ffap-java-package-to-path package)) "$") "" (directory-file-name default-directory))) default-directory)))
624 :
622 :2005/09/22(木) 05:25:17
;; その2 (defun ffap-java-mode (name) (let ((class (car (split-string name "\\."))) (import-list (ffap-java-import-list)) (src-directory (ffap-java-src-directory))) (or (catch 'found-class (dolist (import-class import-list) (when (string-match (concat "\\." (regexp-quote class) "$") import-class) (throw 'found-class (expand-file-name (concat (ffap-java-package-to-path import-class) ".java") src-directory))))) (ffap-locate-file name '(".java") (delq nil (cons "." (mapcar (lambda (import-class) (when (string-match "\\.\\*$" import-class) (expand-file-name (ffap-java-package-to-path (replace-match "" nil nil import-class)) src-directory))) import-list)))))))
625 :
622 :2005/09/22(木) 05:26:45
;; 設定 (add-to-list 'ffap-alist '(java-mode . ffap-java-mode)) これでおしまい。 素直に jde とか gtags 使えよって話もあるけどね。 ちょっと開いたソースのクラスを追ったりするのには使えると思う。
627 :
622 :2005/10/08(土) 02:57:34
淋しすぎるから、ちょっとだけネタ投下。 nxml ネタその1 昔どっかに書いた気もするけど、無理矢理 mule-ucs と共存させるにはこんな感じに修 正すればそれっぽくいける。 ただし、どんな問題が起きるか分からないから自己責任でやる事。 ;; 何かあるから無効にしてるハズだから。 --- nxml-mode-orig/nxml-mode.el +++ nxml-mode/nxml-mode.el @@ -33,8 +33,8 @@ -(when (featurep 'mucs) - (error "nxml-mode is not compatible with Mule-UCS")) +;; (when (featurep 'mucs) +;; (error "nxml-mode is not compatible with Mule-UCS")) --- nxml-mode-orig/rng-auto.el +++ nxml-mode/rng-auto.el @@ -26,8 +26,8 @@ -(when (featurep 'mucs) - (error "nxml-mode is not compatible with Mule-UCS")) +;; (when (featurep 'mucs) +;; (error "nxml-mode is not compatible with Mule-UCS"))
628 :
622 :2005/10/08(土) 03:01:50
nxml ネタその2 自分で mime-charset の名前を定義できるようにする。 ari さんの cp932.el を使えばカンペキ。 (defvar nxml-mime-charset-coding-system-alist '(("windows-31j" . shift_jis) ("cp932" . shift_jis) ("ms932" . shift_jis))) (defadvice nxml-mime-charset-coding-system (after nxml-mime-charset-coding-system-use-alist activate) (unless ad-return-value (setq ad-return-value (cdr (assoc-ignore-case (ad-get-arg 0) nxml-mime-charset-coding-system-alist)))))
629 :
名無しさん@お腹いっぱい。 :2005/10/21(金) 12:16:09
バッファリストをソートしようと こんな感じにしたけど、全部のバッファが表示されない。。 (defadvice buffer-list (around buffer-list-around activate) (sort ad-do-it '(lambda (b1 b2) (string< (buffer-name b1) (buffer-name b2))))) defadvice 良く分からん。 Elispも。
make-variable-buffer-localとdefvaraliasの 合の子みたいなのってできないでしょうか。 デフォルトでは変数Bは変数Aの値を使うけれど、 setqされるとAの値を変更するのではなく、 以後は独立した値を持つ、と。
ムリ。
(or B A) で代用か
make-local-variable?
>>629 buffer-listは表示なんかしない。
何がしたいのかよくわからんが、list-buffersでの並びを制御したいのだったら
list-buffers-noselectをadviceするべきだと思う。
635 :
名無しさん@お腹いっぱい。 :2005/10/21(金) 19:49:11
したいことは、C-xC-bのとき ソートしたいなーと思ったんだけど。 list-buffers-noselect の中で buffer-list を呼んでるんで いいと思ったが、だめか。。
>>635 (setq ibuffer-default-sorting-mode 'alphabetic)してibuffer使っとけ。
list-buffers 使いやすいか?
Oh Thanks. ところで、ibuffer ってファイルだけ 表示って可能か? C-uC-xC-b っぽいこと。
639 :
名無しさん@お腹いっぱい。 :2005/10/26(水) 16:58:28
初歩的な質問だと思いますが, xemacsで /home/mako/jikken/userFiles/690562.txt など, /homeではじまり.txtで終るファイル へのパスが書かれていた場合, そのパスの上でマウスの中ボタンをクリックすれば, xemacsでそのファイルを起動できるようにする方法を 教えてください. あまりLISPにくわしくないので,記述法など詳細に教えて頂ければ 助かります. googleで検索したところ,URLをマウスの中ボタンをクリックすれば, ブラウザで起動できるようにする方法は, (autoload 'browse-url-at-mouse "browse-url" "Ask a WWW browser to load a URL clicked with the mouse." t) (add-hook 'mew-message-mode-hook (function (lambda() (local-set-key [mouse-2] 'browse-url-at-mouse) ))) でできるという事は分かりました. これを,txtファイル,XEMACSで起動という形に出来れば最高なのですが. またいろいろ調べていると,thingatptやfiberという プログラムを使うと出来そうなのですが,そこからどうすれば良いのかが 分かりません.明日までに出来るようにしてと頼まれているので, 急いでいます. 宜しくお願い致します.
640 :
名無しさん@お腹いっぱい。 :2005/10/26(水) 17:44:52
よろしくお願い致します. 急いでいます.
641 :
名無しさん@お腹いっぱい。 :2005/10/26(水) 17:45:58
すみません. 自己解決しました.
642 :
639 :2005/10/26(水) 19:05:10
解決はしていません. よろしくお願い致します.
Emacs Lisp道場っつーネタかよそれ。しかもすげー自己中。そしてバカ。
小学生が大学生の電気工学の授業中に乗り込んでいって
これができる回路を作ってください。明日までに提出する自由工作なんです。よろしく。
ついては電子工作に詳しくないので回路や作り方も懇切丁寧に教えてください。
というみたいな行動を自分がしているというのは認識しているか?
>>639
Emacs 22だとlist-buffersではWindowsのエクスプローラとかみたいに 見出しをクリックして並べ替えできるようになってるんだけど、 ibufferは旧態依然なので見劣りしてしまうね。
クリック
>>644 Emacsの上でまでマウスを使いたくない派の俺としては、旧態依然としていても
, や s a とかでソートのモードが変更できる ibuffer の方が100万倍使いやすいわけだが。
マウスでできる != マウスでしかできない
>>639 が「自分はヌルーされている」と気付くのはいったいいつかな?(ワクテカ(AA略
俺もマウスは嫌いだが、Diredの中のファイルは マウスで他のアプリにドロップしたくなる。
そもそもマウス刺さってないし。
651 :
名無しさん@お腹いっぱい。 :2005/10/27(木) 13:49:43
kill-ring-save は 'invisible 属性のテキストもコピーしてしまいますが、 'invisible 属性のない普通のテキストのみをコピーするようにするにはどうすれ ば良いでしょうか?
>>649 Windows だったら CraftDrop と組み合わせればいけるよ。
>>651 でっちあげてみた。
ただ、複数の invisible 属性があるような場合だとうまく動かない。
たとえばこんなの
(concat "a" (propertize "b" 'invisible 'test1) (propertize "c" 'invisible 'test2) "d")
(defun kill-ring-save-without-invisible (beg end)
(interactive "r")
(kill-ring-save beg end)
(let ((kill (car kill-ring))
new-kill pos)
(when (get-text-property 0 'invisible kill)
(setq kill
(substring kill
(or (next-single-property-change 0 'invisible kill)
(length kill)))))
(while (setq pos (next-single-property-change 0 'invisible kill))
(setq new-kill (concat new-kill (substring kill 0 pos)))
(setq kill
(substring kill
(or (next-single-property-change pos 'invisible kill)
(length kill)))))
(setq new-kill (concat new-kill kill))
(kill-new new-kill t)))
複数の invisible 属性に対応してみた。 (defun kill-ring-save-without-invisible (beg end) (interactive "r") (kill-ring-save beg end) (let ((kill (car kill-ring)) (pos 0) new-kill) (while (> (length kill) 0) (setq pos (or (next-single-property-change 0 'invisible kill) (length kill))) (unless (get-text-property 0 'invisible kill) (setq new-kill (concat new-kill (substring kill 0 pos)))) (setq kill (substring kill pos))) (kill-new new-kill t)))
>>652 だんな!
このご恩は一生わすれませんぜ!
マウス使わないでOKなとこもGoodですぜ!
どこが道場なんだ?
ここ。
六三郎
>>653-654 さん
お返事ありがとうございます。
多分その関数は 21.3 までなら動くでしょうが、22.* では動かないかと思います。
(22 では (get-char-property pos 'invisible) が invisible 属性のテキストに対してうまく機能しないので。)
まあでもなんとか自力でやりたいことを達成することができました。
お世話になりました
んじゃ22で動くようにしたものを貼ってよう。giveはするがtakeはしない?
まちがった、giveとtakeが逆だった……orz
662 :
659 :2005/10/29(土) 00:04:49
>>660 san
そうですよね。
;; [ 2005-10-28 (00:38) ]
(defun kill-ring-save-visible (beg end)
(interactive "r" )
(let ((s "") from to)
(save-excursion
(save-restriction
(narrow-to-region beg end)
(setq from (goto-char (point-min)))
(while (not (eobp))
(if (point-invisible-p)
(progn
(setq to (point))
(setq s (concat s (buffer-substring-no-properties from to)))
(end-of-visible-line)
(setq from (point)))
(forward-char)))
(if (> (setq to (point)) from)
(setq s (concat s (buffer-substring-no-properties from to))))
(kill-new s)))))
invisible になるまで1文字ずつ進まないようにしてるので、ここら辺はもうちょっと
速くなるかもしれません。
663 :
659 :2005/10/29(土) 00:06:03
1文字ずつ → 1文字ずつしか
22 で確認 (defun kill-ring-save-visible (begin end) (interactive "r") (let ((r '()) (p begin) n) (while (and (setq n (next-single-property-change p 'invisible nil end)) (> n p)) (unless (get-text-property p 'invisible) (push (buffer-substring p n) r)) (setq p n)) (kill-new (apply #'concat (nreverse r)))))
665 :
659 :2005/10/29(土) 14:06:12
>>664 san
やっぱり自分の環境ではその関数も全く機能しません。
emacs-version
=> GNU Emacs 22.0.50.1 (i386-mingw-nt5.1.2600)
of 2005-07-11 on A208752
next-single-property-change が nil を返した時の処理が抜けてるせいかな。 (defun remove-invisible (s) (interactive "r") (let ((r '()) (p 0) n) (while (and (setq n (next-single-property-change p 'invisible s)) (> n p)) (unless (get-text-property p 'invisible s) (push (substring s p n) r)) (setq p n)) (unless (get-text-property p 'invisible s) (push (substring s p) r)) (apply #'concat (nreverse r)))) (remove-invisible (concat "a" (propertize "b" 'invisible 'test1) (propertize "c" 'invisible 'test2) "d")) => "ad" になる? GNU Emacs 22.0.50.2 (i386-unknown-freebsd6.0, X toolkit, Xaw3d scroll bars) of 2005-10-29 だと期待どおりの動作をするが。
667 :
659 :2005/10/29(土) 20:35:40
>>666 はい、今評価してみた所、 "ad" になりました。
>>662 に追加:
すみません、肝心な関数を貼るのが抜けていました。
>>662 の側に置いてあげて下さい。
(defun point-invisible-p ()
(line-move-invisible-p (point)))
↑でも使用してある通り、 `line-move-invisible-p' であれば invisible をうまく見つける
ことができるのですけどね。。。
(defun line-move-invisible-p (pos)
"Return non-nil if the character after POS is currently invisible."
(let ((prop (get-char-property pos 'invisible)))
(if (eq buffer-invisibility-spec t)
prop
(or (memq prop buffer-invisibility-spec)
(assq prop buffer-invisibility-spec)))))
もしかしてこーゆーこと? (defun invisible-p (position &optional object) (let ((invisible (get-char-property position 'invisible object))) (if (eq buffer-invisibility-spec t) invisible (catch :result (dolist (prop (if (consp invisible) invisible (list invisible))) (when (or (memq prop buffer-invisibility-spec) (assq prop buffer-invisibility-spec)) (throw :result t))))))) (defun kill-ring-save-visible (begin end) (interactive "r") (let ((r '()) (p begin) n) (while (and (setq n (next-single-char-property-change p 'invisible nil end)) (> n p)) (unless (invisible-p p) (push (buffer-substring p n) r)) (setq p n)) (unless (invisible-p p) (push (buffer-substring p end) r)) (kill-new (apply #'concat (nreverse r)))))
669 :
659 :2005/10/30(日) 05:21:17
>>668 そうそれです。完璧に動作しました! しかも速度も高速ですね。
buffer-invisibility-spec が鍵を握るのはわかって
いたのですが、今コードを解釈する時間がない為、連絡だけさせていただきました。
>>659 で言っていたうまく機能しないと言うのは見えているものまで一緒に消えちゃっ
ていたと言う事でOK?
671 :
670 :2005/10/30(日) 06:34:20
少しわかりずらいな。 つまり、 (with-current-buffer (window-buffer (display-buffer (get-buffer-create "*test*"))) (erase-buffer) (add-to-invisibility-spec '(test1 . t)) (insert (concat "a" (propertize "b" 'invisible 'test1) (propertize "c" 'invisible 'test2) "d"))) をした結果の *test* buffer の中身に対して kill-ring-save-visible を実行した結果が => "acd" となって欲しかったという事でいい?
もしかすると text-property -> char-property で overlay が認識される ことで解決したってことかも。 何にせよ、Emacs 22 だからというより設定のせいっぽいが。 (デフォルトでは buffer-invisibility-spec は 22 でも t だし invisible な overlay も存在しない)
あるソフトウェア独自の簡単なスクリプト言語に対応するメジャーモードを作りたいのですが、 コメント部の色をかえるにはどうしたらいいのでしょうか? コメントはC言語の /* が @cs に、*/ が @ce になったような感じです。複数行可。 comment-start と comment-endにそれぞれ値をセットするばいいだけというわけではないのでしょうか? よろしくお願い致します。
Emacs Lisp神社
>>673 それっぽく色を付けるならこんな感じかな。
modify-syntax-entry でコメント開始/終了文字の1文字目と2文字目を指定する。
実は Emacs で3文字以上からなるコメント文字を扱うのは結構面倒臭い。
どこかにお手軽に扱える elisp が転がってないかな?
(defvar hoge-mode-syntax-table nil)
(unless hoge-mode-syntax-table
(setq hoge-mode-syntax-table (make-syntax-table))
(modify-syntax-entry ?@ ". 13" hoge-mode-syntax-table)
(modify-syntax-entry ?c ". 24" hoge-mode-syntax-table))
(defvar hoge-font-lock-keywards nil)
(defun hoge-mode ()
(interactive)
(kill-all-local-variables)
(setq comment-start "@cs")
(setq comment-end "@ce")
(set-syntax-table hoge-mode-syntax-table)
(set (make-local-variable 'font-lock-defaults) '(hoge-font-lock-keywards))
(setq mode-name "Hoge")
(setq major-mode 'hoge-mode))
676 :
675 :2005/11/01(火) 03:17:06
強引にやってみた。 複数行にマッチするのは font-lock で激しくすすめられてないっぽいけど、おーけー としとく。 実は hoge-font-lock-comment-matcher は内部で comment-start, comment-end を使う ようにすると色んな mode で使えて嬉しいかもしれないとか思った。 (defvar hoge-font-lock-keywards nil) (defvar hoge-font-lock-syntax-keywords '((hoge-font-lock-comment-matcher (1 "!") (2 "!")))) (defun hoge-font-lock-comment-matcher (limit) (let (beg end) (when (re-search-forward "@cs" limit t) (setq beg (cons (copy-marker (match-beginning 0)) (copy-marker (match-end 0)))) (when (re-search-forward "@ce" limit t) (setq end (cons (copy-marker (match-beginning 0)) (copy-marker (match-end 0)))) (set-match-data (list (car beg) (cdr end) (car beg) (cdr beg) (car end) (cdr end))) t)))) (defun hoge-mode () (interactive) (kill-all-local-variables) (setq comment-start "@cs") (setq comment-end "@ce") (set (make-local-variable 'font-lock-defaults) '(hoge-font-lock-keywards)) (set (make-local-variable 'font-lock-syntactic-keywords) hoge-font-lock-syntax-keywords) (setq mode-name "Hoge") (setq major-mode 'hoge-mode))
非同期にHTTPサーバとXMLなどのデータをやりとりする仕組みで、 ユーザイベントに動的に反応して、半リアルタイムに挙動を変える ようなUIのelispって何かある?
ajax ですか?
emacs-w3m
680 :
677 :2005/11/02(水) 13:49:44
>>678 Ajaxのelisp版を想定中。alax? aelax?
>>679 少なくとも現状のままでは、「非同期」ではなく動的ではないと思う。
slime
682 :
名無しさん@お腹いっぱい。 :2005/11/12(土) 21:34:51
リストを連結する関数は何ですか。 RubyでいうとArray#joinです。
re-search-forward で「カーソルのある位置から」マッチさせることって出来ないの? (looking-at REGEXP) 使ってみたけど、(match-string 0) 使ったら (args-out-of-range 0 0) って言われた。
(with-temp-buffer (insert "hoge") (goto-char (point-min)) (and (looking-at "hoge") (match-string 0))) => "hoge"
普通にre-search-forwardするのと、事前にチェックした(point)を組み合わせる。
save-excursion と save-current-buffer の使い分けはどうすればいい?
pointやmarkをどうするか次第
faceを少しだけ明るく(もしくは暗く)する関数ってないですか? (color-values "color-name")した値を加工して、そのままset-face-backgroundしようとしたら stringpじゃねぇよボケ、と言われました。何か良い方法はないでしょうか。
690 :
689 :2005/11/18(金) 11:51:57
質問age
28秒
なんで実際に書いたコードを隠すんだ? stringp云々って根本的におかしなことやったとしか思えないんだけど
693 :
688 :2005/11/18(金) 13:31:54
>>692 根本的におかしいことやってるのは分かってるので、何か良い方法を教えてほしい、
という質問なんですが。
(defun more-bright-color (color)
(mapcar '(lambda (n) (* n * 1.1)) (color-values color))
)
(make-face 'brightly-face)
(set-face-background 'brightly-face (more-bright-color "khaki"))
> Debugger entered--Lisp error: (wrong-type-argument stringp (65535 65021 39578))
>>693 色は、"#00aaff"みたいにすればいいんだよ。
これでいいかな。 (defun more-bright-color (color) (apply #'format (append '("#%02x%02x%02x") (mapcar '(lambda (n) (floor (min 255 (/ (* n 1.1) 256)))) (color-values color)))))
697 :
688 :2005/11/18(金) 14:16:40
>>694 なるほど。
>>696 今手元で同じような関数が出来た。目的を達成することが出来ました。
ありがとう。
>>696 brighter だっつってんだろが。
"more bright" なんて英語通じないっつーの
不自然だと感じるけど通じるよ
>>698 "brighter" とだけレスされても日本語通じないっつーの。
「brighter だと英語としておかしい」とキチンと書けばいいのに。
>700 よっぽど悔しかったんだね
>>701 おまいも大人げないよ
スレが荒れるからヤメれ
703 :
696 :2005/11/18(金) 16:45:33
Perlのjoinにあたる関数ってないですか。今はこうしてます。 (defun join-string (s seq) (reduce '(lambda (x y) (concat x s y)) seq))
mapconcatか。reduceなんてシラネ。
例えば emacs yarou hello emacs kun to lisp yarou のようなラインがバッファ内にあったと仮定して、 M-x foo を実行すると Line containing: というプロンプトがミニバッファにでて、 emac li <RET> と打ちこむと、 "emac" と "li" のサブストリングを含むライン (この場合は 2行目) を occur などでマッチする関数 foo がほしいのですが。。。作って。。。
正規表現でいいじゃん
正規表現でいいだろう
正規表現でいいような気がする
正規表現でいいと思われ。
正規表現じゃ大変だ
正規表現ってのはどうだ
もういいから。
もういいよ。
もういいな。
(defun foo(str) "HG" (interactive "sLine containing:") (if (not (string= str "emacs li")) (message "not found!") (if (not (re-search-forward "emac.*li" nil t)) (message "not found!!") (message "found!") )))
ライブラリのリビジョンに応じて設定を変えたい場合なんかに便利かなと (setq get-revision-number-line-limit 20) ;; 1.1.1.1 には対応してない (defun get-revision-number (library) (let* ((file (locate-library (concat library ".el"))) (buf-exists-p (get-file-buffer file)) (buf buf-exists-p) rev) (unless buf-exists-p (setq buf (find-file-noselect file))) (save-match-data (with-current-buffer buf (save-excursion (save-restriction (widen) (goto-char (point-min)) (let (search-limit) (forward-line get-revision-number-line-limit) (setq search-limit (point)) (goto-char (point-min)) (when (re-search-forward (concat "$Id: " (regexp-quote (concat library ".el")) ",v " "\\([0-9]+\\.[0-9]+\\)" " ") search-limit t) (setq rev (string-to-number (match-string 1))))))))) (unless buf-exists-p (kill-buffer buf)) rev))
718 :
名無しさん@お腹いっぱい。 :2005/12/14(水) 00:43:34
emacs-version "22.0.50.1" Diredのバッファ名のように、 mode-lineのcvsのリビジョンの部分だけ色を変えたいのですが、 (setq-default mode-line-format `(" " ;;mw32-ime-mode-line-state-indicator mode-line-mule-info mode-line-modified " " mode-line-buffer-identification (vc-mode ,(propertize vc-mode 'face '(:foreground "blue" :background "red"))) " " global-mode-string (-3 . "%p") " " "-%-")) これを.emacsで評価すると、mode-lineでは.emacsのリビジョンが赤くなりますが、 別のバッファにうつっても.emacsのリビジョンが赤くなってしまいます。 着色しないときのようにファイル毎にそれぞれのリビジョンを表示するには、 どうしたら良いでしょうか?
(setq-default mode-line-format '(" " ;;mw32-ime-mode-line-state-indicator mode-line-mule-info mode-line-modified " " mode-line-buffer-identification (vc-mode (:eval (propertize vc-mode 'face '(:foreground "blue" :background "red")))) " " global-mode-string (-3 . "%p") " " "-%-"))
>>719 できました。便利な属性(?)があるんですね。
どんなタイミングでevalされるの?
Vim の dircolors.vim みたいな ~/.dir_colors 編集用メジャーモードを作ったので晒してみます。 begin-base64 644 dircolors-mode.el.gz H4sICJBGp0MAA2RpcmNvbG9ycy1tb2RlLmVsAK1Y0W7bNhR9z1cQ6oPlDfLk 8DoG4qBBazuNUccqHD/sQUChWHSmWZYySU4aYOi/DFCH/cMG7HFFCwzYZwx7 2/YBIyXbSUhfUwbmIBAl3nPu5Tk0KbPT6RA/SKZxGCeptYh91mAhsciF922c EHFPZrzB/CALomvy/qsGj35bhh8cmD6bTZdpFi8kEuubOJ6TKAgPCDE2XSWf 6GoYvOM4u79hpCbuxd11Ei9vSM33Mq9eUs+8KZOJ74LQn3qJb4lODquZZkbM Y14kEwSRT4xnZ/xj20a9Xhcl1AuuWy/ZScUT7+jdUZBtPy3lSdatgKZU+1Uc +iTT40DC8cGyJAwiVgXc2rfKtpQtiG5ZkjLrNvBZXCEjtXdZBLb4M/QssliS 0bYtG72V5XAXi22r02UrC9130m1lkW2UahHVVGBp6XSpxHKk06USizxVFF2q sIA8X6686fyJLlXUBeXL9Zil6nwBeb5ItVRzGmSnpVr+D5aq8wXk+aLoUolF ni+KLpVY5Pmi6CKzbFm8V8uusmyvnuO4JoJranCA4ECDayG4lgbXRnDt3TiK 6EI1ulBEF6rRZbW0qrhDDY4iOKrBIT5QjQ8U8YFqfFgtkSruSIND/KMa/wDx DzT+AeIfaPwDxD/Q+AeIf6DxDxD/QOMfIP6Bxj9A/AONf4D4B2v/MGB6H2Xe O8sLgzQrlzjj7XuDNIhxZ9SJefpMNE+KphuJ9nO+1m15TX7M0zDwfLM4yqww ns6tObu/ixM/XWV13RPXNSf98YXrft91hs6YX/uDV+eTl4MJbzpvJgNndOm6 ddd9LgpUmFYjJfyzphs544sXQ44+Gwz7/NIbCNbhYPRaMI7fnL8Y8cbF4PJy MHpVhJ05/HLpdEVAzymKeDkUN93zoqCv+939Shj2zyZdpyeyj8VoVu3+qFe2 qnJ94bqNU9e9+3IVv/v9f41q7I04se3t8Zut6iGyiUQ2lUhAIkGJbCGRLSWy jUS25UiKjIgqI6LIiKgyInqIRB4qkRSJpEokohJVVKKISlRRiR4hkUdKJKIn VfQERE9Q9ARET1D0BERPUPQERE9Q9ARET1D0BERPUPQERE9Q9AREz/WSvG0V VVfHXWvpwrtBDi04mndusMtIgvJf1AJV5dhEHH2YQZSxxJtmwa3YSviDeRCG fLEPRbFeaPHiAu8qZKmgNZf8d3f5XFSoFl1SLLw5k+Ck9iAAL9tbhlnJmLLs O6L2FWKLT6dDJk7POSb5p/yf/LcnuxHJP3/649d/879//pj/mH/88NOHP3/4 Jf/MI//Kfz99RFEztXuVkLv437GLkit2HUQRF9KKZ5Y48KjXN1n2yVFpK96a bSNZkSLyFowYvXVe40HRhfC/nBDSi0MRkyyj4mQsJbWMvcsejspECvMmicXh ior8Dy4122KlEwAA ====
723 :
722 :2005/12/20(火) 09:04:41
それで、いくつか作ってて疑問な点があったので聞いてみたいのですが * 123行目で SYNTAX-ALIST 引数に dircolors-mode-syntax-alist を使うと (直前でコメントアウトしてあるコードのことです) font-lock が発動した際に型が違うと言われてしまうのですが、これは何故なんでしょうか? * defface で face を定義した後、同名の変数を defvar する操作は必須ですか? 自分の環境では省略しても問題ないように見えるんですが、ネットで見掛けるコードでは 何故かわざわざ defface, defvar を並べて書いてるのでちょっと不安です。 必要なのであれば、その理由も教えて頂けるとうれしいです。 というかもしかして face と普通の変数ってスコープが違ったりしますか?
724 :
722 :2005/12/20(火) 09:08:14
すみません、
>>723 で嘘書いてしまいました。
defface の後の defvar を省略すると face が有効にならないみたいです。
これって何故なんでしょうか?
deffaceはfaceの定義、defvarは変数の定義 たとえば dired.elの (defface dired-header '((t (:inherit font-lock-type-face)))) (defvar dired-header-face 'dired-header) dired-headerという名前で定義したfaceを用意しておいて、 dired-header-faceに代入しておく。 実際にfaceを決定するところではdired-header-faceを使用する。 elispコード内でdired-headerを直接指定していたら、 もしもあとでdired-header-faceを変えたくなったときに、 dired-headerを上書きするかコードを書き変えないといけないけど、 変数を経由するようにしておけば、別のfaceを定義してその変数に代入してあげればいい。 そういう意味で、paren.elなんかはfaceを直接overlayしているので、 faceの色や字体を変えたいときは、set-face-x系を使って faceの設定を上書きしてあげないといけないね。
> そういう意味で、paren.elなんかはfaceを直接overlayしているので、 > faceの色や字体を変えたいときは、set-face-x系を使って > faceの設定を上書きしてあげないといけないね。 それで何か不都合あんの?
ほとんどの人は上書きしてしまって不都合ないと思いますよ。 起動後にfaceを変えるってあまりないですよね。 でもまぁ、setqでちょこちょこ変えたい人には箱があったほうがいいですし、 それくらいのレベルだと思います。
はじめまして。Emacs LISPの勉強をしている高校生です(はじめたばかりです。すみません)。 カレントバッファに対して文字列の検索や置換をする関数は見つけられたのですが、 文字列そのものを引数にとるような同様の関数はありますでしょうか。 具体的には、ある入力文字列から、決められた文字を取り除きたいのです。
M-x apropos その程度で質問してるようじゃ先が思いやられるよ
なんでそんなに見下した態度取るんだ? 高校生か、がんばれよーでいいじゃん。
replace-regexp-in-string とかでええのか? または string-match して substring してみたり適当に
read-string が知りたかったりして。
オレも最初 read-from-minibuffer かと思った
>731 replace-regexp-in-string、これです!ありがとうございました。 >729 今後はしばらく"M-x apropos"で調べていけそうです。Emacs LISPのこういうインタラクティブな感じがとっても好きです。 しょーもない質問をしてすみませんでした。そしてありがとうございました。 その他の方々もありがとうございました!
time-stamp.elを使ってるとundoの時に不満ない? timestamp部分はundoできなくなるけど、こんな事してみた。 (defadvice time-stamp-once (around cannot-be-undone activate) (let ((buffer-undo-list t)) ad-do-it)) 後から気付いたんだけど、redo.elを入れてたのをすっかり忘れてた。 ちゃんと使っていればそのような不満はあまり感じなかったかもしれない。
>>735 Meadow meme だかに似たようなのがあったね。
738 :
名無しさん@お腹いっぱい。 :2006/01/12(木) 21:14:55
739 :
名無しさん@お腹いっぱい。 :2006/01/13(金) 03:30:34
行の中で最初の「空白/タブではない文字」にカーソルを移動したいんですが、どうすればいいですか?
>>739 see back-to-indentation
>>738 734じゃないけど、mode-info は最新の CVS の Emacs だとコンパイルできない
ようです。過去にこのスレでパッチが出ていたんだけど、もう古くなっていま
した。。。最新のパッチがあれば投下して頂けないでしょうか?
url.el の使い方が分からない…。
(let ((url (url-generic-parse-url "
http://www.example.org/ ")))
(url-retrieve url (lambda ()
(url-store-in-cache (current-buffer)))))
途中送信してしまった…。 これでキャッシュの保存をしてくれるかと思ったけどしてくれなかった。 どうすればいいんだ???
745 :
名無しさん@お腹いっぱい。 :2006/02/04(土) 21:09:59
>>745 おまえの日本語も技術の途切れて壊滅状態だな。
>>745 その題目って、何度も再発明されてるな。
単に再発明した人がいるというだけなのにその帰結かよ。
っていうか、バグバグじゃん。ちゃんとテストしてないな。
まぁblogはある意味ここよりもゴミが多かったりするし。
しかしまあはてなでEmacsはやりだしたってので それじゃ俺も使ってみるかってな人間が増えるのはいいことだ。 うざい質問も増えるかもしれないけど そのうち育ってステキなパッケージ作ってくれるやもしれんし。
バグを見つけたなら、指摘コメントしてやるといいよ。
>6のtexinfoが {}のエスケープが無くてmakeinfoできないんだけど、 俺だけ?パッチ作ったんだけど、作者に送った方が良い?
754 :
名無しさん@お腹いっぱい。 :2006/02/07(火) 08:26:36
使ってはいないけど、たまに参考にしたり。 コード、ドキュメント共に。
756 :
名無しさん@お腹いっぱい。 :2006/02/09(木) 12:31:30
(standard-display-ascii ?@ [?#]) を評価すると,(当然ですが) モード関係なしで全ての @ が # で表示されてしまいます. ここで,上の動作をある特定のモードのみでやるにはどうすればよいのでしょうか?
(make-local-variable 'display-table)
>>757 (make-local-variable 'buffer-display-table) だろが
mcomplete を使っている諸君! 例えば、例えばだ… M-x describe-function を実行し、 mcomplete の [Substring match] に向かって process-coding-system と入力するとエラーが出るよな? ELisp 勉強中の俺が、 恥を覚悟でパッチを作ってみたんだ。 あってるかな? --- mcomplete.el +++ mcomplete.el @@ -1281,8 +1281,10 @@ (tails-alist (mapcar #'(lambda (item) (string-match regexp item) (list (substring item (match-end 0)))) - completions))) - (concat str (try-completion "" tails-alist))))))) + completions)) + (comp (try-completion "" tails-alist)) + (tailstr (if (eq comp t) "" comp))) + (concat str tailstr))))))
うー、そのパッチはとてもただしいのだが、 ここにはってしまったためにさいようできません。。。
(ノ∀`)アチャ-
マルチライセンスで別のところにも貼ればいいんでは。
763 :
759 :2006/03/02(木) 23:14:08
GPL に違反してしまうのか? パッチという形式をとっているからいけないのか? 無知は罪だ。勉強してから出直します。ごめん。
navi2ch スレでもそういう認識になってるけど、 例えば匿名で運営してる自分のウェブページに掲載したらどうなるの? 初出の出所が不明だから不許可になる? そもそも著作権侵害は親告罪だし、 メーリングリストでのパッチだって完全な出所証明は非常に難しいし、 出所が証明できたからってどっかからぱくってないことは証明できないし、 採用者の了見しだいでなんとでもなりそうな気がするよ。
>>764 出所不明とかそういう問題じゃないよ。
2ch だと、投稿時にいくつかの項目に対して同意を求められるでしょ。
この中に、運営が指定する第三者に対して、一切の権利を許諾しないって項目がある。
これは GPL に矛盾するから、これに同意して 2ch に投稿されたものは、 GPL ソフトウェアにマージできないの。
自分のウェブページとかの場合なら、 GPL に矛盾する規定をしてなければ問題ない。
だから navi2ch スレとかだと、そういう規定がない Wiki とかを利用してる。
便乗質問させてください。 すれ違いかと思いつつ、前から聞いてみたかったので書きます。 gzip & base64 とかでencodeして張った場合、どうなるんでしょう。
GPL と 2ch の規約は矛盾するだろうけど、 じゃあ、そもそもが GPL のコードを 2ch に張るとどうなるのかと考えると、 それは GPL 違反ではあるが、 張ったがために 2ch がコードの利用の権限を持つようになるわけじゃないよね。 ということは、本人が GPL として作ったコードを 2ch に張った場合、 張った行為は GPL あるいは 2ch 利用規約違反だけど、 張っただけで 2ch のものになって GPL として使えなくなるわけではないんでは?
2ch にあるパッチを当てた物を GPL として配布してもかまわないと思う人は 自分で配布すればいいじゃないか。 片手間で開発してるような場合、GPL 違反だと言ってる連中がいるってだけで 面倒そうだから取り込むのはやめようって気になるんじゃないかな。
思うんなら自分でやればっていわれても、話にならないな。 まあスレ違いだしやめよう。
誰かが別の場所でGPLで公開してるパッチを第三者が勝手に 2chに貼った場合とか
そのパッチを本人がプロジェクトに寄付する気になったとき とりこめるかどうか
第三者が何かしたからといって、パッチ作製者の権利が失われるわけないじゃん。 そうでないなら、ML とかに流れてるパッチを 2ch に転載しまくるだけで そのプロジェクトの開発を妨害できちゃうよ。
匿名サイトに置いてあるパッチを2chに貼った場合、 本人によるものか別の人によるものかも分かんねーしな
強いて言えばパッチの作者に 「ヘンなシバリのある掲示板に勝手に貼るなよ」 って文句言われる可能性はあるな。
文句言われる言われないはどっちでもいい。 問題はそのパッチをマージする事が可能かどうかだ。
マージするかどうかは 開発元とパッチ作者との間の問題。 2ch に貼るのは 2ch 管理人と投稿者とパッチ作者の間の問題。 両者に関係はない。
ある変数に EUC-JP や Shift_JIS などの文字コードの文字列が入っている状態で、 その文字コードを UTF-8 に変換したい場合は、どうしたら良いのでしょうか?
ccl
>>781 ありがとう。
でも、全然使い方が分からないわ orz
783 :
名無しさん@お腹いっぱい。 :2006/03/21(火) 09:49:25
以下の機能をmajar-modeに実装する方法でつまづいています。 「一行につき全角文字20文字まで、それを越えたら自動的に折り返して次の行へ」 行幅を全角20文字で整形したいだけなのですが・・・ truncate**系 とか fill-** 系とかの変数をうまく使えばいいのだろうかと試行錯誤しているのですが、錯誤ばかりで自滅気味です。わたしアタマワルイ。 だれか助けてー。
>>785 先に決め事が必要になる。
(1) 半角文字の扱い
(2) 空白文字の処理
(3) 禁則処理(行頭、行末)
まともにやると、かなりめんどい。
>>785 単に
(set-fill-column 40)
(auto-fill-mode t)
って話?
>>786 みたいな問題もあるし
仕様を見直した方がいい気がする。
788 :
ゼウス :2006/04/03(月) 13:19:19
おい、お前等
CやC++ファイルの編集での普通(gnuのモード)のインデントで、 字下げが少ない時はスペースでインデントしてくれるんですが、 tab幅以上の字下げの時にtabでインデントしてしまい困ってます。 これをスペースでインデントするようにするにはどうしたら良いでしょうか。
(set-variable 'indent-tabs-mode nil) (setq-default indent-tabs-mode nil) …10年以上使ってるけどこれでいいかな
791 :
名無しさん@お腹いっぱい。 :2006/04/12(水) 08:06:40
eshell 上で mysql の返答 (standard output) がしっかり 表示されるようにするにはどうソースを修正したらいいか教えろ お前等ならわかるだろ
やっぱわかんねーのか。。。 eshell のソースはかなり複雑だから仕方ねーのかもな
わかるだろうけどおまえのためにわざわざ調べる気にはならんってだけ。
>>793 お前自分の言ってる事矛盾してる
知ってんだったら調べる必要ないだろが
調べればわかるんだろ
各種*.confみたいな 項目: 要素 的設定ファイルを読み込んでalistに溜め込んで行くようなのを考えてるんですが なかなかすっきりしません。 一項目一要素でとりあえずいいんですが、 やっぱりなにかしらのバッファで開いてbuffer-substringしていくしかないんでしょうか。
しかないっつーかEmacsのファイル入力はバッファで開くのが普通なんだが。
バッファで開かないでファイルをlispでストリームとして扱う方法ってあるの? 数百メガの巨大ファイルをいじるとき便利っぽいけど。
tmpなバッファにinsert-file-contents。 find-file-noselectするよりは処理が軽いそうな
>>798 Common Lisp な xyzzy ならできるが、Emacs は不可能。
xyzzy は Common Lisp じゃない。cl ですら実装されてるのに (mapcar (lambda (x) (typecase x (integer "整数") (string "文字列") (t "その他"))) '(10 3.3 "ほげ")) こんなのが動かないし。
>>801 それだけ?他にもあるでしょ。おせーて。
-batch で別個に動かすのはどうでしょう?
>>798 insert-file-contents系で分けて読むとか、catあたりをstart-processしてfilterで読むとか。
テキストの場合マルチバイト文字の切れ目の処理が必要になるとちょっといやらしいかも
805 :
名無しさん@お腹いっぱい。 :2006/06/24(土) 12:07:52
>>801 適当だけど。
(defmacro?typecase?(check?&rest?type-list)
??(let?((#1=#:case))
???????(dolist?(item?(reverse?type-list)?#1#)
?????????(push?(if?(eq?(car?item)?t)
???????????????????`(t?,(cadr?item))
?????????????????`((subtypep?(type-of?,check)
?????????????????????????????',(car?item))
?????????????????????????????,(cadr?item)))
???????????????#1#))
????(cons?'cond?#1#)))
806 :
805 :2006/06/24(土) 12:12:09
あらら。。もう一回。 (defmacro typecase (check &rest type-list) (let ((#1=#:case)) (dolist (item (reverse type-list) #1#) (push (if (eq (car item) t) `(t ,(cadr item)) `((subtypep (type-of ,check) ',(car item)) ,(cadr item))) #1#)) (cons 'cond #1#)))
未編集のリードオンリーのバッファ上で、何かあるタイミングで、 recenter すると変更フラグが立つことがある。 という現象に遭遇した人いないですか、とか聞いてみようと思った。 が、recenter の前に、(sit-for 0) を入れたら解決したみたい。
Emacs21とか22とかになると、デフォルトでいろんな機能が 組込まれてしまったので (occurとかgrepとか、検索もパワーアップしたり)、 新しい機能を作る機会が減って、最近このスレッドが寂しいのかなぁ、 などと思ったりした。 まとめサイトや紹介サイトも増えたしね。 ネタが出てくることを願って期待sage。
ネ(・∀・)申!
w3みたいなもの? 動かせない(´;ω;`)
813 :
<sage> :2006/11/06(月) 19:07:50
この板の趣旨とは、ちょっと内容がずれてますが、教えて下さい。 shell-command-to-string 関数を使って、perl を呼び出そうとしていますが、 日本語引数を渡すとどこの段階でか分かりませんが、文字がばけます。 (shell-command-to-string "c:/Perl/bin/perl.exe e:/work/0my/scripts/test.pl てすと表示") で、「test.pl」 では、 my $outfile = "e:/work/0my/scripts/test.txt"; my $out; open ($out, "> $outfile") || die ("couldn't open $outfile to write into."); print ($out $ARGV [0]); close($out); で、"test.txt" を shift_jis とかで開いても化けています。 DOS 上で日本語引数は、問題なく処理されるので、Elisp から、 perl に渡されるときに壊れると解釈していますが、どうすればいいのでしょう?
>>813 > perl に渡されるときに壊れると解釈していますが、どうすればいいのでしょう?
表の後に\を付ける、とか?
815 :
sage :2006/11/07(火) 00:20:27
>>814 レスサンクス。
表のあとに\マークってことは、「てすと表\示」って感じにですか?
日本語文字は何を入れてもだめなので、それでもだめだと思います。
気になるのは、エンコーディングがどうやって認識されるかです。
elisp -> shell -> perl と引数として指定された文字列が渡されると思いますが、
このプログラム間のエンコードは、どうやって指定するのかが、よく分かりません。
おそらく日本語 OS 下では、デフォルトが shift_jis になると思いますが、
これは、elisp からシェルの間も同じかな?
process-coding-system とか coding-system-for-write とか?
817 :
名無しさん@お腹いっぱい。 :2006/11/07(火) 00:45:40
>>816 さんありがとう
(setq coding-system-for-write 'sjis)
でうまくいきました。m(_ _)m
>>818 この変数に対して値をグローバルに設定すべきではないということですね。
了解、let を使います。
emacs上でschemeの勉強しているんですが、 emacsのコメント行のインデントのしかたが気に入らないので 直したいと思っているのですが、 どこから始めたらいいのか、 さっぱり分かりません。 とりあえず scheme-modeが定義されている場所の調べ方を教えていただけませんか?
>>820 > scheme-modeが定義されている場所の調べ方を教えていただけませんか?
find-function
> emacsのコメント行のインデントのしかたが気に入らないので
確かに comment-dwin は腐ってるからな
822 :
名無しさん@お腹いっぱい。 :2006/12/14(木) 22:57:50
823 :
名無しさん@お腹いっぱい。 :2007/01/14(日) 02:16:27
初歩的な質問で聞き難いのですが教えて下さい。 バッファ中の文章の特定の文字を置き換えるようなコードを 作りたいのですが、condを使うのかifとprognを使うのかよく分かりません。 たとえば、文章中の”Red Hat”なら”赤帽”、”Vine”なら”葡萄”、”Windows”なら ”窓”というようにバッファ中の文章を変えたいです。
>>823 replace-stringじゃだめなん?
複数の文字列を一括して置換とかかな
826 :
名無しさん@お腹いっぱい。 :2007/01/14(日) 02:33:07
>>824 検索関数(search-forward)などでマッチした文字列を
replace-matchなどで変えようと思ったのですが、条件分岐が
よくわからなくて・・・
>>825 たぶん、そんな感じです。
まずは仕様をきっちり決めれ。 「たぶん、そんな感じ」じゃなんだかわからん。
基本事項なんだぜ? (info "(elisp)Conditionals") (info "(elisp)Combining Conditions")
829 :
名無しさん@お腹いっぱい。 :2007/01/14(日) 02:49:31
ありがとうございます。もう少し読んでみます。
830 :
823 :2007/01/14(日) 03:25:03
レス下さった方々、どうもありがとうございました。 非常に無駄な処理をしていますが、望む結果が得られました。 (defun change-font () (interactive) (let ((p (point))) (goto-char (point-min)) (while (not (eobp)) (if (search-forward "Led Hat" nil t) (replace-match "赤帽") (forward-line 1))) (goto-char (point-min)) (while (not (eobp)) (if (search-forward "Vine" nil t) (replace-match "葡萄") (forward-line 1))) (goto-char (point-min)) (while (not (eobp)) (if (search-forward "Windows" nil t) (replace-match "窓") (forward-line 1))) (goto-char p))) 過去ログ読んで勉強してきます。
一行に2回出てきたらだめじゃね?
検索語を \\| で分けて match-string で抜き出し cond で振り分けろ
833 :
823 :2007/01/14(日) 13:38:34
>>831 いえ、ちゃんと置き換えてくれました。
>>832 ご教授ありがとうございます。しばらくにらめっこします。
教授じゃなくて教示
>
>>833 > > 一行に2回出てきたらだめじゃね?
>>831 > いえ、ちゃんと置き換えてくれました。
ホントに?
試していないけど VineVine とかいう行があったらダメっぽく見える。
`XWindows' も `X窓' になりそうだし、`divine' も `di葡萄' になりそう。 (後者は `case-fold-search' の値によるけど)
837 :
823 :2007/01/15(月) 19:50:39
>>835 >>836 ご指摘ありがとうございます。例外処理(?)を考えていませんでした。
まだ
>>832 さんの方法で出来ていないしどんだけバカなんだろ私・・・
自分で頑張れてるのだから、頭が悪いとは思わないけどな。
やりつけないことは何でも最初は大変だ。
>>832 ,
>>836 とも正規表現が必要だし。
まず
>>830 の改善点としては(forward-line 1)、これは置換が終わったら次へ進む
ってことで入れたのだろうけど、次の行じゃなくて置換したテキストの直後に
移動すれば十分な筈。ところがreplace-match自身が
Leave point at the end of the replacement text.
という動作をしてくれる。
>>836 は、正規表現を使うと「単語の先頭」という位置にだけ合うパターンが
使えるのでそれを使う。必要なら同様に「単語の末尾」というのも使える。
正規表現による検索はre-search-forward.
ここまでで一応、要求は満たされるんじゃないのかな。
>>832 は正規表現を使うと「AまたはBまたはC」にマッチするパターンというのが
書ける。それで検索して、その後でそれがAだったかBだったかCだったかを調べ、
対応する文字列(A'なりB'なりC'なり)に置換するという方法。
これだとバッファの先頭から検索を始めるのが一回で済む。
save-excursion も教えたれよ。
replace-regexp を使う。
>>840 This function is usually the wrong thing to use in a Lisp program.
(defun foo (alist) (let ((regexp (regexp-opt (mapcar #'car alist) 'words)) (table (make-hash-table :test 'equal)) (normalize (if case-fold-search #'downcase #'identity))) (dolist (pair alist) (puthash (funcall normalize (car pair)) (cdr pair) table)) (save-excursion (while (re-search-forward regexp nil t) (let ((new (gethash (funcall normalize (match-string 0)) table))) (replace-match new))))))
ほとんどの漢字も普通にword syntaxだから全然だめだな
俺、elispでハッシュとか使ったことねーや
オレも make-hash-table ってのははじめてみたけど、 elispのハッシュってのはcdr要素数1のalistと解釈して、だいたいおk?
論理的にはOKだけど、計算量がぜんぜん違うよ? 何かアルゴリズムの入門書を読んだほうがよさげ
最近知ったんだけど、バイトコンパイルした結果って 直接実行もできるんだね。 (defun fn(x) (* x 2)) (byte-compile 'fn) #[(x) "\211\\\301\\\207" [x 0] 2] (#[(x) "\211\\\301\\\207" [x 0] 2] 10) 20
ワロタ つくづくエディタなんだな
つまらん
お前等の中にシリコンバレーで働いてる人いる?
emacsで文字のフォントの大きさを変えるにはどうしたらよいですか?
もしemacs lispがstatic scopeだったら果たしてどうだったろうか
854 :
名無しさん@お腹いっぱい。 :2007/03/28(水) 18:57:13
(゚Д゚≡゚д゚)
>>854 うちの .Xdefault には, 未だに
> Emacs.Font: fontset-12 bold
> Emacs.Fontset-0: -shinonome-gothic-bold-r-*-*-12-*-*-*-*-*-fontset-12 bold
> Emacs.Fontset-2: -shinonome-gothic-bold-r-*-*-14-*-*-*-*-*-fontset-14 bold
...
> Emacs.Fontset-11: -shinonome-gothic-medium-r-*-*-24-*-*-*-*-*-fontset-24 medium
てなものが残ってて機能しているが...
856 :
名無しさん@お腹いっぱい。 :2007/04/12(木) 10:48:03
emacs ilspでwebプログラミング可能?
>>856 「webプログラミング」っていうとどの辺の話?
AllegroServe とかそういう話かなぁ。 elisp じゃないけど。
elservなんてのがあったなー。 もっとまともなのも多分あるだろうけど興味無いので知らない。
861 :
名無しさん@お腹いっぱい。 :2007/04/12(木) 15:16:27
emacsがwebサーバーになるのですね。もはやなんでもありですね。 elispはphpで作成するのと同様のwebプログラミングは可能でしょうか? 掲示板とか、アンケートなど。
>>861 アクセスのたびに Emacs 呼ぶってこと?
まぁ不可能じゃないんじゃね。
やる気は起きないけど。
>>859 じゃだめなん?
単純にphpスクリプトを書けるか?と聞けば
遊ばれずに済んだであろう
>>861
そういう質問じゃないっしょ。
>>861 もちろん同様のことは可能。もちろん同様にはできないけどな。
定期的に M-x hoge を実行するにはどうしたら良いのですか? 答えが駄目なら、誰かヒントだけでも教えてくれないでしょうか。
timer
23 という数値を16進数数値として扱い、 "35"にする方法はどんなのがあるでしょうか? (let ((n 23)) (format "%d" (string-to-number (number-to-string n) 16))) これは思いつきましたが、もちょっと簡単にならんかな、と。
じゅうぶんかんたんだとおもう
>>868 なんで元が数値なんだろ。
3a とかの入力は考えなくていいの?
>>870 (read (concat "#x" n))
か。なんかびみょーに感じる。この表記がいけるのってemacs21以降あたり?
数値を concat できたのか…
ごめん。emacs21からはムリなはず。
875 :
866 :2007/05/20(日) 00:46:22
駄目だ分からない。 run-at-time 使おうにも hoge をどう指定したら良いのか不明……lisp は難しい orz 例えば、.emacs にどう書けば、自動で M-x hoge できますか? ; emacs の引数から起動するのではなくて。 あとは、start-process と while と sleep-for 辺りを組み合わせれば可能な気はするんだけど……さっぱり orz 週末に数時間しか PC に触れられないのは、現代社会をは思えない環境 orz
run-with-timer 使うんじゃないの? 何がわからないのかがよくわからない
もしかして M-x から指定してるものが関数名だってことを知らないとか?
(setq hoge-timer (run-with-timer 0 1 'hoge)) (defun hoge () (interactive) (message (current-time-string))) (defun hoge-cancel () (interactive) (cancel-timer hoge-timer)) M-x hoge =>Sun May 20 03:56:18 2007
879 :
lispp? :2007/05/20(日) 14:40:44
LISPを学習して1週間目の者ですが、 (progn (setq wara 10) (setq waru 0) (/ wara waru) ) でエラーが発生します。 (if (equal waru 0)...)でなくて、catch??? throw???のような例外処理で対応したいのですが、 可能でしょうか?
>>879 condition-case
elisp.infoのControl Structuresを参照。
Lispではcatch/throwの例外処理とsignal/condition-caseのエラー処理は別物
である点に留意されたし。
882 :
名無しさん@お腹いっぱい。 :2007/05/20(日) 17:12:06
xyzzy使っているのですが、 condition-caseで関数がないと表示されます。
板違い
884 :
名無しさん@お腹いっぱい。 :2007/05/28(月) 20:48:43
EmacsでのLispのプログラムについての質問です。 リストAとして((a b c) (d e f) (g h i))というリストがあるとして、このリストの中の要素であるリストの 最後の要素を返す関数を作る場合どうしたらいいでしょうか?
>>884 各要素の cdr を見ていって、それが nil なものを返せばいいんじゃないの。
そういう話でない?
>>884 (car (last (car (last '((a b c) (d e f) (g h i))))))
887 :
名無しさん@お腹いっぱい。 :2007/05/28(月) 21:47:12
884の補足ですが、 リストAを引数として(c f i)を返すような関数を定義したいのです。 また、リストAの要素がもっと多い場合にも対応できるようにしたいのです。
>>887 (mapcar (lambda (x) (car (last x))) A)
889 :
名無しさん@お腹いっぱい。 :2007/05/28(月) 22:00:23
>>888 見たことないコマンドが多いのですが・・・。
初心者なのでもう少し分かりやすくしていただけるとありがたいのですが。
標準の関数くらい自分でしらべろよ。
891 :
名無しさん@お腹いっぱい。 :2007/05/28(月) 22:17:51
そういった関数を使わないで定義したいんです。
lambda とか mapcar 使わないで lisp のプログラム書くのは 逆に難しいと思うぞ。
それは無理な話だ
おk。mapcar も lambda も car も廃止してやったぞ。last は使わせてくれて… (require 'cl) (defun fun-887 (lst) (loop for element in lst collect (first (last element)))) last も禁止ならこうだ。 (require 'cl) (defun fun-887 (lst) (loop for element in lst collect (first (reverse element))))
896 :
名無しさん@お腹いっぱい。 :2007/05/29(火) 00:16:23
>>895 ありがとうございました
もう一つ聞きたいのは、数nとリストを引数として取り、
リストのn番目の要素を返す関数を定義したいのですが、
この関数を再帰を使って定義するにはどうしたらいいでしょう
(defun list-ref (lis n) (if (zerop n) (car lis) (list-ref (cdr lis) (- n 1))))
最近なんでもかんでも聞く人多くない?
mapcar を独自に定義しようとするとどう書ける?
>>896 再帰使うまでもない。
(defun list-ref (lis n)
(nth (1- n) lis))
(defun my-mapcar (func list) (let ((rest list) (results ())) (while (not (null rest)) (setq results (cons (funcall func (car rest)) results)) (setq rest (cdr rest))) (nreverse results))) とかかな。
setq とか cons を使いたくないんですとか来た場合に備えておこう。 (require 'cl) (defun my-mapcar-2 (func lst) (loop for elem in lst collect (funcall func elem)))
904 :
名無しさん@お腹いっぱい。 :2007/05/29(火) 02:04:56
>>898 つうか、そゆのは大抵自分では考えないだろうし、調べないだろうし、向上心もないだろうし、礼儀も知らないだろうし、
人の忠告も聞かないだろうから。さっさと答を与えればそれ以上しつこく聞いてこない軽い荒らしだと思って対応するが吉。
cl は宗教上の理由でちょっと……。
自分も書いてみた。リストしか考慮してない。 あんまり慣れてないからどっかまずいところあるかも・・・(自分への免罪符 (defun my-mapcar (func list) (defun my-mapcar-iter (func list rtn) (if (null list) rtn (my-mapcar-iter func (cdr list) (setq rtn (cons (funcall func (car list)) rtn))))) (my-mapcar-iter func list '()))
defunの中でdefunするのはじめて見た。
あー、 reverse すんの忘れたorz
909 :
名無しさん@お腹いっぱい。 :2007/05/29(火) 02:18:25
Schemer の方ですか? Emacs Lisp じゃー再帰は実用的じゃないお。 しかも defun は internal define と違ってグローバルだし…。
>>898 の質問者はもうダメだろうね。レポートは突破できても試験は無理そうだ……。
授業二三回でればいいだろうになぁ。まったく聞いてなかったんだろうな。授業料無駄だったね。
>>909 最近、ちょっと scheme で遊んでたもので・・・。
> Emacs Lisp じゃー再帰は実用的じゃないお。
調べてみたところ、再帰回数が max-lisp-eval-depth で制限されてる、
末尾再帰が最適化されない、のようなことがあるのですね。
> しかも defun は internal define と違ってグローバルだし…。
M-x help f で関数のリスト見たら、my-mapcar-iter があって驚きました。
よくよく考えてみたら、setq はいらなかった。
なんでつけたんだろう。
まずいところ多すぎorz
cl 使えば flet で関数内関数使えるよ。
flet を使って書き直すなら、こんなかんじでしょうか。 たしかに my-mapcar-iter が隠れた。これ便利かも。 (require 'cl) (defun my-mapcar (func list) (flet ((my-mapcar-iter (func list rtn) (if (null list) (reverse rtn) (my-mapcar-iter func (cdr list) (cons (funcall func (car list)) rtn))))) (my-mapcar-iter func list '())))
…再帰するなら labels じゃねーとダメなんじゃね? cl のバグ? ズバリこうだろ。while 版より短い!! 俺のバイク小屋ハァハァ (defun my-mapcar (func lst) (let ((result nil)) (dolist (e lst) (push (funcall func e) result)) (nreverse result)))
なんとなく nreverse なしのループで書いてみた
(defun my-mapcar (fun list)
(let* ((result (list nil))
(x result))
(while list
(setcdr x (list (funcall fun (car list))))
(setq x (cdr x) list (cdr list)))
(cdr result)))
>>915 flet を macroexpand してみればわかるよ
まあしょうがないんだろうけどちょっと気持ち悪いよね
ずびまぜん。 elispで 16進数文字列を整数に変換する楽な方法ってありません? (hoge "64") => 100 ってなるような。 (defun hoge (s) (string-to-number (concat "#x" s))) とかじゃ 0が返ってきてしまいました。
(defun hage (s) (string-to-number s 16)) ↓ (hage "64") ↓ 100 ウマー
おお、そんなところに &optional があったとは... infoをもっとちゃんと読むべきでした。 どうも有難うございました。
知ってる人も多いだろうけど C-h f めちゃくちゃ便利だよ。 関数定義してるソースの該当部分にも飛べる。
emacs22でも、mode-infoも動いてくれるしね。
あるオブジェクトに対し、car-safeが非nilとなる時 cdrでなくcdr-safeを使うべき局面ってある?
>>923 car-safe が non-nil なら対象は list ってことだから、そんな局面はない、
と思う。
同じ名前の変数 (defvar hoge)と関数 (defun hoge ())が定義されているとき、 変数だけ定義を消すことってできますか? (unintern 'hoge) だと、両方消えてしまうので。
makunbound c.f. fmakunbound
ぬりがとう。 ところでこれ何て読むのですか? (エフ)メイク・アン・バウンドでいいんかな? 思い出されるcreat()。
>ところでこれ何て読むのですか? なんでしょうね? >思い出されるcreat()。 なるw
defconstしてるものには、時に大文字のシンボルを使ってみるのも一興かなと ふと思った。 たぶんウザいだろうけど。
EmacsがXで動いているときだけ、 C-zでアイコン化しない様にしたいと思っています。 Xで動いているのかterminalで動いているのか判別するには どうしたらよいのでしょうか。
window-system
932 :
930 :2007/08/07(火) 22:33:57
>931 ありがとうございます。 とりあえず、 (if window-system (global-set-key "\C-z" 'shell)) としてみました。
M-x shell を.emacsファイルの読み込み時に動作させるにはどうしたらよいのでしょうか。
本当に文字通りそうしたいのならば (shell) と書く。
(global-set-key [?\C-;] 'なにか) とか (global-set-key "\C;" 'なにか) とやってもエラーがでて動きません。 ;をjにしたら動いたので”なにか”が間違っていることはいないと思います。 C-;やC-, C-. へのバインドを指定するにはどうしたらよいのでしょうか どなたか教えていただけないでしょうか?
[(control ?;)] 設定程度の質問なら、次回からelispスレじゃなくてemacsスレ行きな。
>>937 ありがとうございます
今後は気をつけます
どうもすいませんでした
そのようにしても動きはしませんでしたが、
それはターミナルからの接続の仕様らしいと分かったので、
別のキーを割りあてることにします
man ascii で出てくるコントロールコード以外の コントロールキーの組み合わせ以外は 端末じゃ動かないよ。
まちがえた。以外が一つ多かった。
(func "/usr/bin/emacs" "/") => ("usr" "bin" "emacs") こんな感じで、文字列からトークンを抽出する好い奴を 何方か識りませぬか?
普通に1文字ずつチェックすれば良いじゃない。
split-string
>>943 幸あれ。
やっぱりあるよね。token で探してたよ
>>942 普通?とりあえずこんなん書いてた
(lambda (string delimiter)
(let* ((iter (lambda (str dlm lst)
(if (and (string-match dlm str) (substring str (1+ (string-match dlm str)) nil))
(funcall iter
(and (string-match dlm str) (substring str (1+ (string-match dlm str)) nil))
dlm
(cons (substring str 0 (string-match dlm str)) lst))
(cons (substring str 0 (string-match dlm str)) lst)))))
(funcall iter string delimiter ())))
下記のような独自スクリプトのメジャーモードを作っています。 function: if hoge == 0 { hogehoge; } elseif hoge ==1 { if hoge2 == 0 { hogehoge2; }else{ hogehoge3; } } end; 階層は上記のif文のみです。 自動インデントをつけたいのですがどうすればいいでしょうか?
946 :
945 :2007/10/28(日) 08:47:43
補足です。generic-x.elを使って作っています。
buffer-local-variableなるものがあるそうですが、 .emacs.elなどでsetq-defaultで設定した値は、 新しいバッファを作る度にバッファごとの値のコピーが作られてしまうんでしょうか。 カスタマイズ性から見るとsetq-defaultの方が使い易そうなのですが、 パフォーマンスに悪影響がでないか心配なんです。
make-variable-buffer-local されてるような変数の話だよね。 これは setq とかで書き換えた時点で、その buffer に local な変数が作られるってシステム。 書き換えるまではどの buffer でも初期値を参照してて、 setq-default はこの初期値を書き換える。 それ自体がコピーの原因になったりはしないはず。
call-processとかの外部コマンド呼び出し関数で コマンドの出力(標準出力)を文字列もしくは文字列リストで 返すようなものってないでしょかね? いちいちバッファに出すのがとても無駄に感じる時がある
set-process-filter
951 :
名無しさん@お腹いっぱい。 :2007/11/29(木) 10:04:56
みなさん、乙です。 コードの中で読み易さを上げるためダブルクオート中の文字列を改行して書きたいのですが、 その改行自体はコード上では無効にしたいのですが、どうすればいいですか? 例 (message " listA, listB, listC") これが以下のようにmini-buffer に出力して貰いたいのですが、 listA,listB,listC そんな方法ありますか?
>>951 (message (concat
"listA,"
"listB,"
"listC"))
>>951 (message "\
listA,\
listB,\
listC")
954 :
名無しさん@お腹いっぱい。 :2007/11/30(金) 05:59:54
>>952 , 953
サンクス。C と同じことできたのね。試せよオレ。
955 :
最近始めたEMACS LISP :2007/12/24(月) 01:01:38
こんなのがあった。 (defvar zic-new-shell-buffer 0) (defun zic-create-shell (n) (interactive "P") (shell) (if n (setq zic-new-shell-buffer n)) (while (get-buffer (concat "" (int-to-string zic-new-shell-buffer))) (setq zic-new-shell-buffer (1+ zic-new-shell-buffer))) (rename-buffer (concat "" (int-to-string zic-new-shell-buffer)))) (global-set-key "\C-cz" ' zic-create-shell) 上とは関係ないけど、ご教授をよろしくお願いいたします。 以下のデータ(リージョン)を呼んで ("XXX" "YYY" "ZZZ")のように kill-ringに入れる関数の作り方教えてください。とうか作ってください。 他力本願ですみません。 ほげほげ、HOGEHOGE、ホゲホゲはデータの中に一回しか出てきません。 ほげほげ、HOGEHOGE、ホゲホゲは行の先頭にあるとはあkぎりません。 XXX、YYY、ZZZは、ほげほげ、HOGEHOGE、ホゲホゲの直後にあり、 XXX,YYY,ZZZ文字列長さは不定です(20文字以内)。 "ほげほげ"を探し、”XXX”(次のブランクの手前まで)をkill-ringに格納したいのです。 つまり、複数の特定文字列の後ろにある数文字の切り出しを自動化け したいわけです。 検索ワードのほげほげ、HOGEHOGE、ホゲホゲは,alistに事前登録でかまいません。 ●データ(リージョン) ほげほげ:XXX @@@@ HOGEHOGE:YYY @@@@ ホゲホゲ:ZZZ @@@@ つづく。。 よろしくお願いいたします。
分かりやすく書こうという努力が見られない
957 :
Zeno ◆5nZQbNmQPs :2007/12/24(月) 10:28:04
>>955 吾はお前のレスをほとんど読んでいないが、リストの内容をキルリングに入れたいのであれば
関数の最後あたりに (kill-new (format "%S" L)) としておけ (Lはリスト)。
>>955 やりたいのはこういうことかな? 入門書やマニュアル読んでるうちに書けるようになると思うよ。
(defvar hogehoge-keys '("ほげほげ" "HOGEHOGE" "ホゲホゲ"))
(defun hogehoge (start end)
(interactive "r")
(let (result)
(save-excursion
(save-restriction
(narrow-to-region start end)
(dolist (x hogehoge-keys)
(goto-char (point-min))
(when (re-search-forward (concat x ":\\(.+?\\) ") nil t)
(push (match-string-no-properties 1) result)))))
(when result (kill-new (format "%S" (nreverse result))))))
959 :
名無しさん@お腹いっぱい。 :2007/12/25(火) 07:55:32
firefox があるこの時代の (emacs-)w3m の存在意義を200字以内に書け。
960 :
名無しさん@お腹いっぱい。 :2007/12/25(火) 08:16:18
悪い、↑のは誤爆だ。
Visual Studio, Office, Internet Explorer があるこの時代の (emacs-)w3m の存在意義を200字以内に書け。
elinks><;
>>961 slime 使って lisp を coding/debug している時に Common Lisp Hyper Spec を
読むために存在している.
>>961 白痴みてーにマウスをカチャコチョclick!click!とかしねーですむべ?
激しくニッチな用途ワロタ
("abc" "def" "ghi") のどれかが "de" を含むなら t 含まないなら nil を返す関数を書きたかったのですが ↓まで書いて力尽きました…。 (mapcar (lambda (f) (if (string-match "de" f) t)) '("abc" "def" "ghi")) 戻り値の論理和をとればうまくいくんじゃないかと思ったんですが logior は引数としてinteger しかとらないし 真偽値に対して論理和を行う関数は見つけられませんでした…。 どうすればできるのかアドバイスお願いします
(defun hoge (re list) (catch :loop (dolist (x list) (if (string-match re x) (throw :loop t)))))
(require 'cl) (not (apply 'every `(null ,(mapcar (lambda (x) (if (string-match "de" x) t)) '("abc" "def" "ghi"))))) こんなのを書いてみた。complementって無いのね。
catch/throwやclのblock/return
わざわざ cl 使わなくてもできるんじゃね?
>>967 とか,
(dolist (i '("abc" "def" "ghi") nil)
(when (string-match "de" i)
(return t)))
とか...
972 :
名無しさん@お腹いっぱい。 :2008/01/02(水) 16:58:36
(not (null (string-match "de" (mapconcat 'identity '("abc" "def" "ghi") "¥0")))) Lispレベルでループしないし、string-matchも1回しか実行しないから、 データによってはこんな風にした方が速いかもよ。
>>972 目から鱗。 mapconcat なんてものがあったんだ
この発想には脱帽。
dolist も cl だったりする。
ElispがCL相当になるのはいつの日か・・・lexbindはまだか
979 :
966 :2008/01/03(木) 02:49:26
みなさんありがとうございます
色々な書き方があるのですね
ただ、scratch で
>>968 さんのコードを実行しても
every がないと言われてしまい cl の読み込みがうまくいかず動かせません…。
load-path に cl.el のあるディレクトリは入ってます
よくわからないので色々と
(load "cl.el")
(load "cl-extra.el")
(require 'cl)
(require 'cl-extra)
こんな感じで追加してみましたがやはり(void-function every)で怒られてしまいます
バージョンは22.1.50.1 (i386-mingw-nt5.1.2600)です
>>972 さんのはもちろん問題なく動きますので
これを使わせていただく事にします
cl.el についてはおいおい調べる事にします
ありがとうございました
980 :
972 :2008/01/03(木) 16:22:35
sageてなかった… もう必要ないかもしれないけど、self-evaluatingな要素しかないリスト(nilとtしかない場合を含む)についての論理和なら、(eval (cons 'or LIST))という手もある。
982 :
972 :
2008/01/03(木) 17:36:50 >>981 >eval は遅い
一般にはね。でもこのくらい単純な例になるとそうとも言えない。
(defun test (x)
(eval (cons 'or x)))
(defun test (x)
(while (and x (not (car x)))
(setq x (cdr x)))
(car x))
両方バイトコンパイルして比較すると、
(dotimes (i 10000000) (test '(nil nil nil nil t nil nil nil nil t)))
はwhile版が速いけど、
(let ((x (make-list 10000 nil))) (dotimes (i 10000) (test x)))
はeval版が速い。