[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/03 02:06 / Filesize : 277 KB / Number-of Response : 955
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:おっす [03/09/18 19:29]
なんとなくEmacs 触り始めて、なんとなくelispにも手を出して
しまったアナタ。

なんとなく書いてしまったコードをココに書き込んで叩かれましょう。
タタカレテツヨクナレ。

年季の入った玄人衆は、もしアドバイスできたらお願いします。
いや、叩きついでにでも。

とりあえず入門書は
ttp://www.netfort.gr.jp/~kiyoka/emacs_setq/emacs_setq.html
ttp://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp.html

リファレンスマニュアルは(ちと古い)
ttp://www.fan.gr.jp/~ring/doc/elisp-manual/elisp.html

とか、新しいのは(でも英語)
ttp://www.delorie.com/gnu/docs/elisp-manual-21/elisp.html

ではひとつ、コード中心の熱いバトルをよろぴく。


306 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/05 02:34:57]
なんか妙にややこしいことしてるな。
(font-lock-add-keywords 'emacs-lisp-mode '((REGEXP SUBEXP (progn ...))))
みたいな感じでいいんじゃないのか。

307 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/05 22:58:55]
>>306
最初そっちでやっててリストの先頭に登録されるのが嫌だったんですが新ため
て見たら APPEND ってフラグがありますね。そっちに変更してみました。

>>307
ごもっとも。書いててなんか違和感あったんだけどなんで気付かなかったんだ
ろ orz

とりあえずそれなりに色付くようになりました。どもー。

309 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/06 21:44:56]
しつこくてスマン。間違いがあったので訂正。
>>304 の condition-case んとこは void-function だけ受けるんじゃ駄目で
すね。error で受けてやれば全部色付くようになりました。

310 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/07 13:43:05]
>>309
なんかいろいろ修正があったようなのですが、自分も一度使用してみたいので、
よかったら修正版 font-lock-test を navi2ch-base64-insert-file してもらえるとうれしいです

311 名前:名無しさん@お腹いっぱい。 mailto:sage [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 mailto:sage [04/12/08 00:06:08]
>>311 ありがとうございました
しかし、これは良くできていますね。
こうやって見てみると自分が普段どれだけ多くのsubrな関数を使用しているのかわかります。
感謝です。

313 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/08 08:55:07]
>>313
> minibuffer で作業してるときにたまに message が表示されて
> 自分が入力してるのが消えるときがあるじゃないですか。

漏れも、LSDBを入れたらその問題で悩みました。Fontifying... という
メッセージがじゃまをするので、~/.emacs で (setq font-lock-verbose nil)
しましたが、こういう手もあったとは。




315 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/08 23:47:51]
>>315
ポインタってポイントのコト?


317 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/09 02:00:56]
なんかいもごめんです。
さっきのやつの insert のとこを
(insert "\n" (apply 'format (ad-get-arg 0) (ad-get-args 1))))
に変えないとダメポです。

あと、skk と相性がわるいなぁ。


319 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/10 22:21:05]
example.jp/foo bar/~baz/
こんな url を encode して
example.jp/foo%20bar/%7Ebaz/
を得たいんだけど、そのものズバリな関数がありそうで見つからない。

(browse-url-file-url "example.jp/foo bar/~baz/")
=> "example.jp/foo%20bar/~baz/"

~ は encode してくれないのね。

(w3m-url-encode-string "example.jp/foo bar/~baz/")
=> "example.jp/foo+bar/%7ebaz/"

+ か(´・ω・`)
今は自力でやってるけど、どっかにあったりする?

320 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/10 22:57:43]
~ をエンコードすべき理由が思い当たらないんだけど

321 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/10 23:22:32]
同一性をチェックしたいとか?

322 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/11 10:59:40]
RFC1738 の時代には「+」が unreserved で「~」はエスケープが必要だった。
後に RFC2396 ができて「+」が reserved になり、「~」は unreserved に
なった。

> ~ は encode してくれないのね。
は RFC2396 に

> + か(´・ω・`)
は RFC1738 にしたがっているのだろう。



323 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/11 14:27:03]
つまりどれにも準拠してないってことね。


324 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/11 16:19:09]
え?



