【叩かれて】Emacs Lisp道場【強くなれ】
emacs覧 / PC版 /みんなの評価 : ○
951 = :
みなさん、乙です。
コードの中で読み易さを上げるためダブルクオート中の文字列を改行して書きたいのですが、
その改行自体はコード上では無効にしたいのですが、どうすればいいですか?
例
(message "
listA,
listB,
listC")
これが以下のようにmini-buffer に出力して貰いたいのですが、
listA,listB,listC
そんな方法ありますか?
952 = :
>>951
(message (concat
"listA,"
"listB,"
"listC"))
954 = :
>>952, 953
サンクス。C と同じことできたのね。試せよオレ。
955 = :
こんなのがあった。
(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 @@@@
つづく。。
よろしくお願いいたします。
956 = :
分かりやすく書こうという努力が見られない
960 = :
悪い、↑のは誤爆だ。
961 = :
Visual Studio, Office, Internet Explorer があるこの時代の (emacs-)w3m の存在意義を200字以内に書け。
964 = :
>>961
白痴みてーにマウスをカチャコチョclick!click!とかしねーですむべ?
965 = :
激しくニッチな用途ワロタ
966 = :
("abc" "def" "ghi") のどれかが
"de" を含むなら t 含まないなら nil を返す関数を書きたかったのですが
↓まで書いて力尽きました…。
(mapcar (lambda (f)
(if (string-match "de" f) t))
'("abc" "def" "ghi"))
戻り値の論理和をとればうまくいくんじゃないかと思ったんですが
logior は引数としてinteger しかとらないし
真偽値に対して論理和を行う関数は見つけられませんでした…。
どうすればできるのかアドバイスお願いします
967 = :
(defun hoge (re list)
(catch :loop
(dolist (x list)
(if (string-match re x)
(throw :loop t)))))
968 = :
(require 'cl)
(not
(apply 'every
`(null ,(mapcar (lambda (x)
(if (string-match "de" x) t))
'("abc" "def" "ghi")))))
こんなのを書いてみた。complementって無いのね。
971 = :
わざわざ cl 使わなくてもできるんじゃね?
>>967
とか,
(dolist (i '("abc" "def" "ghi") nil)
(when (string-match "de" i)
(return t)))
とか...
972 = :
(not (null (string-match "de" (mapconcat 'identity '("abc" "def" "ghi") "¥0"))))
Lispレベルでループしないし、string-matchも1回しか実行しないから、
データによってはこんな風にした方が速いかもよ。
973 = :
>>972
目から鱗。 mapconcat なんてものがあったんだ
974 = :
この発想には脱帽。
976 = :
dolist も cl だったりする。
979 = :
みなさんありがとうございます
色々な書き方があるのですね
ただ、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 = :
sageてなかった…
もう必要ないかもしれないけど、self-evaluatingな要素しかないリスト(nilとtしかない場合を含む)についての論理和なら、(eval (cons 'or LIST))という手もある。
981 = :
>>980
eval は遅い
982 = :
>>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版が速い。
983 = :
静的言語脳だからeval使うと負けと思ってる
984 = :
evalでエバるなよ?!
986 = :
そっか、関数じゃないからfuncallとか使えないわけだな
みんなの評価 : ○
類似してるかもしれないスレッド
- 【熱く】お前のEmacsにはまった理由【語れ】 (577) - [36%] - 2021/8/28 17:30 ○
- 「Emacsは消滅すべき」、ゴスリング氏 (127) - [17%] - 2023/1/12 15:45
トップメニューへ / →のくす牧場書庫について