私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
【叩かれて】Emacs Lisp道場【強くなれ】
emacs スレッド一覧へ / emacs とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 : ○
レスフィルター : (試験中)
lisp 以下のソースを見たらいいんじゃない?
使用したい function の使用例として。
使用したい function の使用例として。
文字列で与えられたシンボルを束縛したいんだけどどうやればいいでしょうか。
font-lock-mode => t
(let* ((bound-str "font-lock-mode")
(intern-soft bound-str))
font-lock-mode)
=> t
これじゃ駄目だし orz
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
(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
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)
(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)) ...))
みたいに使えないよね。
文字列リテラル書けるのなら最初からシンボルにすればいいんだから、
よそから持って来た文字列に値を束縛したいって話なんじゃないの?
(let ((bound-str "font-lock-mode")) (let-string ((bound-str nil)) ...))
みたいに使えないよね。
文字列リテラル書けるのなら最初からシンボルにすればいいんだから、
よそから持って来た文字列に値を束縛したいって話なんじゃないの?
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で半角カタカナ入力できるか否かなんだが
(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)))
みたいな。
mark は基本的に、ユーザーが手動で region 指定したり移動したりするためのもの。
移動コマンドなんかで、あとでユーザーが使えるように push-mark しとくとか、そういうときに使う。
普段の処理で使うのは marker のほう。
でもこの場合は、その場で region 指定するだけだから、 marker も使わないで済みそうかな。
(save-excursion
(let ((end (point)))
(backward-word 1)
(japanese-hankaku-region (point) end)))
みたいな。
質問なんですが、例えば(decode-time)の結果のようなリストを
これまた例えば(sec minute hour day month)のような変数(のリスト)に
一気に代入するようなコマンドってないもんでしょうか。
Perlでいう
($sec, $minute, $day, $mon, $year) = localtime();
みたいなイメージなんですが。
あと、Emacs-Lisp Farm ていうMLがあるようですが
過去ログって見れないんでしょうか?
これまた例えば(sec minute hour day month)のような変数(のリスト)に
一気に代入するようなコマンドってないもんでしょうか。
Perlでいう
($sec, $minute, $day, $mon, $year) = localtime();
みたいなイメージなんですが。
あと、Emacs-Lisp Farm ていうMLがあるようですが
過去ログって見れないんでしょうか?
間違った使い方な気がするけど、multiple-value-setqとか?
ログはMLはいってからコマンドメール投げれば取得できるよ。
ログは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)
...)
(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式が実行された」
ということですね?
レスどうもっす。
(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-*を使ってるから。
elispには多値はないのにmultiple-value-*を使ってるから。
ユニバーサルな解釈など存在しない為
間違った使い方など存在しない
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
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 は「Lisp のような自由度の高い -- 故に創造性の必要とされる --
言語でただ一つの解釈を強要するのは間違っているのではないのか」
ということを伝えたかっただけだ。
> Reply-to:>>522
お前誰だよ
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
よくわからんがニューハーフに知り合いはいないよ。
Reply-to:>>529
う ざ い
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
う ざ い
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
インライン関数を変更した際、
それを呼出している関数(バイトコンパイル済み)に反映させる
手軽な方法はないでしょうか?
いちいち定義してるとこに飛んで評価するのは面倒なもので。
それを呼出している関数(バイトコンパイル済み)に反映させる
手軽な方法はないでしょうか?
いちいち定義してるとこに飛んで評価するのは面倒なもので。
テキストファイルを 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 は大丈夫)
ちゃんと動かすにはどうすりゃいいでしょうか。
が、
--- 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に書く。
b) testout.elの中でout.txtに書く。
>>533
set-terminal-coding-system
set-terminal-coding-system
stdout がファイルの場合は terminal-coding-system は無視されて
emacs-mule になるよ。なので 534 の b のようにするしかない。
emacs-mule になるよ。なので 534 の b のようにするしかない。
encode-coding-string したものを princ するのはだめか?
(未確認)
(未確認)
>>538
おお、なるほど。
(princ (encode-coding-string (buffer-string) 'euc-jp))
でやってみたら大丈夫なようです。エンコードが決め打ちなのが格好悪いです
が、まぁしょうがないかな。ありがとうございました。
おお、なるほど。
(princ (encode-coding-string (buffer-string) 'euc-jp))
でやってみたら大丈夫なようです。エンコードが決め打ちなのが格好悪いです
が、まぁしょうがないかな。ありがとうございました。
>>540
emacs -Q --batch --execute='(print (terminal-coding-system))'
で japanese-iso-8bit が返ってきますね。.emacs 読んでなくても大丈夫なの
か。terminal-coding-system 使うことにします。どうもでした。
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 にしておけば問題ないと思う。
ロケール見てるっぽいね。
$ 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 を
使うというのはどうだろう。
入力ファイルと同じ coding-system にしたいのであれば,
insert-file-contents した直後の last-coding-system-used を
使うというのはどうだろう。
Elispを初めて改造してみたのですが
うまく行きませんでした
changeが設定されていれば、nonにchangeを入れたいのですが
以下のように書いたところうまくいきませんでした
間違っているでしょうか?
(if change
(setq non change))
うまく行きませんでした
changeが設定されていれば、nonにchangeを入れたいのですが
以下のように書いたところうまくいきませんでした
間違っているでしょうか?
(if change
(setq non change))
ちなみに、
(setq change 'hoge)
のように設定されていると、うまくどうさします
(setq change 'hoge)
のように設定されていると、うまくどうさします
解決しました
変更しない場合は
(setq change ')
として、変数は作成しておかないとダメなんですね
変数が無い場合も正しく動作するようにはできないでしょうか?
変更しない場合は
(setq change ')
として、変数は作成しておかないとダメなんですね
変数が無い場合も正しく動作するようにはできないでしょうか?
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 スレッド一覧へ
みんなの評価 : ○類似してるかもしれないスレッド
- 【熱く】お前のEmacsにはまった理由【語れ】 (577) - [36%] - 2021/8/28 17:30 ○
- 「Emacsは消滅すべき」、ゴスリング氏 (127) - [17%] - 2023/1/12 15:45
トップメニューへ / →のくす牧場書庫について