のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,595,097人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

【叩かれて】Emacs Lisp道場【強くなれ】

emacs スレッド一覧へ / emacs とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
501 : 名無しさん@お腹 - 2005/06/15(水) 00:46:14 (-1,-29,-7)
emacs lisp は info のヘルプが超便利だと思うよ。
502 : 名無しさん@お腹 - 2005/06/15(水) 01:28:29 (+57,+29,-31)
そだね
いろんな日本語のinfoを捜して、
それ読むだけでもいいんじゃない
503 : 名無しさん@お腹 - 2005/06/23(木) 13:33:40 (-1,-29,-18)
lisp 以下のソースを見たらいいんじゃない?
使用したい function の使用例として。
504 : 名無しさん@お腹 - 2005/06/25(土) 10:23:50 (+3,-30,-62)
文字列で与えられたシンボルを束縛したいんだけどどうやればいいでしょうか。

font-lock-mode => t

(let* ((bound-str "font-lock-mode")
(intern-soft bound-str))
font-lock-mode)
=> t

これじゃ駄目だし orz
505 : 名無しさん@お腹 - 2005/06/25(土) 10:32:34 (+36,-30,-164)
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
506 : 名無しさん@お腹 - 2005/06/25(土) 11:09:42 (+62,+29,-21)
>>505
おおー、できました。
eval すりゃいいのか…ってまだよく理解できてないけど。感謝。
507 : 名無しさん@お腹 - 2005/06/26(日) 18:11:07 (+3,-30,-112)
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)
508 : 名無しさん@お腹 - 2005/06/26(日) 18:24:34 (+3,-30,-66)
eval 無いと
(let ((bound-str "font-lock-mode")) (let-string ((bound-str nil)) ...))
みたいに使えないよね。
文字列リテラル書けるのなら最初からシンボルにすればいいんだから、
よそから持って来た文字列に値を束縛したいって話なんじゃないの?
509 : 名無しさん@お腹 - 2005/06/26(日) 19:24:09 (+57,+29,+0)
すみません、書いてから気付きました。
510 : 名無しさん@お腹 - 2005/08/07(日) 01:07:26 (+23,-4,-12)
hoge という関数が定義されているか調べるにはどのように書けばよいのでしょ
うか?
511 : 名無しさん@お腹 - 2005/08/07(日) 01:22:09 (-6,-29,-17)
(fboundp 'hoge)
512 : 名無しさん@お腹 - 2005/08/17(水) 15:11:54 (+3,-30,-133)
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で半角カタカナ入力できるか否かなんだが
513 : 名無しさん@お腹 - 2005/08/17(水) 16:07:04 (+36,-30,-117)
普通、関数内部の処理では mark は使わない。
mark は基本的に、ユーザーが手動で region 指定したり移動したりするためのもの。
移動コマンドなんかで、あとでユーザーが使えるように push-mark しとくとか、そういうときに使う。

普段の処理で使うのは marker のほう。
でもこの場合は、その場で region 指定するだけだから、 marker も使わないで済みそうかな。

(save-excursion
(let ((end (point)))
(backward-word 1)
(japanese-hankaku-region (point) end)))

みたいな。
514 : 名無しさん@お腹 - 2005/08/17(水) 17:00:47 (+62,+29,-7)
>>513
ありがとさんです。regionといっても
markしなきゃいけないわけじゃないんですね。
えらくすっきりしました。
またなんかあったらよろしく
515 : 名無しさん@お腹 - 2005/08/21(日) 20:15:39 (+9,-30,-93)
質問なんですが、例えば(decode-time)の結果のようなリストを
これまた例えば(sec minute hour day month)のような変数(のリスト)に
一気に代入するようなコマンドってないもんでしょうか。
Perlでいう
($sec, $minute, $day, $mon, $year) = localtime();
みたいなイメージなんですが。

あと、Emacs-Lisp Farm ていうMLがあるようですが
過去ログって見れないんでしょうか?
516 : 名無しさん@お腹 - 2005/08/21(日) 21:07:43 (+4,-29,-55)
間違った使い方な気がするけど、multiple-value-setqとか?
ログはMLはいってからコマンドメール投げれば取得できるよ。
517 : 名無しさん@お腹 - 2005/08/21(日) 21:31:55 (+4,-30,-71)
>>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)
...)
518 : 名無しさん@お腹 - 2005/08/21(日) 21:55:07 (+3,-30,-172)
>>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式が実行された」
ということですね?
519 : 名無しさん@お腹 - 2005/08/21(日) 23:12:02 (-1,-29,-33)
間違った使い方な気が……っていうのは、
elispには多値はないのにmultiple-value-*を使ってるから。
520 : Zeno ◆5 - 2005/08/23(火) 11:25:55 (+3,-30,-21)


            ユニバーサルな解釈など存在しない為
             間違った使い方など存在しない


_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
521 : 名無しさん@お腹 - 2005/08/23(火) 12:55:11 (+74,+29,-20)
そういう考えだとあらゆる価値が平等に無意味になって
思考停止に陥るお。
522 : 名無しさん@お腹 - 2005/08/23(火) 13:10:54 (+60,+29,-4)
思考する前に馬鹿を殺そう
523 : Zeno ◆5 - 2005/08/23(火) 21:34:07 (+12,-30,-129)
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
524 : 名無しさん@お腹 - 2005/08/23(火) 21:53:28 (+0,-29,+0)
520と523がみえない
525 : 名無しさん@お腹 - 2005/08/24(水) 00:18:17 (+56,+28,-1)
見えないのが気になるならフィルタ使わないほうがいいよ
526 : 521 - 2005/08/24(水) 04:51:42 (+64,+29,-4)
よくわからんがニューハーフに知り合いはいないよ。
527 : 名無しさん@お腹 - 2005/08/24(水) 11:37:34 (+52,+29,-3)
ゴキブリを見て見ぬふりする愚かさ
528 : 名無しさん@お腹 - 2005/08/24(水) 13:29:28 (+66,+29,-20)
今は一匹なんだから叩いてつぶしちゃうよりは、
どっかに行くのを待ってもらった方がいい。
529 : Zeno ◆5 - 2005/08/24(水) 13:45:30 (+16,-30,-34)
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 (+5,-30,-18)
Reply-to:>>529
                う   ざ   い

