03/10/23 12:00
今日、はじめて包囲アドバイスなるものを使ってみマスタ。
強力すぎてちょっと怖いけど、試しに
;; デフォルト動作でそのウィンドウも消すようにする。
(defadvice quit-window (around kill-window-adv activate)
"quit-window with kill selected window"
(unless (ad-get-arg 1)
(ad-set-arg 1 (selected-window)))
ad-do-it)
こんな風なのを書いてみた。
たとえばapropos のウィンドウで q したときなんかはウィンドウが消えてくれます。
コレ一発で vc の log ウィンドウなんかもそんな挙動になってくれるからスゴイ楽でし。
でもやっぱし怖いす。
101:名無しさん@お腹いっぱい。
03/10/23 14:51
包囲アドバイスって訳語は、日本語infoで使われちゃっていますけど、
あまり良さそうに思えないですね。語感が合わなくて。
102:名無しさん@お腹いっぱい。
03/10/24 06:20
>>96
> kazuのeispは信じられない程アレなので参考にならない。
どのへんが?
103: ◆kXMewIMy86
03/10/24 06:28
ま、いろいろとね。。。
104:名無しさん@お腹いっぱい。
03/10/24 08:30
>>103
FUD?
105:名無しさん@お腹いっぱい。
03/10/24 12:41
>>104
そうとも言いきれなさそうだから困る。
リスト遊びの評判もだが。
106:名無しさん@お腹いっぱい。
03/10/24 14:45
>>105
広瀬さんの本はどう?
107:名無しさん@お腹いっぱい。
03/10/24 17:10
「リスト遊び」は純粋にとても良かったと思うが。
mewは使ってないからコードの評価はしないけど。
108:名無しさん@お腹いっぱい。
03/10/24 20:33
2章を頭からちょっと読んでみたが
- nil を偽値として紹介した直後に not でなく null を紹介。
その後で空リスト。
偽値と空リストがごっちゃになってる taste がしてイヤでつ。
同じ lisp ばかりじゃねえんだぞと。
- predicate は「述語」でなしに「断言する」でよかったんだっけか?
- "\n" が改行文字にすりかわるのは評価じゃなくてリーダーの問題だろ
\n ならいいけど \\ が出てきたらこんな理解で困るんじゃないか。
regexp を扱うようになったらパニックだろ。
とか考えた漏れは逝ってよしでつか
109:名無しさん@お腹いっぱい。
03/10/24 20:50
でつ
110:名無しさん@お腹いっぱい。
03/10/24 20:54
>>108
> 同じ lisp ばかりじゃねえんだぞと。
違う Lisp 知らない。教えて。
Scheme は Lisp じゃないし。
111:名無しさん@お腹いっぱい。
03/10/25 09:12
>>99
まだ理解できていないようで・・・
112:名無しさん@お腹いっぱい。
03/10/25 09:30
>>111
あのー、罵倒されても構いませんから、
(lambda ...)
と
(function (lambda ...))
で具体的に何が変わってくるのか、
もうちょっと詳しく教えてください。
俺の理解では、バイトコンパイルされてしまえば同じ。
そのままだったら、functionのほうがマクロ展開ないぶん、
微妙に速いかもしれない(俺の勝手な推測)というところなんですが。
# quoteの場合が違うのは分かっています。
113:名無しさん@お腹いっぱい。
03/10/25 14:44
それでいいんじゃないの? 個人的には (lambda ...) よりも #'(lambda ...)
のほうがパッと見たときにわかりやすいので好み。
114:名無しさん@お腹いっぱい。
03/10/26 10:49
時間がかかる処理をしていて、何かキーが押されたら中断する、ということを
考えています。試しに下のようなのを書いてみました。
(defun g ()
(interactive)
(let ((i 0))
(while t
(setq i (1+ i))
(when (input-pending-p)
(keyboard-quit)))))
これはうまくいきました。
今、やりたいのは 上記のwhile部分がブラックボックス扱いのときで、
(defun heavy-proc ()
(let ((i 0))
(while t
(setq i (1+ i)))
i))
という関数の中身を変更せずに、呼び出した後でキー入力があれば中断して戻
るということがしたいのです。割り込みのような感じです。
(defun f2 ()
(interactive)
(condition-case nil
(heavy-proc)
.....
とやればいいのかなと思ったのですが、肝心のキーが押されたらエラーを発生
するやり方がさっぱり見当がつかないのです。
なにか良い方法を知っておられましたら、教えてやってくださいまし。
115:名無しさん@お腹いっぱい。
03/10/26 11:42
>>114
condition-case で quit 取るんじゃだめなん?
116:114
03/10/26 18:05
>>115
アドバイスありがとうございます。
(defun heavy-proc ()
(let ((i 0))
(while t
(setq i (1+ i)))
i))
(defun f2 ()
(interactive)
(condition-case nil
(heavy-proc)
((quit)
(message "aborted."))))
こういうことでしょうか。
これだと、C-g以外のキーを押したときは中断できません。
もうちょっと練ってみます。
117:名無しさん@お腹いっぱい。
03/10/27 01:23
全てのキーに signal発生させるよう設定したキーマップ使用すれば
いけるかも? signalの代わりに throwでもいいけど。
118:114
03/10/27 09:49
>>117
試しにこうしてみましたが…
(defvar tmp-map nil
"temporary key map for aborting.")
(defun f2 ()
(interactive)
(let ((previous-keymap (copy-keymap (current-local-map))))
(if tmp-map
nil
(setq tmp-map (make-sparse-keymap))
(define-key tmp-map "a" 'keyboard-quit)
(define-key tmp-map "b" 'keyboard-quit)
(define-key tmp-map "c" 'keyboard-quit))
(use-local-map tmp-map)
(condition-case nil
(heavy-proc)
((quit)
(message "aborted.")))
(use-local-map previous-keymap)))
中断してくれない(^^;
119:名無しさん@お腹いっぱい。
03/10/27 10:25
うーん、自分で bindした keyboard-quitと
C-g は扱いが違うって事なのかな?
120:114
03/10/27 11:47
>>119
今度は以下のようにsignalを使ってみましたが…
(defvar tmp-map nil
"temporary key map for aborting.")
(defun my-quit ()
(interactive)
(signal 'quit nil))
(defun f2 ()
(interactive)
(let ((previous-keymap (copy-keymap (current-local-map))))
(if tmp-map
nil
(setq tmp-map (make-sparse-keymap))
(define-key tmp-map "a" 'my-quit))
(use-local-map tmp-map)
(condition-case nil
(heavy-proc)
((quit)
(message "aborted.")))
(use-local-map previous-keymap)))
相変わらず、中断せずでした。
edebugで追いかけてみると、キーマップ自体は変わってくれているのですが、
heavy-procを呼び出したらC-g以外をセンスしてくれないような感じがします
です。
121:114
03/10/27 12:30
助言を元に調べました。
なんとなく分かってきた気がします。(気がするだけかも…)
(defun heavy-proc ()
(let ((i 0))
(while t
(setq i (1+ i)))
i))
(defun f3 ()
(interactive)
(let ((previous-keymap (copy-keymap (current-local-map)))
(previous-input-mode (current-input-mode)))
(set-input-mode t nil 0 ?a)
(condition-case nil
(heavy-proc)
((quit)
(message "aborted.")))
(use-local-map previous-keymap)
(set-input-mode (car previous-input-mode)
(nth 1 previous-input-mode)
(nth 2 previous-input-mode)
(nth 3 previous-input-mode))))
キーマップ再定義はせずに、上記のようにすると aキーで中断できるようにな
りますた。あとはこれを全部のキー文字に割り当てれば、と考えたのですが…
(set-input-mode t nil 0 '(?a ?b)) のような複数指定は不可
(set-input-mode t nil 0 nil) ではデフォルトのC-gになる
の様です。…もはや手詰まりか…
122:114
03/10/28 10:24
ふと思い立って、
(keyboard-translate ?b ?\C-g)
とかやってみましたが、やはり中断してくれませんね。
コマンドループ内でC-gというのはかなりの特別扱いの感じがします。
こんなローレベルな関数が効かないなんて…。
# emvaders.elとかどうやってるのかな。ゲームなら割り込みみたいな処理を
してると思うんだけど。
123:114
03/10/28 10:53
emvaders.elでは input-pending-pで処理してますた。
ゲーム的にはこのやり方は納得です。
にしても、ハマりすぎです。
誰かお願いです。ひとつ叩いてやってください。ガツンと。
124:114
03/10/29 15:54
苦肉の策として、「最後に押したキーで中断する」というのを考えてみました。
(defadvice heavy-proc (before input-set disable)
(set-input-mode t nil 0 last-input-event))
(defun heavy-proc ()
(interactive)
(let ((i 0))
(while t
(setq i (1+ i)))
i))
(defun f3 ()
(interactive)
(let ((previous-input-mode (current-input-mode)))
;; enable advice
(ad-enable-advice 'heavy-proc 'before 'input-set)
(ad-activate 'heavy-proc)
(condition-case nil
(heavy-proc)
((quit)
(message "aborted.")))
;; disable advice
(ad-disable-advice 'heavy-proc 'before 'input-set)
(ad-activate 'heavy-proc)
(set-input-mode (car previous-input-mode)
(nth 1 previous-input-mode)
(nth 2 previous-input-mode)
(nth 3 previous-input-mode))))
ややこしいやり方になってしまいました。
125:名無しさん@お腹いっぱい。
03/10/29 16:16
unwind-protect使ったほうがいいよ。
126:名無しさん@お腹いっぱい。
03/10/29 16:46
なぜ C-g で quit がいやなのかようわからんが、アドバイスせんでも
(let ((previous-input-mode (current-input-mode)))
(unwind-protect
(progn
(apply #'set-input-mode
`(,@(butlast previous-input-mode) ,last-input-event))
(heavy-proc))
(apply #'set-input-mode previous-input-mode)))
でいいような。
127:114
03/10/29 17:56
>>125, 126
助言、ありがとうございます。
今まで、unwind-protect は実際にどういう場面で用いるのかわかりませんでしたが、
なんかわかったような気がしますです。
> なぜ C-g で quit がいやなのかようわからんが、
bf-mode.elというelispをいじくっているのですが、html をw3mで表示したと
きに重いので、キャンセルの手段が欲しいと思ったのです。
128:名無しさん@お腹いっぱい。
03/10/30 01:09
C-gでいいじゃん…
129:名無しさん@お腹いっぱい。
03/10/30 21:47
ファイルへの出力ってどうやってするんですか?
とりあえずhoge.txtに"hoge\n"と書いて出力する程度でいいんですが。
130:名無しさん@お腹いっぱい。
03/10/30 21:53
write-regionでいいじゃん…
131:名無しさん@お腹いっぱい。
03/10/30 21:58
>>130
さんくす!
ググってもよく分らなかったもので。
132:名無しさん@お腹いっぱい。
03/11/15 19:21
【徹底的】プログラマーが語るviとemacs 7【バトル】
スレリンク(prog板)
514 :仕様書無しさん :03/11/15 14:09
Vimの方がEmacsより速いとか言っていた馬鹿が居たなぁ
URLリンク(msdn.microsoft.com)
どう見てもEmacsの方が速いなプッ
以前のこれと比べてみろよ
URLリンク(seriss.com)
ダセーーー(藁
なんか、Vim抜けてプロンプトでコンパイルしてまた開いてるよプッ
しかも、Emacsの方が断然速いな~
いい加減乗り換えた方が良いんじゃねぇか(藁
それにしてもM$のプログラマホモくせーな
133:名無しさん@お腹いっぱい。
03/12/06 19:06
もはや、このスレもこれまでか…
がんばってる同士はおらんのだろうか。
134:名無しさん@お腹いっぱい。
03/12/06 22:27
2ch以外で頑張ってます。
135:名無しさん@お腹いっぱい。
03/12/07 17:16
たとえば、それはどこなんでしょう?
136:名無しさん@お腹いっぱい。
03/12/10 02:40
あのー質問なんですが,
あるファイルの内容を調査したい場合,Emacs Lisp だと
対象となるファイルを一旦 find-file とかで
全て読み込まなくちゃ駄目なんでしょうか…?
外部プロセスに逃げると言う手も考えましたが,
そんなものを使うよりは,Emacs Lisp のみで完結したいので…
137:名無しさん@お腹いっぱい。
03/12/10 03:10
etagsとか?
ってか、どんな調査したいのかにもよるのでは?
138:名無しさん@お腹いっぱい。
03/12/10 10:17
dired で % g
139:名無しさん@お腹いっぱい。
03/12/10 10:30
全部読まなくても
(insert-file-contents FILENAME &optional VISIT BEG END REPLACE)
でファイルの一部だけを読む事ができるよ。
140:136
03/12/11 23:27
御回答どもです
>>137
どんな調査ってのはイロイロあるものの,
コレさえ解決できればってのは無くて,
要は,
open→無視して良いデータは破棄しつつ満足するまでread→close
ってのをやりたいだけでして…
>>139
ありがとうございます。
info読みなおしました…
今まで如何にイイカゲンに読んでたかを思い知りますた…
名前付きパイプとかも読めちゃうんすねコレ…
141:名無しさん@お腹いっぱい。
03/12/26 16:20
一つの関数でλを定義する数は何個ぐらい許されるんでしょうか?
142:名無しさん@お腹いっぱい。
03/12/26 17:03
なにがしたいのか分からんが、とりあえず作ってみたら?
もっと意図を明確にしたうえで、ム板のスレで質問するのがいいと思うが。
143:名無しさん@お腹いっぱい。
03/12/26 22:02
(defun newschangelog (start end)
"ChangeLog中の不必要な部分を削除"
(interactive "r")
(save-excursion
(save-restriction
(narrow-to-region start end)
(goto-char start)
(replace-regexp "^[ \t]*.*STRONG.*" "")
(goto-char start)
(replace-regexp "^ *<A HREF.*" "")
(goto-char start)
(replace-regexp "</A></DT>" "")
(goto-char start)
(delete-matching-lines "^$")
(goto-char start)
(replace-regexp "^[ \t]*" "\t")
)))
* news/index.html: 記事追加
★ PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品</A></DT>
<DT><STRONG>日経BizTech</STRONG>
<A HREF="URLリンク(biztech.nikkeibp.co.jp)">
日本SGI、Linux向けのシステム構築支援サービス</A></DT>
<DT><STRONG>c|net</STRONG>
<A HREF="URLリンク(japan.cnet.com)">
日本国内のLinuxサーバ市場:ビジネス利用には課題が多い</A></DT>
☆
上記★から☆までがリージョンに指定されている状態だとします。このとき、
カーソルが★にあるのか☆にあるのかで、M-x newschangelog の結果が異なり
ます。
144:143の続き
03/12/26 22:03
具体的には、カーソルが☆にあると
PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品
<DT><STRONG>日経BizTech</STRONG>
日本SGI、Linux向けのシステム構築支援サービス
<DT><STRONG>c|net</STRONG>
日本国内のLinuxサーバ市場:ビジネス利用には課題が多い
となり、カーソルが★にあると
PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品
日本SGI、Linux向けのシステム構築支援サービス
日本国内のLinuxサーバ市場:ビジネス利用には課題が多い
となります。
希望する結果は、カーソルが★☆のどちらにあっても
PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品
日本SGI、Linux向けのシステム構築支援サービス
日本国内のLinuxサーバ市場:ビジネス利用には課題が多い
のようになることです。添削おねがいします。
145:名無しさん@お腹いっぱい。
03/12/26 23:41
なんか例示されてるのと違い、空行が入ってしまうなーと思ったら、
transient-mark-mode かどうかで挙動が違うな。
で、offにして試してみたけど、どちらも okっぽかったけれど。
146:143
03/12/27 00:21
検証ありがとうございます。おっしゃるとおり、手元の Emacs 20.7.2 を
\emacs -qで起動すると、★☆どちらにカーソルがあっても希望の結果になり
ました(transient-mark-mode t/nil のどちらも)。
ところが、XEmacs 21.1 を \xemacs -q で起動させて確認したところ、
transient-mark-mode t/nil どちらの場合も 144 に書いた結果になるのです。
常用しているのは XEmacs なので、それで希望の結果が出て欲しいのです。
皆様のアドバイスをいただきたく思います。よろしくお願いします。
147:名無しさん@お腹いっぱい。
03/12/27 05:08
replace-regexp を
(while (re-search-forward REGEXP nil t)
(replace-match TO-STRING nil nil))
にすれば直るはず。
特別な理由がない限り lisp program 中で replace-regexp は使わないほうが
いいです。 perform-replace を参照。
148:143
03/12/27 22:46
147氏のおっしゃるように修正したところ、XEmacs, Emacs の両者で
希望の動作をしてくれるようになりました。ありがとうございます。
149:名無しさん@お腹いっぱい。
04/01/04 14:13
>>1 のelispリファレンス-ja
URLリンク(www.fan.gr.jp)
は 27章 ウィンドウ がまるごと抜けてるからちょっと不便ですた。
ちょっと探したら、
URLリンク(www.i.kyushu-u.ac.jp)
を発見。こっちはちゃんと27章があるじょ。
スタイルシートでカラフルで見やすいなり。
にしても、emacs21版のelispリファ-ja は まだどこにもないんでしょか。
150:名無しさん@お腹いっぱい。
04/01/04 14:43
149が訳すことにケテーイしますた。
151:名無しさん@お腹いっぱい。
04/01/04 16:33
がんがれー
152:名無しさん@お腹いっぱい。
04/01/04 17:13
URLリンク(www.gnu.org)
これだけ訳せばいいんだろうか?
153:名無しさん@お腹いっぱい。
04/01/05 19:56
>>152
駄目.
URLリンク(www.i.kyushu-u.ac.jp)
にあるように,日本語は改変が認められていません.
故に公開したければ,全文を訳し直す必要がある.
154:名無しさん@お腹いっぱい。
04/01/05 21:01
その GPL 和訳の由来はここ。
URLリンク(www.sra.co.jp)
これにも同じく
> ・和文文書の本文を改変しないこと。
とある。つまり、禁止してるのは「GPL の和文本文」の改変であって、
Emacs Lisp Reference Manual の和文ではない。
そもそも、元の文書が GPL なのだから改変禁止は不可能。
155:名無しさん@お腹いっぱい。
04/01/05 23:46
恐ろしいほどの部分引用だな
156:名無しさん@お腹いっぱい。
04/01/23 04:41
asm-mode で新規作成/既存ファイル開く、でファイル先頭に;(コメント文字) が
自動的に挿入されてしまうんだけど、これを抑制する方法ないでつか?
157:名無しさん@お腹いっぱい。
04/01/23 09:11
それだけでは、うちではそんなことはないとしか言いようがないよ。
それは本当にasm-modeが入れているものなのかな?
158:名無しさん@お腹いっぱい。
04/01/23 11:26
-q つけて起動したら再現しませんでした…出直してくるぽ。
新規作成したバッファの状態を監視しつつ
edebug でステップ実行したいんですけど、
バッファが見当たらない… asm-mode が
呼ばれたときはバッファが存在してるはずでつよね?
159:156
04/01/23 11:29
まちがえて age ちゃった。 ごめんでつ。>>158 は >>156 です。
160:名無しさん@お腹いっぱい。
04/02/02 02:00
最近の elisp では when とか unless とか出て来るんですけど、
わたしは while と if と cond くらいしか使いません。
when, unless の利点は何ですか?
161:名無しさん@お腹いっぱい。
04/02/02 02:01
>>160
progn 使わなくていい
162:名無しさん@お腹いっぱい。
04/02/02 02:29
whenとあったとき、ifと違い条件の成立しなかった時の処理はないのだと
一目で分かる。
163:名無しさん@お腹いっぱい。
04/02/02 02:38
欠点はいらんのか
164:名無しさん@お腹いっぱい。
04/02/02 02:45
別に ifと置換えとかじゃないし、単純すぎる構文だから欠点もなにも……。
165:160
04/02/02 02:55
ってことは別に無理して使わなくてもいいってことか。
マクロってよくわかんないけど subr.el 見たら、if に置き換えてるだけみたいね。
166:名無しさん@お腹いっぱい。
04/02/06 02:12
navi2chなんかで、エンター押したらその行に関係する動作をする機能を作るには
何を使えばいいのでしょうか。
key map を使うのかと思ってnavi2chのソースをみたのですが、
define-key map [return] という行は見つかりませんでした。
167:名無しさん@お腹いっぱい。
04/02/06 03:23
そのレベルの質問なら、navi2chスレのほうが適切と思うが。
168:名無しさん@お腹いっぱい。
04/02/06 04:15
(define-key map "\r" 'navi2ch-article-select-current-link)
169:名無しさん@お腹いっぱい。
04/02/06 04:45
今回の場合、describe-key で returnに対応するコマンドを調べて、
それを元に grepすれば >>168が見つかりますな。
170:名無しさん@お腹いっぱい。
04/02/06 11:48
C-h w RET
171:名無しさん@お腹いっぱい。
04/02/06 11:49
w じゃなくて k だ
172:名無しさん@お腹いっぱい。
04/02/06 12:08
ある関数内で auto-compression-mode を有効に束縛したいんですが
(let ((auto-compression-mode t))
(insert-file "foo.gz"))
じゃ駄目なんですね。
(let ((current auto-compression-mode))
(auto-compression-mode t)
(insert-file "foo.gz")
(auto-compression-mode current))
こうすべきもんなんでしょうか。なんかもっとスマートな方法ありますか?
173:166
04/02/06 12:15
>>167-171
みなさんありがとうございました。
勉強になりました。
[return] ではなくて"\r"で定義してあるんですね。
174:名無しさん@お腹いっぱい。
04/02/06 12:21
>>172
> じゃ駄目なんですね。
変数じゃないならだめだよ。
175:172
04/02/06 12:36
>>174
いちお変数でもあるんですけどね、って今見てみたら docstring に
Setting this variable directly does not take effect;
と書いてあった…失礼しますた。やっぱあんな方法でやるしかないのかなあ。
176:名無しさん@お腹いっぱい。
04/02/06 13:23
with-auto-compression-mode
177:名無しさん@お腹いっぱい。
04/02/06 18:24
>>176
おーありがとうです。こんなのがあったのか。感謝。
178:名無しさん@お腹いっぱい。
04/02/06 22:10
emacs21のtool-bar にあるプリンタアイコンはprint-bufferですが、
これを.emacsでpostscript-print-bufferに変えたいんですが、どうやれば
良いすかね?
179:名無しさん@お腹いっぱい。
04/02/07 00:26
(setq tool-bar-map (delq (assq 'print-buffer tool-bar-map) tool-bar-map))
(tool-bar-add-item-from-menu 'ps-print-buffer "print")
でどうでしょ
180:名無しさん@お腹いっぱい。
04/02/09 16:51
空のファイルを作成したいのですがどうやればいいんでしょうか?
動作としては↓のような感じです。
% touch hoge
(hogeというファイルは存在していないとして)
181:名無しさん@お腹いっぱい。
04/02/09 17:27
(write-region (point-min) (point-min) "hoge" t)
182:名無しさん@お腹いっぱい。
04/02/09 20:37
>>181
ありがとうございました。
183:名無しさん@お腹いっぱい。
04/03/20 18:29
だれか、mmm で php-mode の indent が効かなくなるの直してくれ。
184:名無しさん@お腹いっぱい。
04/03/24 08:35
mmm と php-mode てなんか相性わるいよね。
漏れは別の不具合のせいで、結局php-mode 単体でつかってまふ。
185:名無しさん@お腹いっぱい。
04/05/01 12:53
'(1 2) '(3 4) => (4 6)
みたいにリストの各要素を足してくれるような関数ってありませんでしたっけ?
186:名無しさん@お腹いっぱい。
04/05/01 13:16
(mapcar* '+ '(1 2) '(3 4))
clだけど。
187:185
04/05/01 13:29
>>186
あれこれ探してみてたんですが cl にあったのか、どうもですた。
188:名無しさん@お腹いっぱい。
04/05/10 20:39
arg1 が non-nil なら a-list に arg2 を append、
arg1 が nil なら b-list に arg2 を append、って処理をやりたいんですが
(defun my-test (arg1 arg2)
(if arg1
(setq a-list (append arg2 a-list))
(setq b-list (append arg2 b-list))))
これじゃちょっと不恰好な気がします。スマートに実装する方法ありませんか
ね。
189:名無しさん@お腹いっぱい。
04/05/11 01:40
(let ((sym (if arg1 'a-list 'b-list)))
(set sym (append arg2 (symbol-value sym))))
190:名無しさん@お腹いっぱい。
04/05/11 18:30
>>189
set ってこんな時に使えるのか。サンクスコでした。
191:名無しさん@お腹いっぱい。
04/05/12 08:04
マ板、Emacs Lispスレから流れてきました。
○×ゲームを作っていくという話題。
とりあえず、入力はこんな感じで。
(read-from-minibuffer " │○│
―┼―┼―
│×│
―┼―┼―
│ │ コンマで区切って2つの数字を入力してください。(例 0,0)")
192:名無しさん@お腹いっぱい。
04/05/12 13:06
何でminibuffer使う?
一瞬 gomoku.el の部品が使えないかなと思ったけど
自分で書いた方がはやそう。
193:名無しさん@お腹いっぱい。
04/05/12 15:56
○×か。最初から敷居が高いなぁ。
入力はコンマ区切りよりリストとして入力させる方が良いハックじゃないかな?
コンマはパースしなくちゃいけないし。
194:名無しさん@お腹いっぱい。
04/05/12 16:10
何も考えずに、ここまでやってみた。ボードと終了判定があるだけ。
あとは、エラーチェックの徹底と思考ルーチンかな。
長いので2回に分けます。
(defun ox-index (x y) (+ (* y 3) x))
(defun ox-line (vector y)
(format "%c|%c|%c"
(aref vector (ox-index 0 y))
(aref vector (ox-index 1 y))
(aref vector (ox-index 2 y))))
(defun ox-board (vector)
(format "%s\n-+-+-\n%s\n-+-+-\n%s\n"
(ox-line vector 0)
(ox-line vector 1)
(ox-line vector 2)))
(defun ox-read (vector o-or-x)
(1- (string-to-int
(read-from-minibuffer (format "%s (%cの番です) " (ox-board board)
o-or-x)))))
195:名無しさん@お腹いっぱい。
04/05/12 16:12
しょの2
(defun ox-game-over-p (vector)
(catch 'loop
(dolist (indexes '((0 1 2) (2 5 8) (7 6 8) (0 3 6)
(0 4 8) (1 4 7) (2 4 6) (3 4 5)))
(let ((marks (mapcar #'(lambda (i) (aref vector i)) indexes)))
(when (or (null (remove ?O marks)) (null (remove ?X marks)))
(message (format "%s (%cの勝ちです。)" (ox-board board) (car marks)))
(throw 'loop t))))))
196:名無しさん@お腹いっぱい。
04/05/12 16:13
あとminibufferよりも新しく編集バッファを作成してエディタ内のテキストを
操作する方が良いと思う。二次元の平面を扱うなら。
例えば以下のような感じ。
(progn (get-buffer-create "hoge")
(switch-to-buffer "hoge")
(erase-buffer)
(insert "○|×|○ \n")
(insert "×|○|○ \n")
(insert "×|○|× \n"))
197:名無しさん@お腹いっぱい。
04/05/12 16:13
しょの3
(defun ox ()
(interactive)
(let ((board (vconcat '(?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)))
(o-or-x ?O)
i mark)
(while (not (ox-game-over-p board))
(setq i (ox-read board o-or-x))
(setq mark (aref board i))
(if (member mark '(?O ?X))
(progn
(message (format "%s (そこには置けません)" (ox-board board)))
(sit-for 1))
(aset board i o-or-x)
(setq o-or-x (if (eql o-or-x ?O) ?X ?O))))))
198:名無しさん@お腹いっぱい。
04/05/12 16:20
Emacsって何?
199:名無しさん@お腹いっぱい。
04/05/12 16:22
>>192
> 何でminibuffer使う?
> 一瞬 gomoku.el の部品が使えないかなと思ったけど
> 自分で書いた方がはやそう。
その場のノリですが、むりやり理由をつければゲーム後に画面の後かたずけとかが自動的に行われるからです。
>>193
>入力はコンマ区切りよりリストとして入力させる方が良いハックじゃないかな?
>コンマはパースしなくちゃいけないし。
置ける場所に番号を書いておいて、それを入力してもらう方法をとってみました。
思考ルーチンも総あたりすればいいだけですね。
ox-game-over-pではthrowでdolistを早抜けしているんですけど、elisp的な
定石はこれでいいのでしょうか。
200:鬱­猫­2030 ◆utuPOcVnl.
04/05/12 18:14
ここで>>1を読んで修業すればnavi2chみたいの書けますか?
201:名無しさん@お腹いっぱい。
04/05/12 19:22
書けるよ
202:鬱­猫­2030 ◆utuPOcVnl.
04/05/12 21:20
ネット関係のライブラリが標準で用意されているのですか?
P2P関係のものを何か作りたいのですがtcp/ip層までいじれますか?
203:名無しさん@お腹いっぱい。
04/05/12 21:43
リリースされてる版だと、Emacs Lisp からできるのは TCP の connect(2) だけ。
accept(2) へのインターフェイスは 用意されてないから P2P やりたいなら
下請けの外部プログラムが必要。
204:名無しさん@お腹いっぱい。
04/05/13 00:53
M-x namazu とする代わりに F2 キーでカーソルのある単語を検索できればと思い,
namazu.el を読んだ上で以下のように設定しました
しかしこの設定で F2 キーを叩いても,
別のバッファが開いて「32 件検索しました」 という
メッセージが出るところまで行くのですが
検索結果がでません どこを直せばよいのでしょうか
(global-set-key [(f2)]
(lambda ()
(interactive)
(namazu namazu-search-num namazu-default-dir
(current-word))) )
205:名無しさん@お腹いっぱい。
04/05/13 04:54
namazu の最初の引数は PAGE-NUM みたいなので普通は 0 でしょう。
206:204
04/05/14 00:09
>>205 コメントありがとうございます
0 を入れてみたのですが改善しませんでした
出力結果は以下のようにヘッダとフッタだけ出てるようで中身が出ません
M-x namazu でインタラクティブに実行するのは問題ないのですが。。。
検索結果
参考ヒット数: [ BufferedReader: 52 ]
検索式にマッチする 52 個の文書が見つかりました。
現在のリスト: 1 - 0
ペイジ: [1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17][18][19][20]
207:名無しさん@お腹いっぱい。
04/05/14 00:35
namazu-search-num が 0 になってない?
(namazu namazu-search-num namazu-default-dir (current-word))
で namazu-search-num を 0 にするんじゃなくて、
(namazu 0 namazu-default-dir (current-word))
にしたら? ってこと。
208:名無しさん@お腹いっぱい。
04/05/14 14:01
読書メモの為に下みたいなのを挿入したいのですけども。
Date:2004-01-26
Page:
Memo:
で、ムチャクソ頑張って下みたいなのを書きました。
(defun bookz ()
"Retune the current time as a string in Date from."
(format-time-string "Date:%04Y-%02m-%02d\nPage:\nMemo:")
)
(defun insert-bookz nil
"Insert bookz."
(interactive)
(insert (bookz))
)
(define-key global-map "\C-c\C-d" 'insert-bookz)
なんかもっと綺麗に書く方法とかありますか?
209:名無しさん@お腹いっぱい。
04/05/14 15:39
>>208
> なんかもっと綺麗に書く方法とかありますか?
ispellを使う、とか
210:名無しさん@お腹いっぱい。
04/05/14 16:34
しかしそれでもfromを見つけられない罠
211:名無しさん@お腹いっぱい。
04/05/14 17:04
queequegも利用してみるとか? 試したことないけど。
212:名無しさん@お腹いっぱい。
04/05/14 18:41
そのまま翻訳にかけてみるのも手かもな
213:204,206
04/05/19 22:32
>>207 コメントありがとうございます
namazu-search-num が 0 になってない?
おかげさまで以下のようにしてうまく行きました
(setq namazu-search-num 20)
...
(namazu 0 namazu-default-dir (current-word))
てっきりnamazu-search-num と
namazu の第一引数は同じにするものだと思いこんでいました
ありがとうございました
214:名無しさん@お腹いっぱい。
04/05/26 15:39
(defun display-binaried-file (file)
(interactive "fFilename: ")
(with-output-to-temp-buffer "Binary"
(with-temp-buffer
(let ((addr 0)
s)
(insert-file-literally file)
(goto-char (point-min))
(while (re-search-forward "\\=\\(?:.\\|\n\\)\\{1,8\\}" nil t)
(princ (format "%08X:" addr))
(setq s (match-string 0)
addr (+ 8 addr))
(mapc (lambda (c)
(princ " ")
(dotimes (i 8)
(princ (if (zerop (logand 128 c)) "0" "1"))
(setq c (lsh c 1))))
s)
(princ (format "%s %s\n"
(make-string (* 9 (- 8 (length s))) ?\040)
(mapconcat (lambda (c)
(if (and (<= 32 c) (< c 127))
(char-to-string c)
"."))
s
nil))))))))
215:名無しさん@お腹いっぱい。
04/05/26 15:49
>>214
あんがとね。
いやー、あんた最高だよ。
216:名無しさん@お腹いっぱい。
04/05/28 20:45
>>214
イイ!!
> (mapc (lambda (c)
> (princ " ")
> (dotimes (i 8)
> (princ (if (zerop (logand 128 c)) "0" "1"))
> (setq c (lsh c 1))))
> s)
でもここはdotimesよりそのまんま
(princ (if (zerop (logand 128 c)) "0" "1"))
(setq c (lsh c 1))
(princ (if (zerop (logand 128 c)) "0" "1"))
(setq c (lsh c 1)) ....
のように羅列した方が少々早くなんない?(コードが汚くなるのは認めるけど)
1 character ずつ dotimes やってたら大きなファイルの時に
かなり遅れるかもしれんし。
217:名無しさん@お腹いっぱい。
04/05/28 21:27
速度命!ならビットパターンを表す文字列をキャッシュしといた方が簡単確実。
218:名無しさん@お腹いっぱい。
04/05/28 23:47
>>216
速度を考えるなら、大量のリストや文字列を作らないようにすることも重要と
考えている。その点で 214 は文字列に関してちょっとイージー、というか所
詮ワンショットの関数。バッファ終端の判定を楽にしたいという理由だけで8
バイトずつ文字列に突っ込んでいる。
> (princ (if (zerop (logand 128 c)) "0" "1"))
> (setq c (lsh c 1))
> (princ (if (zerop (logand 128 c)) "0" "1"))
> (setq c (lsh c 1)) ....
せめて、
(princ (if (zerop (logand 128 c)) "0" "1"))
(princ (if (zerop (logand 64 c)) "0" "1"))
(princ (if (zerop (logand 32 c)) "0" "1")) ...
だな。
(princ (mapconcat
(lambda (mask) (if (zerop (logand mask c)) "0" "1"))
'(128 64 32 16 8 4 2 1)
nil))
はありだった。
insert-file-literally は insert-file-contents-literally じゃなきゃだめ。
219:名無しさん@お腹いっぱい。
04/05/29 02:41
(do ((x 128 (rsh x 1)))
((<= x 0))
(princ (if (zerop (logand x c)) "0" "1")))
220:名無しさん@お腹いっぱい。
04/05/29 03:06
たった 256 個だから
(defconst byte-to-bit-string
(let ((v (make-vector 256 nil)))
(dotimes (i 256) ...)))
してあらかじめ作っとけばいいじゃん。
221:名無しさん@お腹いっぱい。
04/05/29 11:45
(defconst byte-to-bit-string
(let ((a '("0" "1"))
(f (lambda (&rest x)
(let ((x (reverse x)) (r '("")))
(while x
(setq r (apply #'append (mapcar (lambda (x) (mapcar (lambda (y) (concat x y)) r)) (car x))))
(setq x (cdr x)))
r))))
(funcall f a a a a a a a a)))
222:名無しさん@お腹いっぱい。
04/05/29 12:05
なんかビット絡みはついてけない(´・ω・`)ショボーン
223:名無しさん@お腹いっぱい。
04/05/29 14:07
>>219
rshって、remote shellで実行するのか?
昔から思ってたんだけど、logand/logiorってRMSのチョンボだな。
logicalじゃなくてarithmaticだろ。
またnatnumpってのもあるけど、0はnatunal numberじゃない。
224:名無しさん@お腹いっぱい。
04/05/29 14:13
>>223
> 0はnatunal numberじゃない。
定義による。
0を自然数に含めることもある。
URLリンク(www.ss.u-tokai.ac.jp)
225:名無しさん@お腹いっぱい。
04/05/29 14:32
>>224
そうか。
じゃMITじゃビットAND/ORもlogicalって呼ぶのかもしれないな
226:名無しさん@お腹いっぱい。
04/05/29 14:39
>>223
aithmatic じゃなくて bit-and/or operatorか。
227:名無しさん@お腹いっぱい。
04/05/29 16:17
(defun write-binaried-file (filename)
(interactive (list (read-file-name "Write file: " nil buffer-file-name
nil buffer-file-name)))
(let (i
buf
temp-buffer-show-hook)
(with-output-to-temp-buffer " *outbuf*"
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(while (re-search-forward "^\\([0-F]+\\): +\\(?:\\(?:[01]\\{8\\}\\) \\)\\{8\\}" nil t)
(goto-char (match-end 1))
(setq i 0)
(while (< i 8)
(re-search-forward "[01]+")
(princ (char-to-string (string-to-number (match-string 0) 2)))
(setq i (1+ i))))
(if (re-search-forward "^\\([0-F]+\\): +\\([01]\\{8\\}\\) ")
(progn
(goto-char (match-beginning 2))
(setq i 0)
(while (and (< i 8) (re-search-forward "\\=\\([01]\\{8\\}\\) " nil t))
(princ (char-to-string (string-to-number (match-string 1) 2)))
(setq i (1+ i)))))
(setq buf standard-output))))
(set-buffer buf)
(let ((coding-system-for-write 'no-conversion))
(write-region (point-min) (point-max) filename))
(kill-buffer buf)))
228:名無しさん@お腹いっぱい。
04/05/29 17:02
>>227
save-XX 2つはwith-output-to-temp-bufferの外の方がよかった。
エラーチェックなんてほとんどしてないので、上書きとかしない方がいいかも。
229:名無しさん@お腹いっぱい。
04/05/29 17:37
たいしたことではなくてすまんのだが、write-binaried-file
はwrite-file-in-binaryの方がアメ人側からするとわかりやすいとおもた。
230:名無しさん@お腹いっぱい。
04/05/29 17:55
今になって知ったんだが、hexl-modeは外部プログラムを使ってたんだな。
2進表示より、右側に全角文字を表示をして欲しいんだが、そういうことを考
えると、やっぱelispだ。
231:名無しさん@お腹いっぱい。
04/05/29 18:08
全角文字
232:名無しさん@お腹いっぱい。
04/05/30 20:15
----BEGIN BASE64----(binary-dump.el.gz)
H4sICJnAuUAAC2JpbmFyeS1kdW1wLmVsAKVY227jNhB9tr/iwEBjqjUDy/fUcdwm
zQIF+lT0cR8qS0wsrCx5KWWzBop+e4ek7rKcRM2LKR7OhTPDM2TW6zV2fujIE/de
DsdrEYBzDtcN4EaeHz4jPsWJOOApkvD8+Bg4JzVrZKBl+mtS8sC/48/Hv+CW1enZ
B/6ET7//8YgkQiyEGfthVUWfiW9OwF/3IuRudDj6gaA5Tzy90EKP3OFSOB7fnRIB
5lt9gAUiAWNSPNNEmAgZgpGTByfBQP7gDWhBvIcPblvqjyRIxn8C22BMWPTshB5s
+AT1/lZ6HA8j0maByTl+2sCmkZrA7YpEUg1AthZyZqGx9p+NmtcGq+6/Sj8RfO/v
fPJarSSPDxSBJJJKM2lVvmkdVxhp323Yc4sUa1Fs7WI4Lu+nLjPrIDPtIDPpIGN3
kBl/XAY3HWRWb8iY71Epby1JDqIPJRnLDs4uOsh0KCZ0KCZ0KCZ0KCZ0KCa8VUzv
TnLKRLUMM1rmOkHQwjQYNslg2CgdIiTt/lukppeVPW11lLt7R6a8qfhrhg2F5p0W
Rr+0bYbd3dGpod8rTObzKsuSjVtMJ0WIr60cuMP23ypghpo5tYrGXg7OF8Fj8RUs
LJF/gNAP8tTtqWmA3WpHY5F8BW3N5gitnLvNNGXHjcKY4CCDgobBvN3EmUnneAxO
GNKPoBCwg3N0VVAD57DzHBVcsHqn0s2l18uAfBNha4OoW9Sm3m250KHM9npm135W
jX4WD0oMtj9bxrvz7qnUU6mk54EZLJGq97MfcQPGsUpVtbc7vZu0+P73lowe/wNO
U5Zdquuq88ZvXZqDz+Gg5LwqigR78V0Z4t+ES4eKSkbL8STKZgZjezKdzRfL1c2v
9w+/PX4atOze8TwpYsqmOXamSuVSnT0mF6DDM6HTc1Xp8gSPqh5Y5+RmHeXG3eTs
RUe5STc5dIwLOsYFOi6rd4gZmIrnPE2lLO6Hol7wZwpDl2ujzImXWgBzAHSd91PD
ZIirVUcZPUvnQAbVlyfo7k5CxUVcF6Btmw2r22y/R1weHfX91XwbriCyb/DfqomW
9lmgSjfdhcsT4iicpOBf2pR0QncPOc/WKAbHej1qKi6cwhnUvohOLqLTi+jsIjq/
iC4uossCzUnnfAZFeCaDQ2YjzVqaO/UOkeOssY6x2ZiWuyPki1WOv7ZbFYO0ISeQ
U+q7lBBQ9qTysJd18KXSp25J9Lyjj1ef7jU7AU8QJb64ifD6WYcp2de3KjWkw3+T
Dy0rXduycpUNx5ZVdsEuL6S31WJWgSc1WPWiEjytwURjZXhWg1cVdF5Dq5YXNTQ3
nPLHOP3MUlQSzdJURO9COrefw/P5zAopxfL41lOef6t6043QvOt5+q6n+2fpvT7D
9h6D++JlPkBmasjOUwuuWypWWVw3/71AbBhTk5Xiuv8fdZ8WR30QAAA=
----END BASE64----
233:名無しさん@お腹いっぱい。
04/05/30 21:00
>>232
いやー、かなり早くなったね。
234:名無しさん@お腹いっぱい。
04/05/30 22:55
>>232
すごいすごい。
せっかくなので、アドレス部の表示をファイル位置にできたりしませんか?
(insert-file-contentsでBEG ENDを指定した場合など)
235:名無しさん@お腹いっぱい。
04/05/30 23:34
ヽ(`Д´)ノ cclってナンダヨー
236:名無しさん@お腹いっぱい。
04/05/31 11:55
>>235
code convetion lang
237:名無しさん@お腹いっぱい。
04/05/31 15:49
16bit,32bit,64bit,128bit単位の表示、および
ビッグ・エンディアン、リトル・エンディアンの切り替え
もできれば、言うこと無しだが・・・
238:名無しさん@お腹いっぱい。
04/06/03 17:13
(defun bdccl-write-8bit (reg terminator bit)
(let ((x (+ bit 8)) (r (list `(write ,terminator))))
(while (< bit x)
(setq r (cons `(if (,reg & ,(lsh 1 bit)) (write ?1) (write ?0)) r))
(setq bit (+ bit 1)))
r))
(defun bdccl-write-hibit (reg terminator)
(bdccl-write-8bit reg terminator 8))
(defun bdccl-write-lobit (reg terminator)
(bdccl-write-8bit reg terminator 0))
239:名無しさん@お腹いっぱい。
04/06/09 23:51
すいません初歩的質問なんですが、リファレンスマニュアルを最終的にPDF化したいのですが、
fURLリンク(ftp.ascii.co.jp)
これを展開して、README.jisを読んだんですが、elisp.dviの作成手順で
GNU Emacs Lisp Reference Manual のソースツリーのファイルtexinfo.texが
どこにあるのだか分かりません。どこにあるんでしょうか?
240:名無しさん@お腹いっぱい。
04/07/02 17:30
>>239
texinfo のソースツリーに入ってます。
URLリンク(savannah.gnu.org)
ところで、bookshelf.jp にある私的日本語化プロジェクトは
texinfo 形式のソースがあるのかな?
241:名無しさん@お腹いっぱい。
04/07/02 21:33
>>240
texinfo でやってますので,ソースはありますけど,公開はしてません.
242:名無しさん@お腹いっぱい。
04/07/02 21:42
では公開していただけますか?
243:名無しさん@お腹いっぱい。
04/07/03 09:21
>>241
あ、texinfoのやつがあると僕もうれしい。支障なかったら公開きぼんぬです。
244:名無しさん@お腹いっぱい。
04/07/03 09:45
>> 242,243
支障ないので,そのうちに公開しておきます.
少しお待ちを
245:名無しさん@お腹いっぱい。
04/07/13 23:34
>>232
(defun bdccl-write-hibit (reg terminator)
`((if (,reg & ,(lsh 1 15)) (write ?1) (write ?0))
(if (,reg & ,(lsh 1 14)) (write ?1) (write ?0))
(if (,reg & ,(lsh 1 13)) (write ?1) (write ?0))
...
(lsh 1 15) これを下のように定数にしないのは
マクロ展開されるて、実行時には関係なくなるから?
(defun bdccl-write-hibit (reg terminator)
`((if (,reg & 32768) (write ?1) (write ?0))
(if (,reg & 16384)) (write ?1) (write ?0))
246:名無しさん@お腹いっぱい。
04/07/13 23:37
>>232
と同じような Hex dump ってあるのかな? そっちの方が僕は使うな。
binary にしてどんな時に便利か教えてくれ。
247:名無しさん@お腹いっぱい。
04/08/11 23:45
ほしゅ。
248:名無しさん@お腹いっぱい。
04/08/15 01:57
つか、ほしゅしなくても落ちないのでは?
249:名無しさん@お腹いっぱい。
04/09/07 11:11
連番を作るのに、こんなのを作ってるんだけど、
うまく動かない。 どこが悪いのかな…。
(do ((i 1)) ((> i 10))
(insert (format "Sequence%d\n" i))
(setq i (1+ i)))
250:名無しさん@お腹いっぱい。
04/09/07 11:43
あなたは elisper ではありませんね?
251:名無しさん@お腹いっぱい。
04/09/07 14:16
先生!
このマンコ関数はどうでしょう?
(defun manko(i)
(cond ((> i 0) (insert (format "Sequence%d\n" i)) (manko (- i 1)))
(t nil)))
(manko 10)
252:名無しさん@お腹いっぱい。
04/09/07 23:36
number-sequence
253:249
04/09/08 11:31
>>251
ありがとう。
でも、こういわれてしまう…。
Debugger entered--Lisp error: (void-function manko)
(manko 10)
eval((manko 10))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
* call-interactively(eval-last-sexp)
recursive-edit()
byte-code("堰ニ!秩ー∨ 秩ー¬!秩ッ⊃n�?
254:名無しさん@お腹いっぱい。
04/09/09 21:01
(do ((i 1 (1+ i)) ((> i 10))
(insert (format "Sequence%d\n" i)))
255:名無しさん@お腹いっぱい。
04/09/09 22:02
ちゃんと書きなよ。
しかし do なんか使わなくても。
256:249
04/09/09 22:37
>>254
環境が悪いのでしょうか。
Debugger entered--Lisp error: (invalid-function (i 1 (1+ i)))
((i 1 (1+ i)) ((> i 10)) (insert (format "Sequence%d\n" i)))
eval(((i 1 (1+ i)) ((> i 10)) (insert (format "Sequence%d\n" i))))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
* call-interactively(eval-last-sexp)
257:名無しさん@お腹いっぱい。
04/09/09 23:43
>>249
そもそも「うまく動」いたらどうなるんだ?
期待してる結果が書いてない。
258:名無しさん@お腹いっぱい。
04/09/10 01:03
(require 'cl)
(do ((i 1 (1+ i))) ((> i 10))
(insert (format "Sequence%d\n" i)))
259:名無しさん@お腹いっぱい。
04/09/10 09:17
なんか覚えにくい構文だな。
まだloopのほうが、という気がした。
260:名無しさん@お腹いっぱい。
04/09/10 10:12
eldocでミニバッファに出るから覚えなくても書ける。
でも普通はdotimesなんかを使うとは思うんだが。
261:名無しさん@お腹いっぱい。
04/09/10 11:14
エコーエリア
262:249
04/09/10 17:28:00
>>258
ありがとう!!
(require 'cl)
これが不足でした。
(do ((i 1 (1+ i))) ((> i 10))
(insert (format "Sequence%d\n" i)))
(do ((i 1)) ((> i 10))
(insert (format "Sequence%d\n" i))
(setq i (1+ i)))
どちらでも動きました。
しかし。
doなんてとか、loopのほうが、っていうなら、
サンプルを掲示してみてはどうでしょう。
言い合いをしているだけでは何にもならないじゃないですか。
263:名無しさん@お腹いっぱい。
04/09/10 17:48:24
「してくれないでしょうか?」の間違いではなくて?
個人的には、何故doでやってみようとしたかに興味が少しある。
264:260
04/09/10 18:49:50
>>262
調べろよ、それくらい。
見て猿真似できるサンプルが出てこないと何も出来ない池沼なのかよ。
キーワードが出てくるだけで十分だろ。
# cl-macsにloopがあるとは知らんかった
そもそも「言い合い」になるほど骨のある内容じゃなかったし。
265:名無しさん@お腹いっぱい。
04/09/10 19:05:04
池沼というのは、マンコ関数でひっかかってる時点で明らか。>>253
266:260
04/09/10 19:15:10
言われてみればその通りだった。orz
267:名無しさん@お腹いっぱい。
04/09/12 01:45:39
(let ((i 0))
(while (< i 10)
.....
))
とかの方が分かりやすくて好きなんだけどな
268:名無しさん@お腹いっぱい。
04/09/12 04:07:53
viperで、vimの"*"コマンドを実装した。
(define-key viper-vi-global-user-map "*" 'viper-exec-word-search-nearest-cursor)
(define-key viper-vi-global-user-map "#" '(lambda () (interactive) (viper-exec-word-search-nearest-cursor t)))
(define-key viper-vi-global-user-map "g*" '(lambda () (interactive) (viper-exec-word-search-nearest-cursor nil t)))
(define-key viper-vi-global-user-map "g#" '(lambda () (interactive) (viper-exec-word-search-nearest-cursor t t)))
(defun viper-exec-word-search-nearest-cursor (&optional reverse unbound)
"Emulate vim \"*\" command."
(interactive)
(let ((word (viper-surrounding-word 1 1)))
(when (stringp word)
(setq viper-s-string (if unbound word (concat "\\<" word "\\>")))
(setq viper-s-forward (not reverse))
(setq viper-search-history (cons viper-s-string viper-search-history))
(setq viper-intermediate-command 'viper-exec-word-search-nearest-cursor)
(viper-search viper-s-string viper-s-forward 1))))
269:名無しさん@お腹いっぱい。
04/09/12 09:49:16
>>268
おーなかなかいいすね。使わせてもらいまっさ。
でも g + hogehoge は viper 流の (viper-buffer-search-enable) の方が好き :-)
;; しかし viper 異様に重いよなあ…。ボクのマシンがボロなだけ?(´・ω・`)
270:名無しさん@お腹いっぱい。
04/09/12 14:11:08
再帰好きなelisperの人は
max-lisp-eval-depth と max-specpdl-size に
どのくらいの値を設定してるの?
271:268
04/09/18 10:06:39
www.vim.orgで公開されているscriptで定番のやつの実装。
;;; alternate files quickly
(defvar a-extension-map
'(("c" . "h") ("cc" . "h") ("h" . ("c" "cc")) ("emacs" . "viper") ("viper" . "emacs"))
"The corresponding associative list of extensions.")
(defun alternate-files-quickly ()
"A few of quick commands to swtich between source files and header files quickly."
(interactive)
(if buffer-file-name
(let ((ext (file-name-extension buffer-file-name))
(base (file-name-sans-extension (file-name-nondirectory buffer-file-name)))
data a_ext a_file)
(when (and ext base (< 0 (length ext)))
(setq data (cdr (assoc ext a-extension-map)))
(cond ((stringp data)
(setq a_ext data)
(when (< 0 (length a_ext))
(setq a_file (concat base "." a_ext))
(when (file-exists-p a_file)
(find-file a_file))))
((listp data)
(catch 'break
(while data
(setq a_ext (car data))
(when (and (stringp a_ext) (< 0 (length a_ext)))
(setq a_file (concat base "." a_ext))
(when (file-exists-p a_file)
(find-file a_file)
(throw 'break t)))
(setq data (cdr data))))))))))
272:名無しさん@お腹いっぱい。
04/09/20 17:14:26
;;; filecache の対象を load-path にすると、
;;; .el 以外のファイルもついてきて面倒なので以外を消す
;;; 必要なのはあとで追加する
(defun file-cache-not-el-list ()
(let (nelist)
(dolist (list file-cache-alist)
(catch 'quit
(unless (string-match "^.*\\.el\\'" (car list))
(setq nelist (cons (car list) nelist))
(throw 'quit nil))))
nelist))
(file-cache-add-directory-list load-path)
(file-cache-delete-file-list (file-cache-not-el-list))
(file-cache-add-file-list '("~/.emacs" "~/.skk" "~/.wl" "~/.folders" "~/.bashrc"))
273:名無しさん@お腹いっぱい。
04/09/20 17:58:29
cach - throw は何のため?
(defun file-cache-not-el-list ()
(delq nil (mapcar (lambda (list)
(unless (string-match "\\.el\\'" (car list))
(car list)))
file-cache-alist)))
274:名無しさん@お腹いっぱい。
04/09/20 18:05:39
>>273
叩かれて強くなるためです
勉強になりました
275:名無しさん@お腹いっぱい。
04/10/24 22:51:00
30 分ほど考えたり調べたりしましたが,わからなかったので質問させてください.
(list (list '("A" . "1") '("B" . "2"))
(list '("C" . "3"))
(list '("D" . "4") '("E" . "5")))
を
(list '("A" . "1")
'("B" . "2")
'("C" . "3")
'("D" . "4")
'("E" . "5"))
のように展開(?)するにはどうしたら良いのでしょうか?
276:名無しさん@お腹いっぱい。
04/10/24 23:02:53
何をどう調べたり考えたりしたのか書いた方がいいと思うよ。
これこれを試してみたとか。
ヒントとしては、
mapc + append
277:名無しさん@お腹いっぱい。
04/10/24 23:07:21
宿題なのかなー?
278:名無しさん@お腹いっぱい。
04/10/24 23:09:05
展開後(?)の表記のしかたが悪い。
それを評価した結果になってほしいのか、まさにそれが欲しいのか。
279:名無しさん@お腹いっぱい。
04/10/24 23:14:48
>>275
(apply #'append
(list (list '("A" . "1") '("B" . "2"))
(list '("C" . "3"))
(list '("D" . "4") '("E" . "5"))))
280:名無しさん@お腹いっぱい。
04/10/24 23:16:21
>>275
スレリンク(unix板:405番)
これ書いたやつだろ。
>>276
mapcは違うと思うぞ。
281:276
04/10/24 23:17:46
>>280
applyが思い浮かばなかったのさ……
282:275
04/10/24 23:43:20
素早いレスありがとうございます.うまくいきました.
> 何をどう調べたり考えたりしたのか書いた方がいいと思うよ。
> これこれを試してみたとか。
GNU Emacs Lisp Reference Manual のリスト関連をあさっていました.
> 宿題なのかなー?
趣味です.
> 展開後(?)の表記のしかたが悪い。
> それを評価した結果になってほしいのか、まさにそれが欲しいのか。
おっしゃるとおりですね.勉強不足でした.
>>279
> (apply #'append
すみません,この「#'」はリファレンスマニュアルのどの辺をみれば良いのでしょうか?
ポインタだけでも教えて頂けるとありがたいです.
> スレリンク(unix板:405番)
> これ書いたやつだろ。
そうです.何か問題ありましたでしょうか?
283:276
04/10/24 23:59:29
>>282
#'はemacs lispではほとんど'と一緒。関数にのみ使うと思っておいて。
refrence manualだけじゃなくてemacs-lisp-intro は読んだ?
284:275
04/10/25 00:01:12
>> 283
まだ読んでません.どうも基礎がわかってないみたいなので,まずは
そちらから読んでみます.お世話になりました.
285:名無しさん@お腹いっぱい。
04/11/09 12:28:51
(defun my-w3m-view-url-with-external-browser ()
"emacs-w3mから外部ブラウザを起動する"
(interactive)
(let ((url (or (w3m-anchor)
(ffap-url-at-point)
w3m-current-url)))
(message "Browsing <%s>..." url)
(start-process "external-browser"
nil
"C:/Program Files/Mozilla Firefox/firefox.exe"
url)))
FireFoxを閉じないと、↓こんなメッセージが出てEmacsも閉じられない・・・
Active processes exist; kill them and exit anyway? (y or n)
どなたかアドバイスをお願いします。
286:名無しさん@お腹いっぱい。
04/11/09 12:45:52
>>285
unix なら PROGRAM に & を付ければ? って話なんだろうけど。
firefox.exe のオプションか別コマンドで「firefox に url を渡してする終
了する」ってなことができるんじゃないの?
287:名無しさん@お腹いっぱい。
04/11/09 13:27:30
process-kill-without-query じゃない?
288:名無しさん@お腹いっぱい。
04/11/09 14:01:40
ごもっとも orz
289:名無しさん@お腹いっぱい。
04/11/09 14:19:05
Emacs 終了時に Firefox も終了したいわけじゃないんだよね。
プロセスをバックグラウンドで動かしっぱなしにするには、
BUFFER 引数を 0 にして call-process を
(call-process "C:/Program Files/Mozilla Firefox/firefox.exe" nil 0 nil url)
こんな感じで呼び出してやればいい。
290:289
04/11/09 14:21:42
う、navi2ch のデフォルトフィルタにひっかかった。
>>289 は
( call-process "C:/Program Files/Mozilla Firefox/firefox.exe" nil 0 nil url)
291:285
04/11/09 14:57:44
レスありがとうございます。
>>286
firefoxのオプションを調べてみたんですが、適切なものが見つかりませんでした。
>>287
説明が足りなかったようで、すいません。
僕がやりたかったのは、emacsから起動したfirefoxは閉じずに
emacsだけを終了するというものです。
process-kill-without-queryを使ったら、問い合わせなしにfirefoxも
終了されてしまったので、どうやら僕がやりたいこととは違ったようです。
>>290
おおっ、うまくいきました。
ちなみにコードは以下のように変更しました。
(defun my-w3m-view-url-with-external-browser ()
"emacs-w3mから外部ブラウザを起動する"
(interactive)
(let ((url (or (w3m-anchor)
(ffap-url-at-point)
w3m-current-url)))
(message "Browsing <%s>..." url)
( call-process "C:/Program Files/Mozilla Firefox/firefox.exe" nil 0 nil url)))
どうもありがとうございました。
292:名無しさん@お腹いっぱい。
04/11/09 23:32:45
>>290
start-process と call-process の第3引数を0にするのってそんな違いがあっ
たのか。今までどっちにするか気分で決めてた…(´Д`)
293:名無しさん@お腹いっぱい。
04/11/13 13:00:32
8進数を10進数に変換する関数とかあったりする?
自前でゴリゴリやるしかないスか?
逆は format でできるんだけど…。
294:名無しさん@お腹いっぱい。
04/11/13 13:08:06
>>293
(string-to-number (number-to-string 10) 8)
=> 8
(string-to-number (number-to-string 20) 8)
=> 16
295:名無しさん@お腹いっぱい。
04/11/13 14:43:54
>>294
がーん、string-to-number って基数を指定できるのか、知らなかった。
ありがとう。
296:名無しさん@お腹いっぱい。
04/11/21 21:51:33
(let ((y 1.2))
(while (>= y -1.2)
(let ((x -2.0))
(while (<= x 1.0)
(let ((zx x) (zy y) (v 126))
(while (and (< (+ (* zx zx) (* zy zy)) 4.0) (> v 32))
(let ((temp (+ (* 2 zx zy) y)))
(setq zx (+ (* zx zx) (- (* zy zy)) x))
(setq zy temp))
(setq v (- v 1)))
(insert v))
(setq x (+ x 0.04))))
(insert "\n")
(setq y (- y 0.1))))
297:名無しさん@お腹いっぱい。
04/11/27 21:42:29
call-process を呼ぶ時って apply 使って呼んでるコードが多いんだけど、ど
うしてなの?
引数をリストで渡せるから? とか思ったんだけどそうでない場合でも apply
使ってることあるしなあ。なぜざんしょ?
298:名無しさん@お腹いっぱい。
04/11/28 13:55:08
元々は直接呼んでたのが、何らかの必要があって apply を使うようになり、
その後の変更で apply である必要が無くなったんじゃないの?
299:名無しさん@お腹いっぱい。
04/12/04 07:28:21
(pol2str "5X^2-3") >>> ((5 2) (-3 0))
入力がSTRINGで出力をリスト形式で出すようなpol2strを定義したいんですけど、
どうかいたらいいかわかります?
反対の作業はなんとなくできたんだけどこれはわからなかったです。
300:297
04/12/04 08:42:10
>>298
遅くなったけどサンクス。そんな経緯があったのか。
301:名無しさん@お腹いっぱい。
04/12/04 10:31:36
一気に変換するか、
一回トークンを切り出してリストに変換、あとはリスト処理。
302:299
04/12/04 14:13:51
情報どうもっす。
色々調べたけど、TOKENに切り出す方法が分からないので諦めます。
303:名無しさん@お腹いっぱい。
04/12/04 14:28:11
初心者なのはみえみえなんだからちゃんと教えてやれよ。
304:名無しさん@お腹いっぱい。
04/12/04 22:08:21
----BEGIN BASE64----(font-lock-test.el.gz)
H4sICDWssUEAA2ZvbnQtbG9jay10ZXN0LmVsAI2RzW7DIBCEz/FTrHLJopZDnqdu
FQzrBAVYC0gjv30B569qWtVH77czOwMaGk8B/CxHDlk61kc5qZhIOpsmQGe9zaID
wPOBAmAkmUhFfSh8PKtoYI19j28fKKAP7y99L9bQlqCtlUVHGRCLiwbUHIzNloPU
KhEE67rVqlFp9gM7WbE6B7QhUwwy8ZgLs1CF8yoX85SjDXsZWE6RJ4rZUoKtEKLJ
4Sdb06SqUjERdXIRUMFAHXVVETkCDnMmqdnQzV1ODRHdxbWcdxri5Wf7OnxSXKS9
TVkeaT5zNAmwFbfkJ0ceNvhr0VvY3Ae3O4Ly5SqlqbR5zYB2hDt6NetWeAqOUnH1
5AeK0Bx/gi0UJsralOxOpfwMgh2+VoHH4oyRmeu5+fHWW9r7Rq2n0gfmI2xqPtle
Uy2hfK16mf1V3zcR8kqnVtX/178A0ylMGtwCAAA=
----END BASE64----
スレリンク(unix板:857-869番)
の流れでちょっとやってみたもの。
- とりあえずつつましく font-lock-keywords の末尾に追加
- でも OVERRIDE はt だったり。本当は 'keep がいいんだろうけど
- っつーか t にしててもところどころにしか色付かない。jit-lock だから?
- symbol-function の結果を直接使うんじゃ駄目なんだっけ?
- もうちょっと正規表現も格好よくしたいけど
とかいろいろ疑問があるけどまだあまりテストしてないです。もっとスマート
なのが出来たら教えて下さい。
305:名無しさん@お腹いっぱい。
04/12/04 23:01:19
>>304
hook ってわかってるか?
306:名無しさん@お腹いっぱい。
04/12/05 02:34:57
なんか妙にややこしいことしてるな。
(font-lock-add-keywords 'emacs-lisp-mode '((REGEXP SUBEXP (progn ...))))
みたいな感じでいいんじゃないのか。
307:名無しさん@お腹いっぱい。
04/12/05 03:00:41
>>304
> - っつーか t にしててもところどころにしか色付かない。jit-lock だから?
my-font-lock-parse-lisp で、
(and func
(or (byte-code-function-p func)
(subrp func)))
が nil になったときにそのまま nil を返しちゃまずい。
もう一回探さないとそれ以降に色が付かないぞ。
308:名無しさん@お腹いっぱい。
04/12/05 22:58:55
>>306
最初そっちでやっててリストの先頭に登録されるのが嫌だったんですが新ため
て見たら APPEND ってフラグがありますね。そっちに変更してみました。
>>307
ごもっとも。書いててなんか違和感あったんだけどなんで気付かなかったんだ
ろ orz
とりあえずそれなりに色付くようになりました。どもー。
309:名無しさん@お腹いっぱい。
04/12/06 21:44:56
しつこくてスマン。間違いがあったので訂正。
>>304 の condition-case んとこは void-function だけ受けるんじゃ駄目で
すね。error で受けてやれば全部色付くようになりました。
310:名無しさん@お腹いっぱい。
04/12/07 13:43:05
>>309
なんかいろいろ修正があったようなのですが、自分も一度使用してみたいので、
よかったら修正版 font-lock-test を navi2ch-base64-insert-file してもらえるとうれしいです
311:名無しさん@お腹いっぱい。
04/12/07 22:35:01
----BEGIN BASE64----(font-lock-test2.el.gz)
H4sICDSvtUEAA2ZvbnQtbG9jay10ZXN0Mi5lbADdVEFu3DAMPNuvIPZiCoWA5to8
JU4Br01vhFiSK8nY+j/5QD6RS5FP9CWl6G63aex0DznlZJjiDDkzlrGjvm9aAjvr
/NQ0mDhq27TBQ4WYAL/0PtAh+Ml1sIvUwCEQuZ1SCpwZVInrFHHahzWGcQrjQP+F
95Nr1+CWOjNZ2A/TPxyTEwbvkh58e/9CCA7GmqRKADzekQMMpFlJaO8YEI5NYOKb
Cm/rGm++ooLa3X6qa7UDwYEgGesDYMNLoPO8liX7DfBASSf6nvQY/EghzfAZKtGD
tkk8IKZg3AGulCqLoqjwvGHrrSV+ke5zmddxjJCyyiiQ4a13nUnGO902kbJu5gOM
s937QezKh4DGJQpOR9+nlyto509LGop5oRM3s1MIrC6bmau46eRiZG7a9lyS/wiW
ZyHjhvPFm87nBk7nggCKlQA2EhBfLwlA7s5HCGA/J2JIR39c1uPpm924EG/fiHKJ
5aJgLolEnP4rkvN503X6nuajD12ESpplj2aRYVnU4s32XbuCau2vzKNyOu81SyS8
GiXVd54k3++rSVL9Pen6GohFRr3IZTZ4+Pn0+Pz88KP8BYGg2TyqBgAA
----END BASE64----
>>310
今のところこんなかんじに落ち着いてます。lisp なだけにかなりの部分に色
付くため1色だと逆に見難かったので3色使ってます。
312:310
04/12/08 00:06:08
>>311 ありがとうございました
しかし、これは良くできていますね。
こうやって見てみると自分が普段どれだけ多くのsubrな関数を使用しているのかわかります。
感謝です。
313:名無しさん@お腹いっぱい。
04/12/08 03:56:47
minibuffer で作業してるときにたまに message が表示されて
自分が入力してるのが消えるときがあるじゃないですか。
で、そんなときに消えないようにと以下の advice を付けてみたんですけど、
今いち視線が上下してよろしくない気がします。
何かいい案はないですかね?
momentary-string-display をうまく使えばいい感じになりそうな気もするけど。。。
(defadvice message (around if-minibuffer-use-momentary-string-display activate)
(if (window-minibuffer-p (selected-window))
(save-window-excursion
(save-selected-window
(select-window (display-buffer (get-buffer-create "*message on minibuffer*")))
(delete-other-windows)
(erase-buffer)
(insert (make-string (window-height) ?\n)
(format (ad-get-arg 0) (ad-get-arg 1)))
(goto-char (point-max))
(recenter))
(sit-for minibuffer-message-timeout))
ad-do-it))
314:名無しさん@お腹いっぱい。
04/12/08 08:55:07
>>313
> minibuffer で作業してるときにたまに message が表示されて
> 自分が入力してるのが消えるときがあるじゃないですか。
漏れも、LSDBを入れたらその問題で悩みました。Fontifying... という
メッセージがじゃまをするので、~/.emacs で (setq font-lock-verbose nil)
しましたが、こういう手もあったとは。
315:名無しさん@お腹いっぱい。
04/12/08 22:46:40
>>313
何となくわかればいいだけなら、こんな感じでは?
一発目だけポインタを移動するとか、小細工はあってもいいけど
(defadvice message (around my-message-ad activate)
(if (window-minibuffer-p (selected-window))
(let ((executing-kbd-macro t))
ad-do-it
(display-buffer "*Messages*"))
ad-do-it))
316:名無しさん@お腹いっぱい。
04/12/08 23:47:51
>>315
ポインタってポイントのコト?
317:名無しさん@お腹いっぱい。
04/12/09 01:29:52
結局こんなんになりました。
これだと視線の上下もないしいい感じ。
ついでに、minibuffer での isearch のときもいい感じになってくれました。
ただ signal とかの emacs の中の人が処理してるやつはやっぱりだめっぽいです。
(defadvice message (around minibuffer-workaround activate)
(if (window-minibuffer-p (selected-window))
(let ((pos (point-max)))
(when (ad-get-arg 0)
(unwind-protect
(progn
(save-excursion
(goto-char pos)
(insert "\n" (format (ad-get-arg 0) (ad-get-arg 1))))
(sit-for (or minibuffer-message-timeout 1)))
(delete-region pos (point-max)))))
ad-do-it))
318:名無しさん@お腹いっぱい。
04/12/09 02:00:56
なんかいもごめんです。
さっきのやつの insert のとこを
(insert "\n" (apply 'format (ad-get-arg 0) (ad-get-args 1))))
に変えないとダメポです。
あと、skk と相性がわるいなぁ。
319:名無しさん@お腹いっぱい。
04/12/10 22:21:05
URLリンク(example.jp) bar/~baz/
こんな url を encode して
URLリンク(example.jp)
を得たいんだけど、そのものズバリな関数がありそうで見つからない。
(browse-url-file-url "URLリンク(example.jp) bar/~baz/")
=> "URLリンク(example.jp)"
~ は encode してくれないのね。
(w3m-url-encode-string "URLリンク(example.jp) bar/~baz/")
=> "URLリンク(example.jp)"
+ か(´・ω・`)
今は自力でやってるけど、どっかにあったりする?
320:名無しさん@お腹いっぱい。
04/12/10 22:57:43
~ をエンコードすべき理由が思い当たらないんだけど
321:名無しさん@お腹いっぱい。
04/12/10 23:22:32
同一性をチェックしたいとか?
322:名無しさん@お腹いっぱい。
04/12/11 10:59:40
RFC1738 の時代には「+」が unreserved で「~」はエスケープが必要だった。
後に RFC2396 ができて「+」が reserved になり、「~」は unreserved に
なった。
> ~ は encode してくれないのね。
は RFC2396 に
> + か(´・ω・`)
は RFC1738 にしたがっているのだろう。
323:名無しさん@お腹いっぱい。
04/12/11 14:27:03
つまりどれにも準拠してないってことね。
324:名無しさん@お腹いっぱい。
04/12/11 16:19:09
え?
325:319
04/12/12 12:55:16
発端は wget -x で件の url を取得するとああいったディレクトリを掘るんで、
それを emacs 側で知りたいってことからでした。
>>322 氏の解説のように変遷があると既存の関数でズバリな encode を期待す
るのは無理がありそうですね。自力 encode で納得しときます。
レスどーもでした。
326:名無しさん@お腹いっぱい。
04/12/12 21:58:29
wgetってなんで ~ をエンコードしちゃうんだろうね。
だれかハックしてエンコードしないバージョンを配布してくれ。
327:名無しさん@お腹いっぱい。
04/12/12 22:20:03
そんなんハックとはいえん
328:名無しさん@お腹いっぱい。
04/12/13 12:21:41
一文字変えるだけ?
329:名無しさん@お腹いっぱい。
04/12/21 22:10:29
最近Emacsを使うだけの立場から少しいじろうと思って、
「やさしいEmacs-Lisp講座」など読みました。
しかし、この板に書かれてるようなLispははるかに上でびっくりしました。
hookとかどこにもほとんど説明がないし、始めはshow-paren-modeが気に食わなくて
対応する括弧のbackgroundではなく、括弧そのものがboldでredになるようにしたい
と思ったのですが第一歩が踏み出せません。
cc-mode.elとかみれば参考になるかと思いきや、やはり難しい。。
faceというのをいじればよいことまでは分かったのですが、他の機能もごちゃごちゃ
ついているので、boldにしたりするのにどれが本当に必要なものか見分けがつきません。
みなさんはこのギャップをどこで勉強して埋められたのですか?
よろしければ教えてください。
そして、こんな自分にどうやって、そして何を勉強してよいのかアドバイスください。
よろしくお願いします。
330:名無しさん@お腹いっぱい。
04/12/22 00:43:21
知識に上に下もないと思うけど。
「やさしいEmacs-Lisp講座」は自分も一番最初に読んだ。elispの基本を押さえている
し、かなり良い本だと思う。
自分の場合は、その知識を元に .emacs をいじったり、他人の .emacs を覗いたり、日
本語 Info で分からないこと調べたりしていくうちに、個人レベルでやりたいことはで
きるようになった。
その時は分からなくても、何ヶ月後かに調べてみたら、あっさり分かったりするので、
焦らずに知識を蓄えていくのが一番の近道ではないでしょうか。
331:名無しさん@お腹いっぱい。
04/12/22 01:09:28
>>329
(show-paren-mode) の評価より先に
show-paren-match-face を上書きすると変えられるよ.
ちょっと paren.el のソース見たけどこんな感じ.
(defface show-paren-match-face '((t (:foreground "red" :bold t))) nil)
(show-paren-mode t)
この際だから mic-paren.el でも捜して比較してみたらどうでしょう.
332:名無しさん@お腹いっぱい。
04/12/22 01:33:27
>>331
揚げ足取るわけじゃないけど、、、
set-face-*()で変えるほうが自然じゃない?
(show-paren-mode 1)
(set-face-foreground 'show-paren-match-face "red")
(set-face-bold-p 'show-paren-match-face t)
333:名無しさん@お腹いっぱい。
04/12/22 01:38:24
>>332
確かにこっちのほうがスマートだね.
何でオレ, あんなふうに書いたんだろ….
334:名無しさん@お腹いっぱい。
04/12/22 04:07:45
>>330-333
ありがとうございます!あれから少し探してみたのですが、
どうも各モードにどんな変数があるかをInfoで見つけて、
それをいじるというのがカスタマイズの初歩のようですね。
335:名無しさん@お腹いっぱい。
05/01/07 00:10:45
diredモードで拡張子ごとに色を付けたいんですけどどうやったらいいですか?
336:名無しさん@お腹いっぱい。
05/01/07 09:11:46
>335
俺の.emacs見てたらこんなんあった
ウザくなってコメントアウトしてたけどうまく動いてたっぽい
(font-lock-add-keywords 'dired-mode
'(
; ;source
("^.*\\.[Ee][Ll]$" . font-lock-variable-name-face)
; ;archive
("^.*\\.[Zz][Ii][Pp]$" . font-lock-builtin-face)
("^.*\\.[Gg][Zz]$" . font-lock-builtin-face)
("^.*\\.[Tt][Aa][Rr]$" . font-lock-builtin-face)
("^.*\\.[Ll][Zz][Hh]$" . font-lock-builtin-face)
; ;text
("^.*\\.[Tt][Xx][Tt]$" . font-lock-reference-face)
; ;executable
("^.*\\.[Ee][Xx][Ee]$" . bold)
; ;dot
("^.+[0-9][0-9] \\.[^.]+.*" . font-lock-variable-name-face)
))
337:335
05/01/07 19:28:01
お~、ありがとうございます。
バッチリ動きました。
ただexeにboldが効いてなかった様な気も・・。
Fontlockの設定とかが原因でboldに気が付かなかっただけかな。
boldを色指定に変えて使ってます。
十分満足なんですけど
拡張子だけに色を付けるとなると相当面倒ですか?
理想としては拡張子はファイル名とは別のカラムに表示して(lsの設定?)
さらに拡張子にだけ色を付けたいのですが。
つーかemacs楽しいですね。時間足りないw
ある程度Lisp覚えてがんがんカスタマイズできるようになりたいな。
338:名無しさん@お腹いっぱい。
05/01/07 20:17:34
>>337
> 拡張子だけに色を付けるとなると相当面倒ですか?
("^.*\\.\\([Ee][Ll]\\)$" 1 font-lock-variable-name-face)
みたいにしてけばいいだけよ。詳しくは font-lock-add-keywords の
docstring を参照のこと。
> 理想としては拡張子はファイル名とは別のカラムに表示して(lsの設定?)
ちょっとやり方を思い付かないけど、逆に見難くないかね。
> つーかemacs楽しいですね。時間足りないw
> ある程度Lisp覚えてがんがんカスタマイズできるようになりたいな。
ガン(゚д゚)ガレ
339:名無しさん@お腹いっぱい。
05/01/25 21:33:24
すいません、キーバインドの方法について質問させてください。
shift+rightにother-windowを割り当てたいのですが
;(describe-keyでは"ESC [ d"と表示されます。)
うまくいきません。global-set-key で
\M-[-d とか [M-[-d] や [ESC]-[-d等を試してみたのですがどれもだめでした。
ESC [ dはどう表記したらいいのでしょうか?
340:名無しさん@お腹いっぱい。
05/01/25 23:45:32
>>339
その環境だと shift+right も right も一緒になってないか?
341:名無しさん@お腹いっぱい。
05/01/26 00:03:02
shift+right と right が一緒になってるかどうかの確認の方法が分からないのですが
(何かにバインドして確認しようにもバインドの方法が分からない)
describe-keyをすると
right は right
shift+right は ESC [ c
とでます。
ちなみにF1にバインドする時にもつまづきました。
[f1] ではなく\C-ce でf1にバインドできました。
そうするとC-ceにもバインドされました。
C-ce と f1 は一緒になってるようです。
ターミナルの設定の問題なんでしょうか?
342:名無しさん@お腹いっぱい。
05/01/26 00:37:20
スレ違いだろうが、とりあえず [?\e ?\[ ?d] とか "\e[d" とか
343:名無しさん@お腹いっぱい。
05/01/26 00:49:47
おお、いけました。ありがとうございます。
shift+upでバッファ間を移動しまくっております。
previous-bufferみたいな関数あるかと思ったんですけどないみたいですね。残念。
書くスキルないのはもっと残念です。
どこで質問するか迷ったんですけどやっぱりスレ違いでしたか。
emacsスレで聞けばよかったです。
ありがとうございました。
344:名無しさん@お腹いっぱい。
05/01/26 01:40:01
>>343
> shift+upでバッファ間を移動しまくっております。
> previous-bufferみたいな関数あるかと思ったんですけどないみたいですね。残念。
バッファっつーか、ウィンドウ間を移動したいんだよね?
windomove.el がいいんじゃないかと。
345:名無しさん@お腹いっぱい。
05/01/26 01:41:01
> windomove.el
変なところに o が入った。windmove.el だ。スマソ
346:名無しさん@お腹いっぱい。
05/01/26 02:35:31
そうか。windmove使えばいいのか。
(global-set-key [?\e ?\[ ?d] 'windmove-left)
(global-set-key [?\e ?\[ ?a] 'windmove-up)
(global-set-key [?\e ?\[ ?c] 'windmove-right)
(global-set-key [?\e ?\[ ?b] 'windmove-down)
でウインドウ間を超高速移動しまくってます。
ありがとうございました。
347:名無しさん@お腹いっぱい。
05/01/26 09:51:41
超高速移動という響き,イイ!!
348:名無しさん@お腹いっぱい。
05/01/27 03:17:04
どもども。いや、ホント楽になりました。
C-xo連発してたのがうそみたいです。
349:名無しさん@お腹いっぱい。
05/02/11 20:21:31
一回のキー操作に複数の手続きを割り当てたいんですけど、例えば
(global-set-key "\C-cg" '(lambda () (begin
(forward-char)
(backward-char)))
これで一文字進んで一文字戻る(なにも起こらない)を想定してるんですが、動いてくれません
普通(global-set-key KEY COMMAND)でCOMMANDにはシンボルを想定してるみたいなんですが、
複数同時に渡せないし...
350:名無しさん@お腹いっぱい。
05/02/11 20:30:48
(global-set-key "\C-cg" "\C-f\C-b")
351:名無しさん@お腹いっぱい。
05/02/11 20:45:11
(interactive)
ていうかelispにbeginは無いし
352:名無しさん@お腹いっぱい。
05/02/11 20:46:07
(define-key mode-specific-map "g"
(lambda ()
(interactive)
(forward-char)
(backward-char)))
353:名無しさん@お腹いっぱい。
05/02/11 21:58:34
どうも、解決しました。
(ここ結構人居るんですね)
other-windowを組み合わせようとしてたんですが、
これが引数とるのに気が付かなくて二重にはまってました。
M-xから呼ぶときは引数いらないのに...いまだに意味不明です。
354:名無しさん@お腹いっぱい。
05/02/11 22:59:58
(other-window ARG &optional ALL-FRAMES)
だから引数は必要。
M-x でいらない(ように見える)のは (interactive "p") で
(prefix-numeric-value current-prefix-arg) が渡されるから。
355:名無しさん@お腹いっぱい。
05/02/12 01:45:40
>>353
要らない世話かも知れないけど>>354に補足すると
(interactive "p") で渡っているのは ARG の方だけね
ALL-FRAMES を指定するときは
(other-window 1 t)
のようにもう一つ引数がいるからね
詳しくは info を
356:名無しさん@お腹いっぱい。
05/02/12 08:41:04
Lispはちょっと触った事あったんでいけるかと思ってたんですが、
Emacsの仕様もあって結構難しいですね。
ちょっと勉強してみます。
357:名無しさん@お腹いっぱい。
05/02/19 00:17:22
(multibyte-string-p "a")
=> nil
(with-temp-buffer
(insert "a")
(multibyte-string-p (buffer-substring-no-properties (point-min) (point-max))))
=> t
HEAD でも 21.3 でもこうなるみたいなんだけどこーゆーもんなんすか?
358:名無しさん@お腹いっぱい。
05/02/19 00:30:43
>>357
はい。
(with-temp-buffer
(set-buffer-multibyte nil)
(insert "a")
(multibyte-string-p (buffer-substring-no-properties (point-min) (point-max))))
=> nil
359:名無しさん@お腹いっぱい。
05/02/19 00:55:48
>>358
むむ、なるほど、どうもです。
じつは任意の buffer から substring してきた文字列に multibyte (とりあえ
ずは日本語) が含まれてるかどうかを判定したいんですが、そんな場合はどう
するのが常套手段なんでしょう。思い付いたのは↓なんですが
(with-temp-buffer
(insert "あ")
(goto-char (point-min))
(if (re-search-forward "\cj" (point-max) t)
"日本語あり"
"日本語なし"))
=> "日本語なし"
(´・ω・`)
360:名無しさん@お腹いっぱい。
05/02/19 01:12:14
(find-charset-string "abc")
=> (ascii)
(find-charset-string "abcほげ")
=> (ascii japanese-jisx0208)
(let ((str "あ"))
(if (memq 'japanese-jisx0208 (find-charset-string str))
"日本語あり"
"日本語なし"))
=> "日本語あり"
361:名無しさん@お腹いっぱい。
05/02/19 01:21:29
(re-search-forward "\\cj" (point-max) t)
Emacs21 なら
(re-search-forward "[[:nonascii:]]" (point-max) t)
が使えたはず。
362:名無しさん@お腹いっぱい。
05/02/19 01:27:41
Emacsのunibyte/multibyteってのはタダのバイト列として読むか
なんらかのエンコーディングで表現された文字として読むかってとこで生じる。
単に表現されたときに1バイトになるかってのは関係ない。
363:名無しさん@お腹いっぱい。
05/02/19 01:49:37
>>362
うそー、関係あるよ。
src/alloc.c:
Lisp_Object
make_string_from_bytes (contents, nchars, nbytes)
const char *contents;
int nchars, nbytes;
{
register Lisp_Object val;
val = make_uninit_multibyte_string (nchars, nbytes);
bcopy (contents, SDATA (val), nbytes);
if (SBYTES (val) == SCHARS (val))
STRING_SET_UNIBYTE (val);
return val;
}
文字列中の文字が全て1バイトになるかを思いっきり考慮してんじゃん。
364:名無しさん@お腹いっぱい。
05/02/19 02:29:27
はいはい。それはmake_string_from_bytesだからでしょ。
それは考慮してるんじゃなくてunibyteにするかmutlibyteにするかっていう
判定材料に使ってるだけだよ。
その関数の使われるところがどういうところかも見れば自明だと思うんだけど。
365:名無しさん@お腹いっぱい。
05/02/19 03:06:30
自日月
366:名無しさん@お腹いっぱい。
05/02/19 03:38:11
>>364
はいはい。じゃあ
(multibyte-string-p (string 97)) => nil
(multibyte-string-p (string 53794)) => t
を説明してみ。
367:名無しさん@お腹いっぱい。
05/02/19 03:49:16
アホだな。Fstringってmake_string_from_bytesを使ってる例でしかないじゃん。
それはインタフェースからしてmultibyteかどうかの情報が与えられないから、
multibyteかどうかを判定するのに文字の範囲から推定するしかできないからでしょ。
逆に例えば既にmultibyteである情報源から文字列を作るとき、
要するにmultibyte bufferからsubstringする場合なんかはいちいち
中身が1バイト文字だけかどうかなんて考慮しないよ。
まあソースコード読みなよ。
Emacsでのunibyte/multibyteの扱いってものについて学習してらっしゃい。
368:名無しさん@お腹いっぱい。
05/02/19 05:04:41
>>362 の
> 単に表現されたときに1バイトになるかってのは関係ない。
に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
ると言ってるのに、SINGLE_BYTE_CHAR_P だけからなる文字列も multibyte に
なり得ると反論してもしょうがないだろうに。
369:名無しさん@お腹いっぱい。
05/02/19 05:27:37
> に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
> る
そこが問題なのか? 違うだろ。だって当たり前すぎるほど当たり前じゃん。
>>363はタダのバイト列として読むんじゃなくてEmacsの内部表現で表現された
文字列として読んでるんだから。
そこを問題にしているとしたら363の方こそナンセンス。
370:名無しさん@お腹いっぱい。
05/02/19 07:02:02
>>366がどういう意図をもっているのか自分で説明すべきだろ。
何を根拠に何を主張したいのか書かなきゃ単なる煽りの手口。
371:359
05/02/19 09:05:52
>>360
> (find-charset-string "abc")
>>361
> (re-search-forward "[[:nonascii:]]" (point-max) t)
おー、ありがとう。勉強になるっす。
> (re-search-forward "\\cj" (point-max) t)
うぼあ、なんたる初歩的ミス orz
372:名無しさん@お腹いっぱい。
05/02/20 14:51:39
Emacs の multibyte, unibyte まわりって確かにわかりずらいですよねー。
試しに unibyte な文字列中に "\\cj" で検索かけてみたんですけど、結果は nil なん
ですねぇ。当然と言えば当然ですが。
(string-match "\\cj" "あいうえお")
=> 0
(string-match "\\cj" (string-as-unibyte "あいうえお"))
=> nil
(find-charset-string "あいうえお")
=> (japanese-jisx0208)
(find-charset-string (string-as-unibyte "あいうえお"))
=> (eight-bit-graphic eight-bit-control)
coding-system の binary, raw-string とかとの関係も難しい・・・。
373:名無しさん@お腹いっぱい。
05/02/20 14:56:20
閑話休題。
iswitchb で migemo を使えるようにしてみたですよ。
(setq iswitchb-regexp t)
(setq iswitchb-use-migemo-p t)
(defadvice iswitchb-get-matched-buffers (before iswitchb-use-migemo activate)
"iswitchb で migemo を使ってみる。"
(when iswitchb-use-migemo-p
(ad-set-arg 0 (migemo-get-pattern (ad-get-arg 0)))))
374:名無しさん@お腹いっぱい。
05/02/20 18:40:57
>>373
おおぅ、ナイスです。
ありがたく使わせていただきます。
375:373
05/02/21 23:35:24
昔の「自慢の.emacsを貼り付けよう」スレのように活気付く事を祈って。
dired とか ibuffer で色を付けて、長いファイル名があってもそれなりに見やすくしてみる。
まずは dired:
(defun dired-font-lock-information-matcher (limit)
"dired でまん中へんに色を付けてみる matcher。"
(when (dired-move-to-filename nil limit)
(let (end)
(backward-char)
(setq end (point-marker))
(progn (beginning-of-line)
(forward-sexp (if (looking-at dired-re-mark) 2 1))
(forward-char))
(store-match-data (list (point-marker) end)))
(forward-line)))
(font-lock-add-keywords
'dired-mode
'((dired-font-lock-information-matcher . font-lock-constant-face)))
376:373
05/02/21 23:36:57
んで ibuffer:
(setq ibuffer-fontify-information-field-list '(size mode))
(defadvice ibuffer-insert-buffers-and-marks (after ibuffer-fontify-information-field activate)
"ibuffer でまん中へんに色を付けてみる。"
(save-excursion
(ibuffer-goto-beg)
(while (not (eobp))
(let ((pos (point))
(limit (line-end-position)))
(while (and (setq pos (next-single-property-change pos 'ibuffer-field nil limit))
(< pos limit))
(goto-char pos)
(let ((buffer-read-only nil)
(field (get-text-property (point) 'ibuffer-field))
(beg pos))
(when (memq field ibuffer-fontify-information-field-list)
(setq pos (next-single-property-change pos 'ibuffer-field nil limit))
(goto-char pos)
(put-text-property beg pos
'face 'font-lock-constant-face)))))
(forward-line))))
dired-mode で、dircolors の色を使うようにすると派手でいいかもしれないとか思った。
377:373
05/02/22 00:21:53
dircolors 使うやつができたっぽい。
(require 'dircolors)
(font-lock-add-keywords
'dired-mode
(mapcar (lambda (x)
(list
(format "\\(%s\\)$"
(mapconcat (lambda (ext)
(if (stringp ext)
(format "\\.%s" ext)
(format ".*%s.*" (cadr ext))))
(car x)
"\\|"))
`(".+" (dired-move-to-filename) nil (0 ',(cadr x)))))
dircolors-extension))
378:名無しさん@お腹いっぱい。
05/03/20 13:59:42
(defadvice next-error (after next-error-plus-alpha activate)
(insert "OMOITSUKANAI"))
定義してgrep+next-error実行しても, OMOITSUKANAIがバッファに挿入され
ないのはどうしてなのだろうか
379:名無しさん@お腹いっぱい。
05/03/20 18:00:24
>>378
(with-current-buffer ) を抜けたあとだから。
380:名無しさん@お腹いっぱい。
05/03/21 13:45:50
>>379 with-current-buffer 以後でも insert を可能にする方法は何
かありますか?
381:名無しさん@お腹いっぱい。
05/03/21 18:16:49
>>380
with-current-buffer
382:名無しさん@お腹いっぱい。
05/03/23 00:29:38
>>381
(defadvice next-error (after next-error-plus-alpha activate)
(with-current-buffer next-error-last-buffer
(insert "OMOITSUKANAI")))
なりませんけど・・・?
383:名無しさん@お腹いっぱい。
05/03/23 09:16:12
>>382
(when (setq next-error-last-buffer (next-error-find-buffer))
...
384:名無しさん@お腹いっぱい。
05/03/23 14:52:04
>>383
その中に入れても結局なりませんでした。。。
385:名無しさん@お腹いっぱい。
05/03/23 21:36:02
>>384
最新の Emacs だと grep バッファは読み込み専用だけど,あらかじめちゃんと
書き込めるように対処はしてあるの?
386:名無しさん@お腹いっぱい。
05/03/24 00:33:30
>>385
書き込みしたいのは、次のエラー箇所が見つかったファイル (この場合はマッチするファイル)に
なので、 *grep* バッファ上でではありません。。
`next-error-last-buffer' がそのファイルじゃないのですか?
387:名無しさん@お腹いっぱい。
05/03/24 01:36:43
試してみると
next-error-last-buffer's value is #<buffer *grep*>
ってなるから違うみたい
388:名無しさん@お腹いっぱい。
05/03/24 22:05:20
emacs 21.4 を使っています。
カーソル配下のtextのface取得方法が解からないので、教えてください。
やりたいことは、特定の単語の色の変更では無く、
その単語の所属するキーワードグループまるごと色を変更したい為、
カーソル配下の単語から、faceを特定したいということです。
お願いします。
389:名無しさん@お腹いっぱい。
05/03/24 22:51:54
(get-text-property (point) 'face)
390:388
05/03/25 00:51:21
>>389
thx
391:名無しさん@お腹いっぱい。
05/03/30 12:38:13
Emacs には「グラフ」データ構造の library がないように思えます。
ここでプログラムしてみちゃってください。
392:名無しさん@お腹いっぱい。
05/03/30 12:52:18
ム板でやると盛り上がると見た。
393:名無しさん@お腹いっぱい。
05/03/30 17:48:01
>>392
ここでよくない? こういうプログラミング練習の為にこのスレッドがあるんじゃないの?
394:名無しさん@お腹いっぱい。
05/03/30 18:33:00
ライブラリ的なのはあっちっしょ。好きそうな人もいるし。
395:名無しさん@お腹いっぱい。
05/03/30 21:02:12
cons と car と cdr で事足りる
396:名無しさん@お腹いっぱい。
UNIX時間(+0900)35年,2005/04/03(日) 07:43:30
>>395
おまえは、 「情報なんて 0 と 1 のみで事足りる」
とでも言うのか?
アホ。
397:名無しさん@お腹いっぱい。
UNIX時間(+0900)35年,2005/04/03(日) 20:28:38
「ハッカーと画家」に
car, cdr, cons, quote, cond, atom, eq
だけで Lisp の関数は書けるとかって書いてあった。
四則演算はどうやってやるんだ?
398:名無しさん@お腹いっぱい。
UNIX時間(+0900)35年,2005/04/03(日) 20:57:40
(t) => 1、(t t) => 2、(t t t) => 3
のように表わすことにして
(defun plus (x y)
(cond (y (plus (cons (car y) x) (cdr y)))
(t x)))
(plus '(t t t) '(t t))
=> (t t t t t)
足し算ができれば後はどうとでも。
399:名無しさん@お腹いっぱい。
UNIX時間(+0900)35年,2005/04/03(日) 23:04:31
398 は効率悪すぎだから (t) => 1、(nil t) => 2、(t t) => 3 と
little endian な 2 進表記にして
(defun plus (x y &optional c)
(cond ((cond ((eq x nil) (eq y nil)))
(cond (c (cons c nil))))
((car x)
(cond ((car y)
(cons c (plus (cdr x) (cdr y) t)))
((cons (not c) (plus (cdr x) (cdr y) c)))))
((car y)
(cons (not c) (plus (cdr x) (cdr y) c)))
((cons c (plus (cdr x) (cdr y) nil)))))
(defun mul (x y)
(cond ((eq y nil) nil)
((plus (cond ((car y) x))
(mul (cons nil x)
(cdr y))))))
(plus '(t t nil t) '(t nil t)) ; 11 + 5
=> (nil nil nil nil t) ; 16
(mul '(t t nil t) '(t nil t)) ; 11 * 5
=> (t t t nil t t) ; 55
400:名無しさん@お腹いっぱい。
05/04/05 10:30:07
おいおまえら、知能ベースを elisp で書けよ。
はやくしろ。
401:Zeno ◆5nZQbNmQPs
05/04/05 16:08:22
Re:>400
それはいいアイディアである
402:名無しさん@お腹いっぱい。
05/04/05 17:27:56
お前なんかに誉められてもうれしくないよ
403:Zeno ◆5nZQbNmQPs
05/04/06 11:34:00
Re:>402
お前のことは誉めていない。
知能ベースでも書いてから物を言うようにしろ
404:Zeno ◆5nZQbNmQPs
05/04/06 11:43:29
Tail Recursion は未だに Elisp に実装されていない。
この事実に理由はあるのか?
405:名無しさん@お腹いっぱい。
05/04/06 12:09:56
tail recursion なら実装されてますがなにか?
おまいの言いたいのは tail recursion optimization のことだろ。
理由はもちろんある。
-- 終了 --
406:名無しさん@お腹いっぱい。
05/04/06 13:29:51
あんま相手すんな。
伝染るぞ。
407:Zeno ◆5nZQbNmQPs
05/04/06 17:14:11
Re:>405
じゃあお前が optimization しろ
408:名無しさん@お腹いっぱい。
05/04/06 17:59:39
動的スコープの言語では末尾再帰の最適化は不可能
(defun bar ()
(fset 'foo (lambda () (print "bar"))))
(defun foo ()
(bar)
(foo))
409:Zeno ◆5nZQbNmQPs
05/04/07 14:22:10
A* サーチ・アルゴリズムの elisp バーションが
ほしくないわけでもないな。
____________
"Self" is that which is in the process of becoming... --Zeno
Today's Lucky Number: 421
410:名無しさん@お腹いっぱい。
05/04/07 23:12:09
>>409
負けたな
411:sakurai osamu
05/04/08 02:23:21
URLリンク(www.club-paruparo.com)
フィリピン万個伝説よろ
windows 最高!
412:名無しさん@お腹いっぱい。
05/04/08 13:01:28
ある文字列から四文字ずつ取り出してリストを作りたいのですが
どういう風にすればよいのでしょうか?
"いろはにほへとち" という風な文字列から '("いろはに" "ほへとち")
という風なリストを得たいのです。
文字列は四文字以上で4の倍数であることは保証されています。