325 名前:319 mailto:sage [04/12/12 12:55:16]
発端は wget -x で件の url を取得するとああいったディレクトリを掘るんで、
それを emacs 側で知りたいってことからでした。
>>322 氏の解説のように変遷があると既存の関数でズバリな encode を期待す
るのは無理がありそうですね。自力 encode で納得しときます。
レスどーもでした。


326 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/12 21:58:29]
wgetってなんで ~ をエンコードしちゃうんだろうね。
だれかハックしてエンコードしないバージョンを配布してくれ。


327 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/12 22:20:03]
そんなんハックとはいえん

328 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/13 12:21:41]
一文字変えるだけ?

329 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/21 22:10:29]
最近Emacsを使うだけの立場から少しいじろうと思って、
「やさしいEmacs-Lisp講座」など読みました。

しかし、この板に書かれてるようなLispははるかに上でびっくりしました。
hookとかどこにもほとんど説明がないし、始めはshow-paren-modeが気に食わなくて
対応する括弧のbackgroundではなく、括弧そのものがboldでredになるようにしたい
と思ったのですが第一歩が踏み出せません。

cc-mode.elとかみれば参考になるかと思いきや、やはり難しい。。
faceというのをいじればよいことまでは分かったのですが、他の機能もごちゃごちゃ
ついているので、boldにしたりするのにどれが本当に必要なものか見分けがつきません。

みなさんはこのギャップをどこで勉強して埋められたのですか?
よろしければ教えてください。
そして、こんな自分にどうやって、そして何を勉強してよいのかアドバイスください。
よろしくお願いします。

330 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/22 00:43:21]
知識に上に下もないと思うけど。

「やさしいEmacs-Lisp講座」は自分も一番最初に読んだ。elispの基本を押さえている
し、かなり良い本だと思う。

自分の場合は、その知識を元に .emacs をいじったり、他人の .emacs を覗いたり、日
本語 Info で分からないこと調べたりしていくうちに、個人レベルでやりたいことはで
きるようになった。

その時は分からなくても、何ヶ月後かに調べてみたら、あっさり分かったりするので、
焦らずに知識を蓄えていくのが一番の近道ではないでしょうか。


331 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/22 01:38:24]
>>332
確かにこっちのほうがスマートだね.
何でオレ, あんなふうに書いたんだろ….


334 名前:名無しさん@お腹いっぱい。 mailto:sage [04/12/22 04:07:45]
>>330-333
ありがとうございます!あれから少し探してみたのですが、
どうも各モードにどんな変数があるかをInfoで見つけて、
それをいじるというのがカスタマイズの初歩のようですね。




335 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/07 00:10:45]
diredモードで拡張子ごとに色を付けたいんですけどどうやったらいいですか?

336 名前:名無しさん@お腹いっぱい。 mailto:sage [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 mailto:sage [05/01/07 19:28:01]
お〜、ありがとうございます。
バッチリ動きました。
ただexeにboldが効いてなかった様な気も・・。
Fontlockの設定とかが原因でboldに気が付かなかっただけかな。
boldを色指定に変えて使ってます。

十分満足なんですけど
拡張子だけに色を付けるとなると相当面倒ですか?
理想としては拡張子はファイル名とは別のカラムに表示して(lsの設定?)
さらに拡張子にだけ色を付けたいのですが。

つーかemacs楽しいですね。時間足りないw
ある程度Lisp覚えてがんがんカスタマイズできるようになりたいな。

338 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/25 23:45:32 ]
>>339
その環境だと shift+right も right も一緒になってないか?


341 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/26 00:37:20 ]
スレ違いだろうが、とりあえず [?\e ?\[ ?d] とか "\e[d" とか


343 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/26 00:49:47 ]
おお、いけました。ありがとうございます。
shift+upでバッファ間を移動しまくっております。
previous-bufferみたいな関数あるかと思ったんですけどないみたいですね。残念。
書くスキルないのはもっと残念です。

どこで質問するか迷ったんですけどやっぱりスレ違いでしたか。
emacsスレで聞けばよかったです。
ありがとうございました。


344 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/26 01:40:01 ]
>>343
> shift+upでバッファ間を移動しまくっております。
> previous-bufferみたいな関数あるかと思ったんですけどないみたいですね。残念。