_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
531 : 名無しさん@お腹 - 2005/08/24(水) 16:44:22 (+62,+29,-39)
インライン関数を変更した際、
それを呼出している関数(バイトコンパイル済み)に反映させる
手軽な方法はないでしょうか?
いちいち定義してるとこに飛んで評価するのは面倒なもので。
532 : 名無しさん@お腹 - 2005/08/29(月) 14:30:23 (+6,-29,-19)
>>531
unload-featureとか使えない?
わたし自身、一度も使った事が無いから
良く分かんないけど。
533 : 名無しさん@お腹 - 2005/08/31(水) 09:25:32 (+17,-30,-142)
テキストファイルを 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 は大丈夫)

ちゃんと動かすにはどうすりゃいいでしょうか。
534 : 名無しさん@お腹 - 2005/08/31(水) 10:32:55 (+31,-30,-23)
a) coding systemを設定する。
b) testout.elの中でout.txtに書く。

535 : 名無しさん@お腹 - 2005/08/31(水) 10:38:22 (-1,-30,-16)
>>533
set-terminal-coding-system
536 : 名無しさん@お腹 - 2005/08/31(水) 10:44:24 (-2,-30,-47)
stdout がファイルの場合は terminal-coding-system は無視されて
emacs-mule になるよ。なので 534 の b のようにするしかない。
537 : 533 - 2005/08/31(水) 18:13:37 (+62,+29,-20)
>>534-536
むむ、write-file するしかないのかあ。フィルタの類ではないとはいえちょっ
と意外な気も。まあ、関数内でファイルに書いてもなんとかなるのでそうしま
す。サンクスでした。
538 : 名無しさん@お腹 - 2005/09/01(木) 17:23:05 (+4,-30,-24)
encode-coding-string したものを princ するのはだめか?
(未確認)
539 : 名無しさん@お腹 - 2005/09/01(木) 23:28:29 (+10,-30,-57)
>>538
おお、なるほど。

(princ (encode-coding-string (buffer-string) 'euc-jp))

でやってみたら大丈夫なようです。エンコードが決め打ちなのが格好悪いです
が、まぁしょうがないかな。ありがとうございました。
540 : 名無しさん@お腹 - 2005/09/01(木) 23:45:04 (+4,-30,-19)
terminal-coding-systemにすれば?
541 : 名無しさん@お腹 - 2005/09/02(金) 00:11:15 (+10,-30,-78)
>>540
emacs -Q --batch --execute='(print (terminal-coding-system))'

で japanese-iso-8bit が返ってきますね。.emacs 読んでなくても大丈夫なの
か。terminal-coding-system 使うことにします。どうもでした。
542 : ヽ(´ー`)ノ - 2005/09/02(金) 00:35:37 (+4,-30,-42)
>>541
ロケール見てるっぽいね。

$ LC_ALL=C emacs -Q --batch --execute='(print (terminal-coding-system))'

だと nil だったから。nil の時だけ us-ascii にしておけば問題ないと思う。
543 : 名無しさん@お腹 - 2005/09/02(金) 09:32:49 (+10,-30,-65)
>>539

入力ファイルと同じ coding-system にしたいのであれば,
insert-file-contents した直後の last-coding-system-used を
使うというのはどうだろう。
544 : 名無しさん@お腹 - 2005/09/04(日) 13:45:39 (+23,-29,-52)
Elispを初めて改造してみたのですが
うまく行きませんでした

changeが設定されていれば、nonにchangeを入れたいのですが
以下のように書いたところうまくいきませんでした
間違っているでしょうか?

(if change
(setq non change))
545 : 544 - 2005/09/04(日) 13:49:30 (-1,-29,-9)
ちなみに、
(setq change 'hoge)
のように設定されていると、うまくどうさします
546 : 544 - 2005/09/04(日) 13:51:48 (+38,-29,-18)
解決しました
変更しない場合は
(setq change ')
として、変数は作成しておかないとダメなんですね

変数が無い場合も正しく動作するようにはできないでしょうか?
547 : 名無しさん@お腹 - 2005/09/04(日) 14:04:21 (+42,+24,+0)
質問は上げとけ
548 : 名無しさん@お腹 - 2005/09/04(日) 14:17:23 (+4,-29,-23)
>>543
なるほど。今回のは元ファイルと常に同じって訳でもなかったんですが、そう
限定できる場合はいいかもしれませんね。アドバイスどうもです。

>>546
よくわからんが

(and (boundp 'change) change
(setq non change))

とか?
549 : 名無しさん@お腹 - 2005/09/05(月) 15:14:56 (+63,+29,-3)
>>546
そんな構文あるのかー!
と思って思わず確認しちゃったよ。
550 : 名無しさん@お腹 - 2005/09/06(火) 09:40:12 (+0,-29,-20)
emacs-cvs 使おうと思ったら、its とやらが含まれてないっぽいんんだけど、
どうしたらいい?
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について