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 ではひとつ、コード中心の熱いバトルをよろぴく。
581 名前:名無しさん@お腹いっぱい。 [2005/09/17(土) 06:30:27 ] LISPのクラスを取るか迷っている初心者ですが、LISPが出きると、どういうことができるようになるのか教えてください。
582 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 08:00:56 ] >>581 特にない。
583 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 08:54:52 ] >>581 普通のやつらの上を行ける。
584 名前:名無しさん@お腹いっぱい。 [2005/09/17(土) 11:44:54 ] >>583 どういう点で?
585 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 13:42:35 ] >>584 ttp://www.shiro.dreamhost.com/scheme/trans/beating-the-averages-j.html
586 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 14:05:26 ] >>581 クラスって大学か何かか。 EmacsLispでCLOSみたいなもんを誰か作ったのかと思った。
587 名前:名無しさん@お腹いっぱい。 [2005/09/17(土) 14:29:15 ] 学校の授業という意味です。
588 名前:名無しさん@お腹いっぱい。 [2005/09/17(土) 14:44:13 ] >>585 ありがとうございます。読みました。 中で「Lispはパワフルな言語だとは知っているけど」等、LISPは凄いと絶賛していますが、 具体的にどう凄いのかってのが、どんなところで使われているのかってのが分からないのですが…。 LISPが出きると、どういうときにそれを活かせますか? この授業は卒業のため取らなければならない科目ではないのですが、 将来役に立つのなら、取って見ようかなと迷っています。
589 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 15:16:50 ] 学生なのに自分からは何も調べようとしないやつには、どんなことであろうと将来役に立たない
590 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 15:17:55 ] lisp なんかできたとして、将来研究所とかに行かない限り用途ないのでは? perl なり php なり使えたほうがバイトも出来ておとく。
591 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 15:41:04 ] perlなんか授業でやるか?
592 名前:名無しさん@お腹いっぱい。 [2005/09/17(土) 16:06:14 ] perlの授業あります。 将来はネットワークエンジニア希望です。
593 名前:sage [2005/09/17(土) 17:56:43 ] >>592 いらないんじゃね?
594 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 17:59:54 ] 久しぶりに2chに来たらsageるつもりがageちまった。
595 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 18:06:49 ] とりあえず、この板ってのは古い知識しか持たない老人が多いので、 こんな場所で進路相談をするのは不適切なんじゃないかなと思う。
596 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 20:58:02 ] 将来役に立つかっつったら微妙だわな。 だけど大学において考え方を学ぶ、学び方を学ぶって意味ではlispはおすすめ かもしれず。 関係ないけど、「出きる」って変換は気持ち悪いな。
597 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 21:02:25 ] LISPを使って(応用して)なにをするかによるだろう。 単純に、LISPを勉強するだけなら独学で(Emacs使ってるうちに)勉強 できるよ。なにしろ、単純な言語だからな。 インタプリタの作成とかまでやるんだったらいいんじゃないかな? 言語仕様が簡単だから結構楽しいと思うよ。
598 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 21:07:32 ] > 将来役に立つかっつったら微妙だわな。 > だけど大学において考え方を学ぶ、学び方を学ぶって意味ではlispはおすすめ > かもしれず。 関係ないけど、気持悪い書き方だな。
599 名前:名無しさん@お腹いっぱい。 [2005/09/17(土) 21:24:34 ] だいたい、Emacs Lispの板でLispについて訊いても……
600 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 21:27:13 ] > 訊 おじさん、何でこんな漢字つかってるの?
601 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 22:20:25 ] >>600 >>600 >>600
602 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/17(土) 22:25:40 ] >>601 一時帰宅が許されたのですか。病状も多少はよくなったようで、 御同慶の至り。
603 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/18(日) 00:46:55 ] Emacs Lispの板???
604 名前:名無しさん@お腹いっぱい。 [2005/09/18(日) 02:21:31 ] 返事が遅れました。初心者に付き合っていただいて、ありがとうございます。 LISPがC言語とどう違うのか教えてください。 言語が違うってのは略。利点や使う場面等。 UNIXと深い関係にあるのですか?
605 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/18(日) 02:22:56 ] Lisp なんかつかうやつはばかです。ということじゃないかな。
606 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/18(日) 02:37:36 ] ム板のlispスレできいたら?
607 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/18(日) 03:20:23 ] とりあえず初心者装った釣りでないならバカでしょう 知ってか知らずかかまうね、ここの人は
608 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/18(日) 17:53:19 ] 使う場面: スクリプティング用途 例: Emacsのカスタマイズ Gimpのプラグイン (script-fu) ゲーム作り (AisleRiotのルールとかtrackballsのステージとか) WMのカスタマイズ (scwm.sourceforge.net/ とか) uimの各種IMの実装 利点: クロージャとマクロが使える いや、「LispとCがどう違うか」なんて言ってる奴にマジレスするなんて 我ながら釣られているとしか思えないが…
609 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/18(日) 18:15:22 ] C 使えれば、ライブラリ使っていろんなもの開発できるしなぁ。
610 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/18(日) 23:22:31 ] 複雑なことをやろうとすると、 結局Cで未完成なLISP(略
611 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/18(日) 23:24:42 ] どれだけ lisp な製品が世の中に出ているかもあわせて考えるべきんじゃないかと。
612 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/19(月) 13:02:46 ] >>611 誰かがクラッシュバンディクーの中でlispが動いているとか言っていた
613 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/19(月) 13:24:27 ] 建築系でメジャーな AutoCAD も lisp でカスタマイズする。 Emacs みたいに lisp interpreter をコアにしてるのか?
614 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/20(火) 02:30:22 ] ってか、俺としてはむしろ、LispとCの共通点の方が知りたい。
615 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/20(火) 11:43:27 ] >>612 ゲームはメモリ管理がシビアだから既存の物を使えないんで、 1から実装することになって、結局、実装の容易なlispになるんだろう。
616 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/20(火) 11:48:46 ] >>612 これか。 ttp://www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview21.html
617 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/20(火) 12:24:10 ] >>616 正直、PythonやRubyが普及している今となってはlispを使う意味はないよなぁ。 その記事で、オブジェクトの永続化とか動的バインドとかで、すごい助かった って言ってるけど、それなら別にlispでなくてええやん。Pythonでええやん。
618 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/20(火) 13:23:54 ] まとめると、lisp なんか使う奴はバカですってことか。
619 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/20(火) 13:24:50 ] 別に Python でなくてもええやん。
620 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/20(火) 14:16:29 ] いつまでもこのスレでこの話を扱ってる奴が知障
621 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/20(火) 21:40:31 ] 池沼がこのスレに粘着するから、 そんなこと書いてはいけません。
622 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/22(木) 05:23:11 ] Lisp 道場らしくいこう。 java のソース上で、find-file-at-point したときに、クラスに対応したファイルを探 してみる。 制限: - 同じソースツリー上にあるものだけが対象。 - 今見てるソースと同じディレクトリにクラス名と同じパッケージがあったりするとダメ だったりする。 次のレスからソース。
623 名前:622 mailto:sage [2005/09/22(木) 05:24:27 ] ;; その1 (require 'ffap) (eval-when-compile (require 'cl)) (defun ffap-java-package-to-path (package-or-fqcn) (replace-regexp-in-string "\\." "/" package-or-fqcn)) (defun ffap-java-import-list () (save-excursion (goto-char (point-min)) (let (list) (while (re-search-forward "import\\s-+\\(.+\\)\\s-*;" nil t) (push (match-string 1) list)) (nreverse list)))) (defun ffap-java-src-directory () (save-excursion (goto-char (point-min)) (if (re-search-forward "package\\s-+\\(.+\\)\\s-*;" nil t) (let ((package (match-string 1))) (replace-regexp-in-string (concat (regexp-quote (ffap-java-package-to-path package)) "$") "" (directory-file-name default-directory))) default-directory)))
624 名前:622 mailto:sage [2005/09/22(木) 05:25:17 ] ;; その2 (defun ffap-java-mode (name) (let ((class (car (split-string name "\\."))) (import-list (ffap-java-import-list)) (src-directory (ffap-java-src-directory))) (or (catch 'found-class (dolist (import-class import-list) (when (string-match (concat "\\." (regexp-quote class) "$") import-class) (throw 'found-class (expand-file-name (concat (ffap-java-package-to-path import-class) ".java") src-directory))))) (ffap-locate-file name '(".java") (delq nil (cons "." (mapcar (lambda (import-class) (when (string-match "\\.\\*$" import-class) (expand-file-name (ffap-java-package-to-path (replace-match "" nil nil import-class)) src-directory))) import-list)))))))
625 名前:622 mailto:sage [2005/09/22(木) 05:26:45 ] ;; 設定 (add-to-list 'ffap-alist '(java-mode . ffap-java-mode)) これでおしまい。 素直に jde とか gtags 使えよって話もあるけどね。 ちょっと開いたソースのクラスを追ったりするのには使えると思う。
626 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/24(土) 12:38:06 ] >>622 おっ、これ結構つかえる。あんがと
627 名前:622 mailto:sage [2005/10/08(土) 02:57:34 ] 淋しすぎるから、ちょっとだけネタ投下。 nxml ネタその1 昔どっかに書いた気もするけど、無理矢理 mule-ucs と共存させるにはこんな感じに修 正すればそれっぽくいける。 ただし、どんな問題が起きるか分からないから自己責任でやる事。 ;; 何かあるから無効にしてるハズだから。 --- nxml-mode-orig/nxml-mode.el +++ nxml-mode/nxml-mode.el @@ -33,8 +33,8 @@ -(when (featurep 'mucs) - (error "nxml-mode is not compatible with Mule-UCS")) +;; (when (featurep 'mucs) +;; (error "nxml-mode is not compatible with Mule-UCS")) --- nxml-mode-orig/rng-auto.el +++ nxml-mode/rng-auto.el @@ -26,8 +26,8 @@ -(when (featurep 'mucs) - (error "nxml-mode is not compatible with Mule-UCS")) +;; (when (featurep 'mucs) +;; (error "nxml-mode is not compatible with Mule-UCS"))
628 名前:622 mailto:sage [2005/10/08(土) 03:01:50 ] nxml ネタその2 自分で mime-charset の名前を定義できるようにする。 ari さんの cp932.el を使えばカンペキ。 (defvar nxml-mime-charset-coding-system-alist '(("windows-31j" . shift_jis) ("cp932" . shift_jis) ("ms932" . shift_jis))) (defadvice nxml-mime-charset-coding-system (after nxml-mime-charset-coding-system-use-alist activate) (unless ad-return-value (setq ad-return-value (cdr (assoc-ignore-case (ad-get-arg 0) nxml-mime-charset-coding-system-alist)))))
629 名前:名無しさん@お腹いっぱい。 [2005/10/21(金) 12:16:09 ] バッファリストをソートしようと こんな感じにしたけど、全部のバッファが表示されない。。 (defadvice buffer-list (around buffer-list-around activate) (sort ad-do-it '(lambda (b1 b2) (string< (buffer-name b1) (buffer-name b2))))) defadvice 良く分からん。 Elispも。
630 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/21(金) 16:32:23 ] make-variable-buffer-localとdefvaraliasの 合の子みたいなのってできないでしょうか。 デフォルトでは変数Bは変数Aの値を使うけれど、 setqされるとAの値を変更するのではなく、 以後は独立した値を持つ、と。
631 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/21(金) 16:38:22 ] ムリ。
632 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/21(金) 16:50:26 ] (or B A) で代用か
633 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/21(金) 17:29:55 ] make-local-variable?
634 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/21(金) 17:37:53 ] >>629 buffer-listは表示なんかしない。 何がしたいのかよくわからんが、list-buffersでの並びを制御したいのだったら list-buffers-noselectをadviceするべきだと思う。
635 名前:名無しさん@お腹いっぱい。 [2005/10/21(金) 19:49:11 ] したいことは、C-xC-bのとき ソートしたいなーと思ったんだけど。 list-buffers-noselect の中で buffer-list を呼んでるんで いいと思ったが、だめか。。
636 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/21(金) 20:10:55 ] >>635 (setq ibuffer-default-sorting-mode 'alphabetic)してibuffer使っとけ。
637 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/21(金) 20:23:34 ] list-buffers 使いやすいか?
638 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/21(金) 20:59:36 ] Oh Thanks. ところで、ibuffer ってファイルだけ 表示って可能か? C-uC-xC-b っぽいこと。
639 名前:名無しさん@お腹いっぱい。 [2005/10/26(水) 16:58:28 ] 初歩的な質問だと思いますが, xemacsで /home/mako/jikken/userFiles/690562.txt など, /homeではじまり.txtで終るファイル へのパスが書かれていた場合, そのパスの上でマウスの中ボタンをクリックすれば, xemacsでそのファイルを起動できるようにする方法を 教えてください. あまりLISPにくわしくないので,記述法など詳細に教えて頂ければ 助かります. googleで検索したところ,URLをマウスの中ボタンをクリックすれば, ブラウザで起動できるようにする方法は, (autoload 'browse-url-at-mouse "browse-url" "Ask a WWW browser to load a URL clicked with the mouse." t) (add-hook 'mew-message-mode-hook (function (lambda() (local-set-key [mouse-2] 'browse-url-at-mouse) ))) でできるという事は分かりました. これを,txtファイル,XEMACSで起動という形に出来れば最高なのですが. またいろいろ調べていると,thingatptやfiberという プログラムを使うと出来そうなのですが,そこからどうすれば良いのかが 分かりません.明日までに出来るようにしてと頼まれているので, 急いでいます. 宜しくお願い致します.
640 名前:名無しさん@お腹いっぱい。 [2005/10/26(水) 17:44:52 ] よろしくお願い致します. 急いでいます.
641 名前:名無しさん@お腹いっぱい。 [2005/10/26(水) 17:45:58 ] すみません. 自己解決しました.
642 名前:639 [2005/10/26(水) 19:05:10 ] 解決はしていません. よろしくお願い致します.
643 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/26(水) 19:14:58 ] Emacs Lisp道場っつーネタかよそれ。しかもすげー自己中。そしてバカ。 小学生が大学生の電気工学の授業中に乗り込んでいって これができる回路を作ってください。明日までに提出する自由工作なんです。よろしく。 ついては電子工作に詳しくないので回路や作り方も懇切丁寧に教えてください。 というみたいな行動を自分がしているというのは認識しているか? >>639
644 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/26(水) 19:57:32 ] Emacs 22だとlist-buffersではWindowsのエクスプローラとかみたいに 見出しをクリックして並べ替えできるようになってるんだけど、 ibufferは旧態依然なので見劣りしてしまうね。
645 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/26(水) 22:19:06 ] クリック
646 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/26(水) 23:28:46 ] >>644 Emacsの上でまでマウスを使いたくない派の俺としては、旧態依然としていても , や s a とかでソートのモードが変更できる ibuffer の方が100万倍使いやすいわけだが。
647 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/26(水) 23:42:04 ] マウスでできる != マウスでしかできない
648 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/27(木) 01:58:41 ] >>639 が「自分はヌルーされている」と気付くのはいったいいつかな?(ワクテカ(AA略
649 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/27(木) 10:40:24 ] 俺もマウスは嫌いだが、Diredの中のファイルは マウスで他のアプリにドロップしたくなる。
650 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/27(木) 12:17:30 ] そもそもマウス刺さってないし。
651 名前:名無しさん@お腹いっぱい。 [2005/10/27(木) 13:49:43 ] kill-ring-save は 'invisible 属性のテキストもコピーしてしまいますが、 'invisible 属性のない普通のテキストのみをコピーするようにするにはどうすれ ば良いでしょうか?
652 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/28(金) 01:25:52 ] >>649 Windows だったら CraftDrop と組み合わせればいけるよ。
653 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/28(金) 02:15:52 ] >>651 でっちあげてみた。 ただ、複数の invisible 属性があるような場合だとうまく動かない。 たとえばこんなの (concat "a" (propertize "b" 'invisible 'test1) (propertize "c" 'invisible 'test2) "d") (defun kill-ring-save-without-invisible (beg end) (interactive "r") (kill-ring-save beg end) (let ((kill (car kill-ring)) new-kill pos) (when (get-text-property 0 'invisible kill) (setq kill (substring kill (or (next-single-property-change 0 'invisible kill) (length kill))))) (while (setq pos (next-single-property-change 0 'invisible kill)) (setq new-kill (concat new-kill (substring kill 0 pos))) (setq kill (substring kill (or (next-single-property-change pos 'invisible kill) (length kill))))) (setq new-kill (concat new-kill kill)) (kill-new new-kill t)))
654 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/28(金) 05:44:14 ] 複数の invisible 属性に対応してみた。 (defun kill-ring-save-without-invisible (beg end) (interactive "r") (kill-ring-save beg end) (let ((kill (car kill-ring)) (pos 0) new-kill) (while (> (length kill) 0) (setq pos (or (next-single-property-change 0 'invisible kill) (length kill))) (unless (get-text-property 0 'invisible kill) (setq new-kill (concat new-kill (substring kill 0 pos)))) (setq kill (substring kill pos))) (kill-new new-kill t)))
655 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/28(金) 10:25:41 ] >>652 だんな! このご恩は一生わすれませんぜ! マウス使わないでOKなとこもGoodですぜ!
656 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/28(金) 13:03:48 ] どこが道場なんだ?
657 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/28(金) 13:28:05 ] ここ。
658 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/28(金) 14:03:40 ] 六三郎
659 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/28(金) 15:52:28 ] >>653-654 さん お返事ありがとうございます。 多分その関数は 21.3 までなら動くでしょうが、22.* では動かないかと思います。 (22 では (get-char-property pos 'invisible) が invisible 属性のテキストに対してうまく機能しないので。) まあでもなんとか自力でやりたいことを達成することができました。 お世話になりました
660 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/28(金) 16:08:26 ] んじゃ22で動くようにしたものを貼ってよう。giveはするがtakeはしない?
661 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/28(金) 16:09:02 ] まちがった、giveとtakeが逆だった……orz
662 名前:659 mailto:sage [2005/10/29(土) 00:04:49 ] >>660 san そうですよね。 ;; [ 2005-10-28 (00:38) ] (defun kill-ring-save-visible (beg end) (interactive "r" ) (let ((s "") from to) (save-excursion (save-restriction (narrow-to-region beg end) (setq from (goto-char (point-min))) (while (not (eobp)) (if (point-invisible-p) (progn (setq to (point)) (setq s (concat s (buffer-substring-no-properties from to))) (end-of-visible-line) (setq from (point))) (forward-char))) (if (> (setq to (point)) from) (setq s (concat s (buffer-substring-no-properties from to)))) (kill-new s))))) invisible になるまで1文字ずつ進まないようにしてるので、ここら辺はもうちょっと 速くなるかもしれません。
663 名前:659 mailto:sage [2005/10/29(土) 00:06:03 ] 1文字ずつ → 1文字ずつしか
664 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/29(土) 02:29:21 ] 22 で確認 (defun kill-ring-save-visible (begin end) (interactive "r") (let ((r '()) (p begin) n) (while (and (setq n (next-single-property-change p 'invisible nil end)) (> n p)) (unless (get-text-property p 'invisible) (push (buffer-substring p n) r)) (setq p n)) (kill-new (apply #'concat (nreverse r)))))
665 名前:659 mailto:sage [2005/10/29(土) 14:06:12 ] >>664 san やっぱり自分の環境ではその関数も全く機能しません。 emacs-version => GNU Emacs 22.0.50.1 (i386-mingw-nt5.1.2600) of 2005-07-11 on A208752
666 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/29(土) 18:56:32 ] next-single-property-change が nil を返した時の処理が抜けてるせいかな。 (defun remove-invisible (s) (interactive "r") (let ((r '()) (p 0) n) (while (and (setq n (next-single-property-change p 'invisible s)) (> n p)) (unless (get-text-property p 'invisible s) (push (substring s p n) r)) (setq p n)) (unless (get-text-property p 'invisible s) (push (substring s p) r)) (apply #'concat (nreverse r)))) (remove-invisible (concat "a" (propertize "b" 'invisible 'test1) (propertize "c" 'invisible 'test2) "d")) => "ad" になる? GNU Emacs 22.0.50.2 (i386-unknown-freebsd6.0, X toolkit, Xaw3d scroll bars) of 2005-10-29 だと期待どおりの動作をするが。
667 名前:659 mailto:sage [2005/10/29(土) 20:35:40 ] >>666 はい、今評価してみた所、 "ad" になりました。 >>662 に追加: すみません、肝心な関数を貼るのが抜けていました。 >>662 の側に置いてあげて下さい。 (defun point-invisible-p () (line-move-invisible-p (point))) ↑でも使用してある通り、 `line-move-invisible-p' であれば invisible をうまく見つける ことができるのですけどね。。。 (defun line-move-invisible-p (pos) "Return non-nil if the character after POS is currently invisible." (let ((prop (get-char-property pos 'invisible))) (if (eq buffer-invisibility-spec t) prop (or (memq prop buffer-invisibility-spec) (assq prop buffer-invisibility-spec)))))
668 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/29(土) 23:16:07 ] もしかしてこーゆーこと? (defun invisible-p (position &optional object) (let ((invisible (get-char-property position 'invisible object))) (if (eq buffer-invisibility-spec t) invisible (catch :result (dolist (prop (if (consp invisible) invisible (list invisible))) (when (or (memq prop buffer-invisibility-spec) (assq prop buffer-invisibility-spec)) (throw :result t))))))) (defun kill-ring-save-visible (begin end) (interactive "r") (let ((r '()) (p begin) n) (while (and (setq n (next-single-char-property-change p 'invisible nil end)) (> n p)) (unless (invisible-p p) (push (buffer-substring p n) r)) (setq p n)) (unless (invisible-p p) (push (buffer-substring p end) r)) (kill-new (apply #'concat (nreverse r)))))
669 名前:659 mailto:sage [2005/10/30(日) 05:21:17 ] >>668 そうそれです。完璧に動作しました! しかも速度も高速ですね。 buffer-invisibility-spec が鍵を握るのはわかって いたのですが、今コードを解釈する時間がない為、連絡だけさせていただきました。
670 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/30(日) 06:24:23 ] >>659 で言っていたうまく機能しないと言うのは見えているものまで一緒に消えちゃっ ていたと言う事でOK?
671 名前:670 mailto:sage [2005/10/30(日) 06:34:20 ] 少しわかりずらいな。 つまり、 (with-current-buffer (window-buffer (display-buffer (get-buffer-create "*test*"))) (erase-buffer) (add-to-invisibility-spec '(test1 . t)) (insert (concat "a" (propertize "b" 'invisible 'test1) (propertize "c" 'invisible 'test2) "d"))) をした結果の *test* buffer の中身に対して kill-ring-save-visible を実行した結果が => "acd" となって欲しかったという事でいい?
672 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/30(日) 19:48:20 ] もしかすると text-property -> char-property で overlay が認識される ことで解決したってことかも。 何にせよ、Emacs 22 だからというより設定のせいっぽいが。 (デフォルトでは buffer-invisibility-spec は 22 でも t だし invisible な overlay も存在しない)
673 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/30(日) 22:50:13 ] あるソフトウェア独自の簡単なスクリプト言語に対応するメジャーモードを作りたいのですが、 コメント部の色をかえるにはどうしたらいいのでしょうか? コメントはC言語の /* が @cs に、*/ が @ce になったような感じです。複数行可。 comment-start と comment-endにそれぞれ値をセットするばいいだけというわけではないのでしょうか? よろしくお願い致します。
674 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/10/31(月) 11:27:48 ] Emacs Lisp神社
675 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/01(火) 02:51:02 ] >>673 それっぽく色を付けるならこんな感じかな。 modify-syntax-entry でコメント開始/終了文字の1文字目と2文字目を指定する。 実は Emacs で3文字以上からなるコメント文字を扱うのは結構面倒臭い。 どこかにお手軽に扱える elisp が転がってないかな? (defvar hoge-mode-syntax-table nil) (unless hoge-mode-syntax-table (setq hoge-mode-syntax-table (make-syntax-table)) (modify-syntax-entry ?@ ". 13" hoge-mode-syntax-table) (modify-syntax-entry ?c ". 24" hoge-mode-syntax-table)) (defvar hoge-font-lock-keywards nil) (defun hoge-mode () (interactive) (kill-all-local-variables) (setq comment-start "@cs") (setq comment-end "@ce") (set-syntax-table hoge-mode-syntax-table) (set (make-local-variable 'font-lock-defaults) '(hoge-font-lock-keywards)) (setq mode-name "Hoge") (setq major-mode 'hoge-mode))
676 名前:675 mailto:sage [2005/11/01(火) 03:17:06 ] 強引にやってみた。 複数行にマッチするのは font-lock で激しくすすめられてないっぽいけど、おーけー としとく。 実は hoge-font-lock-comment-matcher は内部で comment-start, comment-end を使う ようにすると色んな mode で使えて嬉しいかもしれないとか思った。 (defvar hoge-font-lock-keywards nil) (defvar hoge-font-lock-syntax-keywords '((hoge-font-lock-comment-matcher (1 "!") (2 "!")))) (defun hoge-font-lock-comment-matcher (limit) (let (beg end) (when (re-search-forward "@cs" limit t) (setq beg (cons (copy-marker (match-beginning 0)) (copy-marker (match-end 0)))) (when (re-search-forward "@ce" limit t) (setq end (cons (copy-marker (match-beginning 0)) (copy-marker (match-end 0)))) (set-match-data (list (car beg) (cdr end) (car beg) (cdr beg) (car end) (cdr end))) t)))) (defun hoge-mode () (interactive) (kill-all-local-variables) (setq comment-start "@cs") (setq comment-end "@ce") (set (make-local-variable 'font-lock-defaults) '(hoge-font-lock-keywards)) (set (make-local-variable 'font-lock-syntactic-keywords) hoge-font-lock-syntax-keywords) (setq mode-name "Hoge") (setq major-mode 'hoge-mode))
677 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/01(火) 21:34:42 ] 非同期にHTTPサーバとXMLなどのデータをやりとりする仕組みで、 ユーザイベントに動的に反応して、半リアルタイムに挙動を変える ようなUIのelispって何かある?
678 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/01(火) 21:46:00 ] ajax ですか?
679 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/01(火) 23:08:31 ] emacs-w3m
680 名前:677 mailto:sage [2005/11/02(水) 13:49:44 ] >>678 Ajaxのelisp版を想定中。alax? aelax? >>679 少なくとも現状のままでは、「非同期」ではなく動的ではないと思う。
681 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/02(水) 14:24:42 ] slime