【叩かれて】Emacs Lisp道場【強くなれ】
emacs覧 / PC版 /みんなの評価 : ○
502 = :
そだね
いろんな日本語のinfoを捜して、
それ読むだけでもいいんじゃない
504 = :
文字列で与えられたシンボルを束縛したいんだけどどうやればいいでしょうか。
font-lock-mode => t
(let* ((bound-str "font-lock-mode")
(intern-soft bound-str))
font-lock-mode)
=> t
これじゃ駄目だし orz
505 = :
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 = :
>>505
おおー、できました。
eval すりゃいいのか…ってまだよく理解できてないけど。感謝。
507 = :
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 = :
eval 無いと
(let ((bound-str "font-lock-mode")) (let-string ((bound-str nil)) ...))
みたいに使えないよね。
文字列リテラル書けるのなら最初からシンボルにすればいいんだから、
よそから持って来た文字列に値を束縛したいって話なんじゃないの?
509 = :
すみません、書いてから気付きました。
510 = :
hoge という関数が定義されているか調べるにはどのように書けばよいのでしょ
うか?
512 = :
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 = :
普通、関数内部の処理では mark は使わない。
mark は基本的に、ユーザーが手動で region 指定したり移動したりするためのもの。
移動コマンドなんかで、あとでユーザーが使えるように push-mark しとくとか、そういうときに使う。
普段の処理で使うのは marker のほう。
でもこの場合は、その場で region 指定するだけだから、 marker も使わないで済みそうかな。
(save-excursion
(let ((end (point)))
(backward-word 1)
(japanese-hankaku-region (point) end)))
みたいな。
514 = :
>>513
ありがとさんです。regionといっても
markしなきゃいけないわけじゃないんですね。
えらくすっきりしました。
またなんかあったらよろしく
515 = :
質問なんですが、例えば(decode-time)の結果のようなリストを
これまた例えば(sec minute hour day month)のような変数(のリスト)に
一気に代入するようなコマンドってないもんでしょうか。
Perlでいう
($sec, $minute, $day, $mon, $year) = localtime();
みたいなイメージなんですが。
あと、Emacs-Lisp Farm ていうMLがあるようですが
過去ログって見れないんでしょうか?
516 = :
間違った使い方な気がするけど、multiple-value-setqとか?
ログはMLはいってからコマンドメール投げれば取得できるよ。
517 = :
>>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)
...)
520 = :
ユニバーサルな解釈など存在しない為
間違った使い方など存在しない
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
521 = :
そういう考えだとあらゆる価値が平等に無意味になって
思考停止に陥るお。
522 = :
思考する前に馬鹿を殺そう
523 = :
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
525 = :
見えないのが気になるならフィルタ使わないほうがいいよ
526 = :
よくわからんがニューハーフに知り合いはいないよ。
527 = :
ゴキブリを見て見ぬふりする愚かさ
528 = :
今は一匹なんだから叩いてつぶしちゃうよりは、
どっかに行くのを待ってもらった方がいい。
529 = :
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 = :
Reply-to:>>529
う ざ い
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
531 = :
インライン関数を変更した際、
それを呼出している関数(バイトコンパイル済み)に反映させる
手軽な方法はないでしょうか?
いちいち定義してるとこに飛んで評価するのは面倒なもので。
532 = :
>>531
unload-featureとか使えない?
わたし自身、一度も使った事が無いから
良く分かんないけど。
533 = :
テキストファイルを 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 = :
a) coding systemを設定する。
b) testout.elの中でout.txtに書く。
537 = :
>>534-536
むむ、write-file するしかないのかあ。フィルタの類ではないとはいえちょっ
と意外な気も。まあ、関数内でファイルに書いてもなんとかなるのでそうしま
す。サンクスでした。
538 = :
encode-coding-string したものを princ するのはだめか?
(未確認)
539 = :
>>538
おお、なるほど。
(princ (encode-coding-string (buffer-string) 'euc-jp))
でやってみたら大丈夫なようです。エンコードが決め打ちなのが格好悪いです
が、まぁしょうがないかな。ありがとうございました。
540 = :
terminal-coding-systemにすれば?
541 = :
>>540
emacs -Q --batch --execute='(print (terminal-coding-system))'
で japanese-iso-8bit が返ってきますね。.emacs 読んでなくても大丈夫なの
か。terminal-coding-system 使うことにします。どうもでした。
542 = :
>>541
ロケール見てるっぽいね。
$ LC_ALL=C emacs -Q --batch --execute='(print (terminal-coding-system))'
だと nil だったから。nil の時だけ us-ascii にしておけば問題ないと思う。
543 = :
>>539
入力ファイルと同じ coding-system にしたいのであれば,
insert-file-contents した直後の last-coding-system-used を
使うというのはどうだろう。
544 = :
Elispを初めて改造してみたのですが
うまく行きませんでした
changeが設定されていれば、nonにchangeを入れたいのですが
以下のように書いたところうまくいきませんでした
間違っているでしょうか?
(if change
(setq non change))
546 = :
解決しました
変更しない場合は
(setq change ')
として、変数は作成しておかないとダメなんですね
変数が無い場合も正しく動作するようにはできないでしょうか?
547 = :
質問は上げとけ
548 = :
>>543
なるほど。今回のは元ファイルと常に同じって訳でもなかったんですが、そう
限定できる場合はいいかもしれませんね。アドバイスどうもです。
>>546
よくわからんが
(and (boundp 'change) change
(setq non change))
とか?
549 = :
>>546
そんな構文あるのかー!
と思って思わず確認しちゃったよ。
みんなの評価 : ○
類似してるかもしれないスレッド
- 【熱く】お前のEmacsにはまった理由【語れ】 (577) - [36%] - 2021/8/28 17:30 ○
- 「Emacsは消滅すべき」、ゴスリング氏 (127) - [17%] - 2023/1/12 15:45
トップメニューへ / →のくす牧場書庫について