バッファっつーか、ウィンドウ間を移動したいんだよね?
windomove.el がいいんじゃないかと。



345 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/26 01:41:01 ]
> windomove.el
変なところに o が入った。windmove.el だ。スマソ

346 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/11 20:30:48 ]
(global-set-key "\C-cg" "\C-f\C-b")

351 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/11 20:45:11 ]
(interactive)
ていうかelispにbeginは無いし

352 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/11 20:46:07 ]
(define-key mode-specific-map "g"
(lambda ()
(interactive)
(forward-char)
(backward-char)))

353 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/11 21:58:34 ]
どうも、解決しました。
(ここ結構人居るんですね)
other-windowを組み合わせようとしてたんですが、
これが引数とるのに気が付かなくて二重にはまってました。
M-xから呼ぶときは引数いらないのに...いまだに意味不明です。

354 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/11 22:59:58 ]
(other-window ARG &optional ALL-FRAMES)
だから引数は必要。
M-x でいらない(ように見える)のは (interactive "p") で
(prefix-numeric-value current-prefix-arg) が渡されるから。



355 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/12 01:45:40 ]
>>353
要らない世話かも知れないけど>>354に補足すると
(interactive "p") で渡っているのは ARG の方だけね

ALL-FRAMES を指定するときは
(other-window 1 t)
のようにもう一つ引数がいるからね

詳しくは info を


356 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/12 08:41:04 ]
Lispはちょっと触った事あったんでいけるかと思ってたんですが、
Emacsの仕様もあって結構難しいですね。
ちょっと勉強してみます。

357 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 01:21:29 ]
(re-search-forward "\\cj" (point-max) t)

Emacs21 なら
(re-search-forward "[[:nonascii:]]" (point-max) t)
が使えたはず。

362 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 01:27:41 ]
Emacsのunibyte/multibyteってのはタダのバイト列として読むか
なんらかのエンコーディングで表現された文字として読むかってとこで生じる。
単に表現されたときに1バイトになるかってのは関係ない。


363 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 02:29:27 ]
はいはい。それはmake_string_from_bytesだからでしょ。
それは考慮してるんじゃなくてunibyteにするかmutlibyteにするかっていう
判定材料に使ってるだけだよ。
その関数の使われるところがどういうところかも見れば自明だと思うんだけど。




365 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 03:06:30 ]
自日月

366 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 03:38:11 ]
>>364
はいはい。じゃあ
(multibyte-string-p (string 97)) => nil
(multibyte-string-p (string 53794)) => t
を説明してみ。

367 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 03:49:16 ]
アホだな。Fstringってmake_string_from_bytesを使ってる例でしかないじゃん。
それはインタフェースからしてmultibyteかどうかの情報が与えられないから、
multibyteかどうかを判定するのに文字の範囲から推定するしかできないからでしょ。

逆に例えば既にmultibyteである情報源から文字列を作るとき、
要するにmultibyte bufferからsubstringする場合なんかはいちいち
中身が1バイト文字だけかどうかなんて考慮しないよ。

まあソースコード読みなよ。
Emacsでのunibyte/multibyteの扱いってものについて学習してらっしゃい。


368 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 05:04:41 ]
>>362
> 単に表現されたときに1バイトになるかってのは関係ない。
に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
ると言ってるのに、SINGLE_BYTE_CHAR_P だけからなる文字列も multibyte に
なり得ると反論してもしょうがないだろうに。

369 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 05:27:37 ]
> に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
> る
そこが問題なのか? 違うだろ。だって当たり前すぎるほど当たり前じゃん。
>>363はタダのバイト列として読むんじゃなくてEmacsの内部表現で表現された
文字列として読んでるんだから。

そこを問題にしているとしたら363の方こそナンセンス。



370 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/19 07:02:02 ]
>>366がどういう意図をもっているのか自分で説明すべきだろ。
何を根拠に何を主張したいのか書かなきゃ単なる煽りの手口。


371 名前:359 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/20 18:40:57 ]
>>373
おおぅ、ナイスです。
ありがたく使わせていただきます。



375 名前:373 mailto:sage [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 mailto:sage [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 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [05/03/20 13:59:42 ]
(defadvice next-error (after next-error-plus-alpha activate)
(insert "OMOITSUKANAI"))
定義してgrep+next-error実行しても, OMOITSUKANAIがバッファに挿入され
ないのはどうしてなのだろうか

379 名前:名無しさん@お腹いっぱい。 mailto:sage [05/03/20 18:00:24 ]
>>378
(with-current-buffer ) を抜けたあとだから。


380 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/21(月) 13:45:50 ]
>>379 with-current-buffer 以後でも insert を可能にする方法は何
かありますか?

381 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/21(月) 18:16:49 ]
>>380
with-current-buffer

382 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/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 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/23(水) 09:16:12 ]
>>382
(when (setq next-error-last-buffer (next-error-find-buffer))
...

384 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/23(水) 14:52:04 ]
>>383
その中に入れても結局なりませんでした。。。



385 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/23(水) 21:36:02 ]
>>384
最新の Emacs だと grep バッファは読み込み専用だけど,あらかじめちゃんと
書き込めるように対処はしてあるの?


386 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/24(木) 00:33:30 ]
>>385
書き込みしたいのは、次のエラー箇所が見つかったファイル (この場合はマッチするファイル)に
なので、 *grep* バッファ上でではありません。。
`next-error-last-buffer' がそのファイルじゃないのですか?

387 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/24(木) 01:36:43 ]
試してみると
next-error-last-buffer's value is #<buffer *grep*>
ってなるから違うみたい


388 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/24(木) 22:05:20 ]
emacs 21.4 を使っています。
カーソル配下のtextのface取得方法が解からないので、教えてください。
やりたいことは、特定の単語の色の変更では無く、
その単語の所属するキーワードグループまるごと色を変更したい為、
カーソル配下の単語から、faceを特定したいということです。

お願いします。

389 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/24(木) 22:51:54 ]
(get-text-property (point) 'face)

390 名前:388 mailto:sage [2005/03/25(金) 00:51:21 ]
>>389
thx

391 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/30(水) 12:38:13 ]
Emacs には「グラフ」データ構造の library がないように思えます。
ここでプログラムしてみちゃってください。

392 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/30(水) 12:52:18 ]
ム板でやると盛り上がると見た。

393 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/30(水) 17:48:01 ]
>>392
ここでよくない? こういうプログラミング練習の為にこのスレッドがあるんじゃないの?

394 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/30(水) 18:33:00 ]
ライブラリ的なのはあっちっしょ。好きそうな人もいるし。



395 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/30(水) 21:02:12 ]
cons と car と cdr で事足りる

396 名前:名無しさん@お腹いっぱい。 [UNIX時間(+0900)35年,2005/04/03(日) 07:43:30 ]
>>395
おまえは、 「情報なんて 0 と 1 のみで事足りる」
とでも言うのか?

アホ。

397 名前:名無しさん@お腹いっぱい。 mailto:sage [UNIX時間(+0900)35年,2005/04/03(日) 20:28:38 ]
「ハッカーと画家」に
car, cdr, cons, quote, cond, atom, eq
だけで Lisp の関数は書けるとかって書いてあった。
四則演算はどうやってやるんだ?

398 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 mailto:sage [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 名前:名無しさん@お腹いっぱい。 [2005/04/05(火) 10:30:07 ]
おいおまえら、知能ベースを elisp で書けよ。
はやくしろ。

401 名前:Zeno ◆5nZQbNmQPs [2005/04/05(火) 16:08:22 ]
Re:>400
              それはいいアイディアである

402 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/05(火) 17:27:56 ]
お前なんかに誉められてもうれしくないよ

403 名前:Zeno ◆5nZQbNmQPs [2005/04/06(水) 11:34:00 ]
Re:>402
              お前のことは誉めていない。
          知能ベースでも書いてから物を言うようにしろ

404 名前:Zeno ◆5nZQbNmQPs [2005/04/06(水) 11:43:29 ]

Tail Recursion は未だに Elisp に実装されていない。
この事実に理由はあるのか?




405 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/06(水) 12:09:56 ]
tail recursion なら実装されてますがなにか?
おまいの言いたいのは tail recursion optimization のことだろ。
理由はもちろんある。
-- 終了 --

406 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/06(水) 13:29:51 ]
あんま相手すんな。
伝染るぞ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<277KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef