【叩かれて】Emacs Lisp道場【強くなれ】at UNIX
【叩かれて】Emacs Lisp道場【強くなれ】 - 暇つぶし2ch603:名無しさん@お腹いっぱい。
05/09/18 00:46:55
Emacs Lispの板???

604:名無しさん@お腹いっぱい。
05/09/18 02:21:31
返事が遅れました。初心者に付き合っていただいて、ありがとうございます。
LISPがC言語とどう違うのか教えてください。
言語が違うってのは略。利点や使う場面等。
UNIXと深い関係にあるのですか?

605:名無しさん@お腹いっぱい。
05/09/18 02:22:56
Lisp なんかつかうやつはばかです。ということじゃないかな。

606:名無しさん@お腹いっぱい。
05/09/18 02:37:36
ム板のlispスレできいたら?

607:名無しさん@お腹いっぱい。
05/09/18 03:20:23
とりあえず初心者装った釣りでないならバカでしょう
知ってか知らずかかまうね、ここの人は

608:名無しさん@お腹いっぱい。
05/09/18 17:53:19
使う場面: スクリプティング用途
  例:
   Emacsのカスタマイズ
   Gimpのプラグイン (script-fu)
   ゲーム作り (AisleRiotのルールとかtrackballsのステージとか)
   WMのカスタマイズ (URLリンク(scwm.sourceforge.net) とか)
   uimの各種IMの実装
利点:
  クロージャとマクロが使える

いや、「LispとCがどう違うか」なんて言ってる奴にマジレスするなんて
我ながら釣られているとしか思えないが…

609:名無しさん@お腹いっぱい。
05/09/18 18:15:22
C 使えれば、ライブラリ使っていろんなもの開発できるしなぁ。

610:名無しさん@お腹いっぱい。
05/09/18 23:22:31
複雑なことをやろうとすると、
結局Cで未完成なLISP(略

611:名無しさん@お腹いっぱい。
05/09/18 23:24:42
どれだけ lisp な製品が世の中に出ているかもあわせて考えるべきんじゃないかと。

612:名無しさん@お腹いっぱい。
05/09/19 13:02:46
>>611
誰かがクラッシュバンディクーの中でlispが動いているとか言っていた


613:名無しさん@お腹いっぱい。
05/09/19 13:24:27
建築系でメジャーな AutoCAD も lisp でカスタマイズする。
Emacs みたいに lisp interpreter をコアにしてるのか?

614:名無しさん@お腹いっぱい。
05/09/20 02:30:22
ってか、俺としてはむしろ、LispとCの共通点の方が知りたい。

615:名無しさん@お腹いっぱい。
05/09/20 11:43:27
>>612
ゲームはメモリ管理がシビアだから既存の物を使えないんで、
1から実装することになって、結局、実装の容易なlispになるんだろう。


616:名無しさん@お腹いっぱい。
05/09/20 11:48:46
>>612
これか。
URLリンク(www.ogis-ri.co.jp)

617:名無しさん@お腹いっぱい。
05/09/20 12:24:10
>>616
正直、PythonやRubyが普及している今となってはlispを使う意味はないよなぁ。

その記事で、オブジェクトの永続化とか動的バインドとかで、すごい助かった
って言ってるけど、それなら別にlispでなくてええやん。Pythonでええやん。


618:名無しさん@お腹いっぱい。
05/09/20 13:23:54
まとめると、lisp なんか使う奴はバカですってことか。

619:名無しさん@お腹いっぱい。
05/09/20 13:24:50
別に Python でなくてもええやん。

620:名無しさん@お腹いっぱい。
05/09/20 14:16:29
いつまでもこのスレでこの話を扱ってる奴が知障

621:名無しさん@お腹いっぱい。
05/09/20 21:40:31
池沼がこのスレに粘着するから、
そんなこと書いてはいけません。


622:名無しさん@お腹いっぱい。
05/09/22 05:23:11
Lisp 道場らしくいこう。

java のソース上で、find-file-at-point したときに、クラスに対応したファイルを探
してみる。

制限:
- 同じソースツリー上にあるものだけが対象。
- 今見てるソースと同じディレクトリにクラス名と同じパッケージがあったりするとダメ
だったりする。

次のレスからソース。


623:622
05/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
05/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
05/09/22 05:26:45
;; 設定
(add-to-list 'ffap-alist '(java-mode . ffap-java-mode))

これでおしまい。
素直に jde とか gtags 使えよって話もあるけどね。
ちょっと開いたソースのクラスを追ったりするのには使えると思う。

626:名無しさん@お腹いっぱい。
05/09/24 12:38:06
>>622
おっ、これ結構つかえる。あんがと

627:622
05/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
05/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:名無しさん@お腹いっぱい。
05/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:名無しさん@お腹いっぱい。
05/10/21 16:32:23
make-variable-buffer-localとdefvaraliasの
合の子みたいなのってできないでしょうか。
デフォルトでは変数Bは変数Aの値を使うけれど、
setqされるとAの値を変更するのではなく、
以後は独立した値を持つ、と。

631:名無しさん@お腹いっぱい。
05/10/21 16:38:22
ムリ。

632:名無しさん@お腹いっぱい。
05/10/21 16:50:26
(or B A) で代用か

633:名無しさん@お腹いっぱい。
05/10/21 17:29:55
make-local-variable?

634:名無しさん@お腹いっぱい。
05/10/21 17:37:53
>>629
buffer-listは表示なんかしない。

何がしたいのかよくわからんが、list-buffersでの並びを制御したいのだったら
list-buffers-noselectをadviceするべきだと思う。


635:名無しさん@お腹いっぱい。
05/10/21 19:49:11

したいことは、C-xC-bのとき
ソートしたいなーと思ったんだけど。

list-buffers-noselect の中で buffer-list を呼んでるんで
いいと思ったが、だめか。。


636:名無しさん@お腹いっぱい。
05/10/21 20:10:55
>>635
(setq ibuffer-default-sorting-mode 'alphabetic)してibuffer使っとけ。

637:名無しさん@お腹いっぱい。
05/10/21 20:23:34
list-buffers 使いやすいか?

638:名無しさん@お腹いっぱい。
05/10/21 20:59:36
Oh Thanks.

ところで、ibuffer ってファイルだけ
表示って可能か?

C-uC-xC-b っぽいこと。

639:名無しさん@お腹いっぱい。
05/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:名無しさん@お腹いっぱい。
05/10/26 17:44:52
よろしくお願い致します.
急いでいます.

641:名無しさん@お腹いっぱい。
05/10/26 17:45:58
すみません.
自己解決しました.

642:639
05/10/26 19:05:10
解決はしていません.
よろしくお願い致します.

643:名無しさん@お腹いっぱい。
05/10/26 19:14:58
Emacs Lisp道場っつーネタかよそれ。しかもすげー自己中。そしてバカ。

小学生が大学生の電気工学の授業中に乗り込んでいって
これができる回路を作ってください。明日までに提出する自由工作なんです。よろしく。
ついては電子工作に詳しくないので回路や作り方も懇切丁寧に教えてください。
というみたいな行動を自分がしているというのは認識しているか? >>639

644:名無しさん@お腹いっぱい。
05/10/26 19:57:32
Emacs 22だとlist-buffersではWindowsのエクスプローラとかみたいに
見出しをクリックして並べ替えできるようになってるんだけど、
ibufferは旧態依然なので見劣りしてしまうね。


645:名無しさん@お腹いっぱい。
05/10/26 22:19:06
クリック

646:名無しさん@お腹いっぱい。
05/10/26 23:28:46
>>644
Emacsの上でまでマウスを使いたくない派の俺としては、旧態依然としていても
, や s a とかでソートのモードが変更できる ibuffer の方が100万倍使いやすいわけだが。

647:名無しさん@お腹いっぱい。
05/10/26 23:42:04
マウスでできる != マウスでしかできない

648:名無しさん@お腹いっぱい。
05/10/27 01:58:41
>>639 が「自分はヌルーされている」と気付くのはいったいいつかな?(ワクテカ(AA略

649:名無しさん@お腹いっぱい。
05/10/27 10:40:24
俺もマウスは嫌いだが、Diredの中のファイルは
マウスで他のアプリにドロップしたくなる。


650:名無しさん@お腹いっぱい。
05/10/27 12:17:30
そもそもマウス刺さってないし。

651:名無しさん@お腹いっぱい。
05/10/27 13:49:43
kill-ring-save は 'invisible 属性のテキストもコピーしてしまいますが、
'invisible 属性のない普通のテキストのみをコピーするようにするにはどうすれ
ば良いでしょうか?

652:名無しさん@お腹いっぱい。
05/10/28 01:25:52
>>649
Windows だったら CraftDrop と組み合わせればいけるよ。

653:名無しさん@お腹いっぱい。
05/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:名無しさん@お腹いっぱい。
05/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:名無しさん@お腹いっぱい。
05/10/28 10:25:41
>>652

だんな!

このご恩は一生わすれませんぜ!
マウス使わないでOKなとこもGoodですぜ!


656:名無しさん@お腹いっぱい。
05/10/28 13:03:48
どこが道場なんだ?

657:名無しさん@お腹いっぱい。
05/10/28 13:28:05
ここ。

658:名無しさん@お腹いっぱい。
05/10/28 14:03:40
六三郎

659:名無しさん@お腹いっぱい。
05/10/28 15:52:28
>>653-654 さん
お返事ありがとうございます。

多分その関数は 21.3 までなら動くでしょうが、22.* では動かないかと思います。
(22 では (get-char-property pos 'invisible) が invisible 属性のテキストに対してうまく機能しないので。)

まあでもなんとか自力でやりたいことを達成することができました。
お世話になりました

660:名無しさん@お腹いっぱい。
05/10/28 16:08:26
んじゃ22で動くようにしたものを貼ってよう。giveはするがtakeはしない?

661:名無しさん@お腹いっぱい。
05/10/28 16:09:02
まちがった、giveとtakeが逆だった……orz


662:659
05/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
05/10/29 00:06:03
1文字ずつ → 1文字ずつしか


664:名無しさん@お腹いっぱい。
05/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
05/10/29 14:06:12
>>664san
やっぱり自分の環境ではその関数も全く機能しません。

emacs-version
=> GNU Emacs 22.0.50.1 (i386-mingw-nt5.1.2600)
of 2005-07-11 on A208752

666:名無しさん@お腹いっぱい。
05/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
05/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:名無しさん@お腹いっぱい。
05/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
05/10/30 05:21:17
>>668
そうそれです。完璧に動作しました! しかも速度も高速ですね。
buffer-invisibility-spec が鍵を握るのはわかって
いたのですが、今コードを解釈する時間がない為、連絡だけさせていただきました。

670:名無しさん@お腹いっぱい。
05/10/30 06:24:23
>>659 で言っていたうまく機能しないと言うのは見えているものまで一緒に消えちゃっ
ていたと言う事でOK?


671:670
05/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:名無しさん@お腹いっぱい。
05/10/30 19:48:20
もしかすると text-property -> char-property で overlay が認識される
ことで解決したってことかも。
何にせよ、Emacs 22 だからというより設定のせいっぽいが。
(デフォルトでは buffer-invisibility-spec は 22 でも t だし
invisible な overlay も存在しない)

673:名無しさん@お腹いっぱい。
05/10/30 22:50:13
あるソフトウェア独自の簡単なスクリプト言語に対応するメジャーモードを作りたいのですが、
コメント部の色をかえるにはどうしたらいいのでしょうか?
コメントはC言語の /* が @cs に、*/ が @ce になったような感じです。複数行可。
comment-start と comment-endにそれぞれ値をセットするばいいだけというわけではないのでしょうか?
よろしくお願い致します。

674:名無しさん@お腹いっぱい。
05/10/31 11:27:48
Emacs Lisp神社


675:名無しさん@お腹いっぱい。
05/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
05/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:名無しさん@お腹いっぱい。
05/11/01 21:34:42
非同期にHTTPサーバとXMLなどのデータをやりとりする仕組みで、
ユーザイベントに動的に反応して、半リアルタイムに挙動を変える
ようなUIのelispって何かある?

678:名無しさん@お腹いっぱい。
05/11/01 21:46:00
ajax ですか?

679:名無しさん@お腹いっぱい。
05/11/01 23:08:31
emacs-w3m

680:677
05/11/02 13:49:44
>>678
Ajaxのelisp版を想定中。alax? aelax?

>>679
少なくとも現状のままでは、「非同期」ではなく動的ではないと思う。

681:名無しさん@お腹いっぱい。
05/11/02 14:24:42
slime

682:名無しさん@お腹いっぱい。
05/11/12 21:34:51
リストを連結する関数は何ですか。
RubyでいうとArray#joinです。

683:名無しさん@お腹いっぱい。
05/11/12 22:39:40
>>682
mapconcat


684:名無しさん@お腹いっぱい。
05/11/16 14:10:37
re-search-forward で「カーソルのある位置から」マッチさせることって出来ないの?

(looking-at REGEXP) 使ってみたけど、(match-string 0) 使ったら
(args-out-of-range 0 0) って言われた。


685:名無しさん@お腹いっぱい。
05/11/16 18:23:41
(with-temp-buffer
(insert "hoge")
(goto-char (point-min))
(and (looking-at "hoge") (match-string 0)))
=> "hoge"

686:名無しさん@お腹いっぱい。
05/11/17 00:03:45
普通にre-search-forwardするのと、事前にチェックした(point)を組み合わせる。

687:名無しさん@お腹いっぱい。
05/11/17 03:08:58
save-excursion と save-current-buffer の使い分けはどうすればいい?

688:名無しさん@お腹いっぱい。
05/11/17 04:04:48
pointやmarkをどうするか次第

689:名無しさん@お腹いっぱい。
05/11/18 11:51:29
faceを少しだけ明るく(もしくは暗く)する関数ってないですか?
(color-values "color-name")した値を加工して、そのままset-face-backgroundしようとしたら
stringpじゃねぇよボケ、と言われました。何か良い方法はないでしょうか。

690:689
05/11/18 11:51:57
質問age

691:名無しさん@お腹いっぱい。
05/11/18 12:18:02
28秒

692:名無しさん@お腹いっぱい。
05/11/18 12:34:04
なんで実際に書いたコードを隠すんだ?
stringp云々って根本的におかしなことやったとしか思えないんだけど

693:688
05/11/18 13:31:54
>>692
根本的におかしいことやってるのは分かってるので、何か良い方法を教えてほしい、
という質問なんですが。

(defun more-bright-color (color)
(mapcar '(lambda (n) (* n * 1.1)) (color-values color))
)

(make-face 'brightly-face)
(set-face-background 'brightly-face (more-bright-color "khaki"))

> Debugger entered--Lisp error: (wrong-type-argument stringp (65535 65021 39578))


694:名無しさん@お腹いっぱい。
05/11/18 13:42:01
>>693
色は、"#00aaff"みたいにすればいいんだよ。

695:名無しさん@お腹いっぱい。
05/11/18 13:46:07
>>693
brighter

696:名無しさん@お腹いっぱい。
05/11/18 14:11:42
これでいいかな。

(defun more-bright-color (color)
(apply #'format
(append '("#%02x%02x%02x")
(mapcar '(lambda (n)
(floor (min 255 (/ (* n 1.1) 256))))
(color-values color)))))


697:688
05/11/18 14:16:40
>>694
なるほど。

>>696
今手元で同じような関数が出来た。目的を達成することが出来ました。
ありがとう。


698:名無しさん@お腹いっぱい。
05/11/18 15:45:49
>>696
brighter だっつってんだろが。
"more bright" なんて英語通じないっつーの


699:名無しさん@お腹いっぱい。
05/11/18 16:01:04
不自然だと感じるけど通じるよ

700:名無しさん@お腹いっぱい。
05/11/18 16:05:38
>>698
"brighter" とだけレスされても日本語通じないっつーの。
「brighter だと英語としておかしい」とキチンと書けばいいのに。

701:名無しさん@お腹いっぱい。
05/11/18 16:31:47
>700
よっぽど悔しかったんだね

702:名無しさん@お腹いっぱい。
05/11/18 16:41:35
>>701
おまいも大人げないよ
スレが荒れるからヤメれ

703:696
05/11/18 16:45:33
>>696
appendいらなかったな。

>>701
>>700は俺じゃないぞ。

704:名無しさん@お腹いっぱい。
05/11/21 09:49:47
Perlのjoinにあたる関数ってないですか。今はこうしてます。

(defun join-string (s seq)
(reduce '(lambda (x y) (concat x s y)) seq))


705:名無しさん@お腹いっぱい。
05/11/21 09:59:01
mapconcatか。reduceなんてシラネ。

706:名無しさん@お腹いっぱい。
05/11/22 19:24:37
例えば

emacs yarou
hello emacs kun to lisp yarou

のようなラインがバッファ内にあったと仮定して、 M-x foo を実行すると
Line containing:
というプロンプトがミニバッファにでて、
emac li <RET>
と打ちこむと、 "emac" と "li" のサブストリングを含むライン (この場合は 2行目)
を occur などでマッチする関数 foo がほしいのですが。。。作って。。。


707:名無しさん@お腹いっぱい。
05/11/22 21:27:04
正規表現でいいじゃん

708:名無しさん@お腹いっぱい。
05/11/22 21:38:21
正規表現でいいだろう

709:名無しさん@お腹いっぱい。
05/11/22 22:35:38
正規表現でいいような気がする

710:名無しさん@お腹いっぱい。
05/11/22 22:42:25
正規表現でいいと思われ。

711:名無しさん@お腹いっぱい。
05/11/22 22:48:41
正規表現じゃ大変だ

712:名無しさん@お腹いっぱい。
05/11/22 23:15:19
正規表現ってのはどうだ


713:名無しさん@お腹いっぱい。
05/11/22 23:19:25
もういいから。

714:名無しさん@お腹いっぱい。
05/11/23 00:11:44
もういいよ。

715:名無しさん@お腹いっぱい。
05/11/23 02:36:12
もういいな。


716:名無しさん@お腹いっぱい。
05/11/28 00:18:36
(defun foo(str)
"HG"
(interactive "sLine containing:")
(if (not (string= str "emacs li"))
(message "not found!")
(if (not (re-search-forward "emac.*li" nil t))
(message "not found!!")
(message "found!")
)))

717:名無しさん@お腹いっぱい。
05/12/13 13:47:33
ライブラリのリビジョンに応じて設定を変えたい場合なんかに便利かなと

(setq get-revision-number-line-limit 20)

;; 1.1.1.1 には対応してない
(defun get-revision-number (library)
(let* ((file (locate-library (concat library ".el")))
(buf-exists-p (get-file-buffer file))
(buf buf-exists-p)
rev)
(unless buf-exists-p
(setq buf (find-file-noselect file)))
(save-match-data
(with-current-buffer buf
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(let (search-limit)
(forward-line get-revision-number-line-limit)
(setq search-limit (point))
(goto-char (point-min))
(when (re-search-forward (concat "$Id: "
(regexp-quote (concat library ".el"))
",v " "\\([0-9]+\\.[0-9]+\\)" " ")
search-limit t)
(setq rev (string-to-number (match-string 1)))))))))
(unless buf-exists-p
(kill-buffer buf))
rev))

718:名無しさん@お腹いっぱい。
05/12/14 00:43:34
emacs-version
"22.0.50.1"

Diredのバッファ名のように、
mode-lineのcvsのリビジョンの部分だけ色を変えたいのですが、

(setq-default mode-line-format
       `(" "
        ;;mw32-ime-mode-line-state-indicator
        mode-line-mule-info mode-line-modified " "
        mode-line-buffer-identification
        (vc-mode ,(propertize vc-mode 'face '(:foreground "blue" :background "red")))
        " " global-mode-string (-3 . "%p") " " "-%-"))

これを.emacsで評価すると、mode-lineでは.emacsのリビジョンが赤くなりますが、
別のバッファにうつっても.emacsのリビジョンが赤くなってしまいます。

着色しないときのようにファイル毎にそれぞれのリビジョンを表示するには、
どうしたら良いでしょうか?


719:名無しさん@お腹いっぱい。
05/12/14 05:34:22
(setq-default mode-line-format
'(" "
;;mw32-ime-mode-line-state-indicator
mode-line-mule-info mode-line-modified " "
mode-line-buffer-identification
(vc-mode (:eval (propertize vc-mode 'face '(:foreground "blue" :background "red"))))
" " global-mode-string (-3 . "%p") " " "-%-"))

720:名無しさん@お腹いっぱい。
05/12/15 00:31:01
>>719
できました。便利な属性(?)があるんですね。


721:名無しさん@お腹いっぱい。
05/12/15 01:28:18
どんなタイミングでevalされるの?

722:名無しさん@お腹いっぱい。
05/12/20 08:53:44
Vim の dircolors.vim みたいな ~/.dir_colors 編集用メジャーモードを作ったので晒してみます。
begin-base64 644 dircolors-mode.el.gz
H4sICJBGp0MAA2RpcmNvbG9ycy1tb2RlLmVsAK1Y0W7bNhR9z1cQ6oPlDfLk
8DoG4qBBazuNUccqHD/sQUChWHSmWZYySU4aYOi/DFCH/cMG7HFFCwzYZwx7
2/YBIyXbSUhfUwbmIBAl3nPu5Tk0KbPT6RA/SKZxGCeptYh91mAhsciF922c
EHFPZrzB/CALomvy/qsGj35bhh8cmD6bTZdpFi8kEuubOJ6TKAgPCDE2XSWf
6GoYvOM4u79hpCbuxd11Ei9vSM33Mq9eUs+8KZOJ74LQn3qJb4lODquZZkbM
Y14kEwSRT4xnZ/xj20a9Xhcl1AuuWy/ZScUT7+jdUZBtPy3lSdatgKZU+1Uc
+iTT40DC8cGyJAwiVgXc2rfKtpQtiG5ZkjLrNvBZXCEjtXdZBLb4M/QssliS
0bYtG72V5XAXi22r02UrC9130m1lkW2UahHVVGBp6XSpxHKk06USizxVFF2q
sIA8X6686fyJLlXUBeXL9Zil6nwBeb5ItVRzGmSnpVr+D5aq8wXk+aLoUolF
ni+KLpVY5Pmi6CKzbFm8V8uusmyvnuO4JoJranCA4ECDayG4lgbXRnDt3TiK
6EI1ulBEF6rRZbW0qrhDDY4iOKrBIT5QjQ8U8YFqfFgtkSruSIND/KMa/wDx
DzT+AeIfaPwDxD/Q+AeIf6DxDxD/QOMfIP6Bxj9A/AONf4D4B2v/MGB6H2Xe
O8sLgzQrlzjj7XuDNIhxZ9SJefpMNE+KphuJ9nO+1m15TX7M0zDwfLM4yqww
ns6tObu/ixM/XWV13RPXNSf98YXrft91hs6YX/uDV+eTl4MJbzpvJgNndOm6
ddd9LgpUmFYjJfyzphs544sXQ44+Gwz7/NIbCNbhYPRaMI7fnL8Y8cbF4PJy
MHpVhJ05/HLpdEVAzymKeDkUN93zoqCv+939Shj2zyZdpyeyj8VoVu3+qFe2
qnJ94bqNU9e9+3IVv/v9f41q7I04se3t8Zut6iGyiUQ2lUhAIkGJbCGRLSWy
jUS25UiKjIgqI6LIiKgyInqIRB4qkRSJpEokohJVVKKISlRRiR4hkUdKJKIn
VfQERE9Q9ARET1D0BERPUPQERE9Q9ARET1D0BERPUPQERE9Q9AREz/WSvG0V
VVfHXWvpwrtBDi04mndusMtIgvJf1AJV5dhEHH2YQZSxxJtmwa3YSviDeRCG
fLEPRbFeaPHiAu8qZKmgNZf8d3f5XFSoFl1SLLw5k+Ck9iAAL9tbhlnJmLLs
O6L2FWKLT6dDJk7POSb5p/yf/LcnuxHJP3/649d/879//pj/mH/88NOHP3/4
Jf/MI//Kfz99RFEztXuVkLv437GLkit2HUQRF9KKZ5Y48KjXN1n2yVFpK96a
bSNZkSLyFowYvXVe40HRhfC/nBDSi0MRkyyj4mQsJbWMvcsejspECvMmicXh
ior8Dy4122KlEwAA
====

723:722
05/12/20 09:04:41
それで、いくつか作ってて疑問な点があったので聞いてみたいのですが

* 123行目で SYNTAX-ALIST 引数に dircolors-mode-syntax-alist を使うと
 (直前でコメントアウトしてあるコードのことです)
 font-lock が発動した際に型が違うと言われてしまうのですが、これは何故なんでしょうか?

* defface で face を定義した後、同名の変数を defvar する操作は必須ですか?
 自分の環境では省略しても問題ないように見えるんですが、ネットで見掛けるコードでは
 何故かわざわざ defface, defvar を並べて書いてるのでちょっと不安です。
 必要なのであれば、その理由も教えて頂けるとうれしいです。
 というかもしかして face と普通の変数ってスコープが違ったりしますか?

724:722
05/12/20 09:08:14
すみません、>>723で嘘書いてしまいました。
defface の後の defvar を省略すると face が有効にならないみたいです。
これって何故なんでしょうか?

725:名無しさん@お腹いっぱい。
05/12/21 00:51:58
deffaceはfaceの定義、defvarは変数の定義

たとえば dired.elの
(defface dired-header '((t (:inherit font-lock-type-face))))
(defvar dired-header-face 'dired-header)

dired-headerという名前で定義したfaceを用意しておいて、
dired-header-faceに代入しておく。
実際にfaceを決定するところではdired-header-faceを使用する。

elispコード内でdired-headerを直接指定していたら、
もしもあとでdired-header-faceを変えたくなったときに、
dired-headerを上書きするかコードを書き変えないといけないけど、
変数を経由するようにしておけば、別のfaceを定義してその変数に代入してあげればいい。


そういう意味で、paren.elなんかはfaceを直接overlayしているので、
faceの色や字体を変えたいときは、set-face-x系を使って
faceの設定を上書きしてあげないといけないね。


726:名無しさん@お腹いっぱい。
05/12/21 07:12:14
> そういう意味で、paren.elなんかはfaceを直接overlayしているので、
> faceの色や字体を変えたいときは、set-face-x系を使って
> faceの設定を上書きしてあげないといけないね。

それで何か不都合あんの?

727:名無しさん@お腹いっぱい。
05/12/22 00:55:23
ほとんどの人は上書きしてしまって不都合ないと思いますよ。
起動後にfaceを変えるってあまりないですよね。

でもまぁ、setqでちょこちょこ変えたい人には箱があったほうがいいですし、
それくらいのレベルだと思います。


728:名無しさん@お腹いっぱい。
06/01/10 20:35:07
はじめまして。Emacs LISPの勉強をしている高校生です(はじめたばかりです。すみません)。
カレントバッファに対して文字列の検索や置換をする関数は見つけられたのですが、
文字列そのものを引数にとるような同様の関数はありますでしょうか。
具体的には、ある入力文字列から、決められた文字を取り除きたいのです。

729:名無しさん@お腹いっぱい。
06/01/10 21:12:04
M-x apropos
その程度で質問してるようじゃ先が思いやられるよ

730:名無しさん@お腹いっぱい。
06/01/10 21:40:19
なんでそんなに見下した態度取るんだ?
高校生か、がんばれよーでいいじゃん。

731:名無しさん@お腹いっぱい。
06/01/10 21:43:34
replace-regexp-in-string とかでええのか?
または string-match して substring してみたり適当に

732:名無しさん@お腹いっぱい。
06/01/10 23:25:20
read-string が知りたかったりして。

733:名無しさん@お腹いっぱい。
06/01/11 00:57:18
オレも最初 read-from-minibuffer かと思った


734:名無しさん@お腹いっぱい。
06/01/11 02:34:19
>731
replace-regexp-in-string、これです!ありがとうございました。
>729
今後はしばらく"M-x apropos"で調べていけそうです。Emacs LISPのこういうインタラクティブな感じがとっても好きです。
しょーもない質問をしてすみませんでした。そしてありがとうございました。
その他の方々もありがとうございました!



735:名無しさん@お腹いっぱい。
06/01/12 18:54:34
time-stamp.elを使ってるとundoの時に不満ない?
timestamp部分はundoできなくなるけど、こんな事してみた。
(defadvice time-stamp-once (around cannot-be-undone activate)
(let ((buffer-undo-list t))
ad-do-it))

後から気付いたんだけど、redo.elを入れてたのをすっかり忘れてた。
ちゃんと使っていればそのような不満はあまり感じなかったかもしれない。

736:名無しさん@お腹いっぱい。
06/01/12 20:01:00
>>735
Meadow meme だかに似たようなのがあったね。

737:名無しさん@お腹いっぱい。
06/01/12 20:14:23
URLリンク(homepage3.nifty.com)
これかな?

738:名無しさん@お腹いっぱい。
06/01/12 21:14:55
>>734
まあマジレスすると mode-info 入れとけ。
URLリンク(www.namazu.org)

739:名無しさん@お腹いっぱい。
06/01/13 03:30:34
行の中で最初の「空白/タブではない文字」にカーソルを移動したいんですが、どうすればいいですか?

740:名無しさん@お腹いっぱい。
06/01/13 08:22:49
>>739
see back-to-indentation

741:名無しさん@お腹いっぱい。
06/01/13 09:31:16
>>740
ありがとう。助かりました。

742:名無しさん@お腹いっぱい。
06/01/15 03:13:49
>>738
734じゃないけど、mode-info は最新の CVS の Emacs だとコンパイルできない
ようです。過去にこのスレでパッチが出ていたんだけど、もう古くなっていま
した。。。最新のパッチがあれば投下して頂けないでしょうか?


743:名無しさん@お腹いっぱい。
06/01/16 13:00:13
url.el の使い方が分からない…。

(let ((url (url-generic-parse-url "URLリンク(www.example.org)")))
    (url-retrieve url (lambda ()
                        (url-store-in-cache (current-buffer)))))


744:名無しさん@お腹いっぱい。
06/01/16 13:00:47
途中送信してしまった…。

これでキャッシュの保存をしてくれるかと思ったけどしてくれなかった。
どうすればいいんだ???

745:名無しさん@お腹いっぱい。
06/02/04 21:09:59
URLリンク(d.hatena.ne.jp)

こういうのを見ると、emacs lispも技術の途切れて
壊滅的状態にあると思わざるを得ない。


746:名無しさん@お腹いっぱい。
06/02/04 22:05:10
>>745
おまえの日本語も技術の途切れて壊滅状態だな。

747:名無しさん@お腹いっぱい。
06/02/04 22:17:34
>>745
その題目って、何度も再発明されてるな。


748:名無しさん@お腹いっぱい。
06/02/04 22:36:05
単に再発明した人がいるというだけなのにその帰結かよ。

749:名無しさん@お腹いっぱい。
06/02/04 22:47:05
っていうか、バグバグじゃん。ちゃんとテストしてないな。


750:名無しさん@お腹いっぱい。
06/02/04 23:08:53
まぁblogはある意味ここよりもゴミが多かったりするし。

751:名無しさん@お腹いっぱい。
06/02/04 23:32:41
しかしまあはてなでEmacsはやりだしたってので
それじゃ俺も使ってみるかってな人間が増えるのはいいことだ。
うざい質問も増えるかもしれないけど
そのうち育ってステキなパッケージ作ってくれるやもしれんし。

752:名無しさん@お腹いっぱい。
06/02/04 23:43:21
バグを見つけたなら、指摘コメントしてやるといいよ。


753:名無しさん@お腹いっぱい。
06/02/06 22:59:07
>6のtexinfoが
{}のエスケープが無くてmakeinfoできないんだけど、
俺だけ?パッチ作ったんだけど、作者に送った方が良い?


754:名無しさん@お腹いっぱい。
06/02/07 08:26:36
>>745
これを見ていろいろ調べていて、
「[ANNOUNCE] Emacs modules for Perl programming」
URLリンク(www.uni-giessen.de)
というドキュメントを見つけて(おのれ、今までこれの存在を知らなかった)

「Emacs Tiny Tools Project hoimepage」
URLリンク(tiny-tools.sourceforge.net)
というものの存在を知ってガクゼンとしました。

通常、いろいろな人が作っているのをかき集めて組み合わせて実現して
いる機能をそっくり提供する、別系統のツールのセットですよね。
このTiny Toolsを使っている人っています?


755:名無しさん@お腹いっぱい。
06/02/07 16:15:09
使ってはいないけど、たまに参考にしたり。
コード、ドキュメント共に。

756:名無しさん@お腹いっぱい。
06/02/09 12:31:30
(standard-display-ascii ?@ [?#])
を評価すると,(当然ですが) モード関係なしで全ての @ が # で表示されてしまいます.
ここで,上の動作をある特定のモードのみでやるにはどうすればよいのでしょうか?


757:名無しさん@お腹いっぱい。
06/02/09 17:43:03
(make-local-variable 'display-table)

758:名無しさん@お腹いっぱい。
06/02/10 00:07:01
>>757 (make-local-variable 'buffer-display-table) だろが

759:名無しさん@お腹いっぱい。
06/03/02 18:50:16
mcomplete を使っている諸君!
例えば、例えばだ…

M-x describe-function を実行し、
mcomplete の [Substring match] に向かって
process-coding-system
と入力するとエラーが出るよな?
ELisp 勉強中の俺が、
恥を覚悟でパッチを作ってみたんだ。
あってるかな?

--- mcomplete.el
+++ mcomplete.el
@@ -1281,8 +1281,10 @@
(tails-alist (mapcar #'(lambda (item)
(string-match regexp item)
(list (substring item (match-end 0))))
- completions)))
- (concat str (try-completion "" tails-alist)))))))
+ completions))
+ (comp (try-completion "" tails-alist))
+ (tailstr (if (eq comp t) "" comp)))
+ (concat str tailstr))))))


760:名無しさん@お腹いっぱい。
06/03/02 21:02:30
うー、そのパッチはとてもただしいのだが、
ここにはってしまったためにさいようできません。。。

761:名無しさん@お腹いっぱい。
06/03/02 21:47:55
(ノ∀`)アチャ-

762:名無しさん@お腹いっぱい。
06/03/02 22:49:07
マルチライセンスで別のところにも貼ればいいんでは。

763:759
06/03/02 23:14:08
GPL に違反してしまうのか?
パッチという形式をとっているからいけないのか?
無知は罪だ。勉強してから出直します。ごめん。


764:名無しさん@お腹いっぱい。
06/03/03 02:53:55
navi2ch スレでもそういう認識になってるけど、
例えば匿名で運営してる自分のウェブページに掲載したらどうなるの?
初出の出所が不明だから不許可になる?
そもそも著作権侵害は親告罪だし、
メーリングリストでのパッチだって完全な出所証明は非常に難しいし、
出所が証明できたからってどっかからぱくってないことは証明できないし、
採用者の了見しだいでなんとでもなりそうな気がするよ。

765:名無しさん@お腹いっぱい。
06/03/03 04:18:16
>>764
出所不明とかそういう問題じゃないよ。

2ch だと、投稿時にいくつかの項目に対して同意を求められるでしょ。
この中に、運営が指定する第三者に対して、一切の権利を許諾しないって項目がある。
これは GPL に矛盾するから、これに同意して 2ch に投稿されたものは、 GPL ソフトウェアにマージできないの。

自分のウェブページとかの場合なら、 GPL に矛盾する規定をしてなければ問題ない。
だから navi2ch スレとかだと、そういう規定がない Wiki とかを利用してる。

766:名無しさん@お腹いっぱい。
06/03/03 04:35:24
便乗質問させてください。
すれ違いかと思いつつ、前から聞いてみたかったので書きます。

gzip & base64 とかでencodeして張った場合、どうなるんでしょう。

767:名無しさん@お腹いっぱい。
06/03/03 07:18:24
GPL と 2ch の規約は矛盾するだろうけど、
じゃあ、そもそもが GPL のコードを 2ch に張るとどうなるのかと考えると、
それは GPL 違反ではあるが、
張ったがために 2ch がコードの利用の権限を持つようになるわけじゃないよね。

ということは、本人が GPL として作ったコードを 2ch に張った場合、
張った行為は GPL あるいは 2ch 利用規約違反だけど、
張っただけで 2ch のものになって GPL として使えなくなるわけではないんでは?

768:名無しさん@お腹いっぱい。
06/03/03 09:22:24
2ch にあるパッチを当てた物を GPL として配布してもかまわないと思う人は
自分で配布すればいいじゃないか。
片手間で開発してるような場合、GPL 違反だと言ってる連中がいるってだけで
面倒そうだから取り込むのはやめようって気になるんじゃないかな。

769:名無しさん@お腹いっぱい。
06/03/03 09:46:09
>>766
貼る形式の問題ではない。

770:名無しさん@お腹いっぱい。
06/03/03 10:39:04
思うんなら自分でやればっていわれても、話にならないな。
まあスレ違いだしやめよう。

771:名無しさん@お腹いっぱい。
06/03/03 12:04:01
誰かが別の場所でGPLで公開してるパッチを第三者が勝手に
2chに貼った場合とか

772:名無しさん@お腹いっぱい。
06/03/03 12:08:04
>>771
それのどこが問題?

773:名無しさん@お腹いっぱい。
06/03/03 12:18:33
そのパッチを本人がプロジェクトに寄付する気になったとき
とりこめるかどうか

774:名無しさん@お腹いっぱい。
06/03/03 12:46:56
第三者が何かしたからといって、パッチ作製者の権利が失われるわけないじゃん。
そうでないなら、ML とかに流れてるパッチを 2ch に転載しまくるだけで
そのプロジェクトの開発を妨害できちゃうよ。

775:名無しさん@お腹いっぱい。
06/03/03 13:08:30
匿名サイトに置いてあるパッチを2chに貼った場合、
本人によるものか別の人によるものかも分かんねーしな

776:名無しさん@お腹いっぱい。
06/03/03 13:48:32
強いて言えばパッチの作者に
「ヘンなシバリのある掲示板に勝手に貼るなよ」
って文句言われる可能性はあるな。

777:名無しさん@お腹いっぱい。
06/03/03 14:20:49
文句言われる言われないはどっちでもいい。
問題はそのパッチをマージする事が可能かどうかだ。

778:名無しさん@お腹いっぱい。
06/03/03 14:23:41
マージするかどうかは
開発元とパッチ作者との間の問題。
2ch に貼るのは
2ch 管理人と投稿者とパッチ作者の間の問題。
両者に関係はない。

779:名無しさん@お腹いっぱい。
06/03/04 00:28:59
続きはこちらで

ライセンスあれこれ
スレリンク(unix板)

780:名無しさん@お腹いっぱい。
06/03/09 19:58:10
ある変数に EUC-JP や Shift_JIS などの文字コードの文字列が入っている状態で、
その文字コードを UTF-8 に変換したい場合は、どうしたら良いのでしょうか?

781:名無しさん@お腹いっぱい。
06/03/09 20:08:35
ccl

782:名無しさん@お腹いっぱい。
06/03/10 22:12:33
>>781
ありがとう。
でも、全然使い方が分からないわ orz

783:名無しさん@お腹いっぱい。
06/03/21 09:49:25
こんなの見つけたお
URLリンク(www.okisoft.co.jp)

知識ゼロからのとっかかりにはいいんではないかと思う

784:名無しさん@お腹いっぱい。
06/03/21 13:12:22
ほかにも「やさしい Lisp の作り方」とかあるね
URLリンク(www.okisoft.co.jp)
あと、これは一部で有名だけど「美人プログラミングスタイル」とか

785:名無しさん@お腹いっぱい。
06/03/28 10:55:02

以下の機能をmajar-modeに実装する方法でつまづいています。

「一行につき全角文字20文字まで、それを越えたら自動的に折り返して次の行へ」

行幅を全角20文字で整形したいだけなのですが・・・

truncate**系 とか fill-** 系とかの変数をうまく使えばいいのだろうかと試行錯誤しているのですが、錯誤ばかりで自滅気味です。わたしアタマワルイ。

だれか助けてー。

786:名無しさん@お腹いっぱい。
06/03/28 13:19:47
>>785
先に決め事が必要になる。

(1) 半角文字の扱い
(2) 空白文字の処理
(3) 禁則処理(行頭、行末)

まともにやると、かなりめんどい。

787:名無しさん@お腹いっぱい。
06/03/28 13:39:20
>>785
単に
(set-fill-column 40)
(auto-fill-mode t)
って話?

>>786 みたいな問題もあるし
仕様を見直した方がいい気がする。

788:ゼウス
06/04/03 13:19:19

おい、お前等



789:名無しさん@お腹いっぱい。
06/04/12 01:27:25
CやC++ファイルの編集での普通(gnuのモード)のインデントで、
字下げが少ない時はスペースでインデントしてくれるんですが、
tab幅以上の字下げの時にtabでインデントしてしまい困ってます。

これをスペースでインデントするようにするにはどうしたら良いでしょうか。

790:名無しさん@お腹いっぱい。
06/04/12 02:11:47
(set-variable 'indent-tabs-mode nil)
(setq-default indent-tabs-mode nil)

…10年以上使ってるけどこれでいいかな


791:名無しさん@お腹いっぱい。
06/04/12 08:06:40
eshell 上で mysql の返答 (standard output) がしっかり
表示されるようにするにはどうソースを修正したらいいか教えろ
お前等ならわかるだろ


792:名無しさん@お腹いっぱい。
06/04/14 04:06:36
やっぱわかんねーのか。。。
eshell のソースはかなり複雑だから仕方ねーのかもな

793:名無しさん@お腹いっぱい。
06/04/14 08:33:53
わかるだろうけどおまえのためにわざわざ調べる気にはならんってだけ。

794:名無しさん@お腹いっぱい。
06/04/14 08:48:40
>>793
お前自分の言ってる事矛盾してる
知ってんだったら調べる必要ないだろが

795:名無しさん@お腹いっぱい。
06/04/14 09:05:09
調べればわかるんだろ

796:名無しさん@お腹いっぱい。
06/05/11 11:34:11
各種*.confみたいな
項目: 要素
的設定ファイルを読み込んでalistに溜め込んで行くようなのを考えてるんですが
なかなかすっきりしません。
一項目一要素でとりあえずいいんですが、
やっぱりなにかしらのバッファで開いてbuffer-substringしていくしかないんでしょうか。


797:名無しさん@お腹いっぱい。
06/05/11 23:30:31
しかないっつーかEmacsのファイル入力はバッファで開くのが普通なんだが。


798:名無しさん@お腹いっぱい。
06/05/11 23:33:22
バッファで開かないでファイルをlispでストリームとして扱う方法ってあるの?
数百メガの巨大ファイルをいじるとき便利っぽいけど。

799:名無しさん@お腹いっぱい。
06/05/12 04:55:14
tmpなバッファにinsert-file-contents。
find-file-noselectするよりは処理が軽いそうな


800:名無しさん@お腹いっぱい。
06/05/12 05:10:22
>>798
Common Lisp な xyzzy ならできるが、Emacs は不可能。

801:名無しさん@お腹いっぱい。
06/05/12 08:14:54
xyzzy は Common Lisp じゃない。cl ですら実装されてるのに
(mapcar (lambda (x) (typecase x
(integer "整数")
(string "文字列")
(t "その他")))
'(10 3.3 "ほげ"))
こんなのが動かないし。

802:名無しさん@お腹いっぱい。
06/05/13 20:51:42
>>801
それだけ?他にもあるでしょ。おせーて。

803:名無しさん@お腹いっぱい。
06/05/14 11:40:22
-batch
で別個に動かすのはどうでしょう?

804:名無しさん@お腹いっぱい。
06/05/14 14:05:01
>>798
insert-file-contents系で分けて読むとか、catあたりをstart-processしてfilterで読むとか。

テキストの場合マルチバイト文字の切れ目の処理が必要になるとちょっといやらしいかも

805:名無しさん@お腹いっぱい。
06/06/24 12:07:52
>>801
適当だけど。

(defmacro?typecase?(check?&rest?type-list)
??(let?((#1=#:case))
???????(dolist?(item?(reverse?type-list)?#1#)
?????????(push?(if?(eq?(car?item)?t)
???????????????????`(t?,(cadr?item))
?????????????????`((subtypep?(type-of?,check)
?????????????????????????????',(car?item))
?????????????????????????????,(cadr?item)))
???????????????#1#))
????(cons?'cond?#1#)))

806:805
06/06/24 12:12:09
あらら。。もう一回。

(defmacro typecase (check &rest type-list)
(let ((#1=#:case))
(dolist (item (reverse type-list) #1#)
(push (if (eq (car item) t)
`(t ,(cadr item))
`((subtypep (type-of ,check)
',(car item))
,(cadr item)))
#1#))
(cons 'cond #1#)))


807:名無しさん@お腹いっぱい。
06/08/30 05:12:50
未編集のリードオンリーのバッファ上で、何かあるタイミングで、
recenter すると変更フラグが立つことがある。
という現象に遭遇した人いないですか、とか聞いてみようと思った。
が、recenter の前に、(sit-for 0) を入れたら解決したみたい。

808:名無しさん@お腹いっぱい。
06/10/15 22:07:25
Emacs21とか22とかになると、デフォルトでいろんな機能が
組込まれてしまったので (occurとかgrepとか、検索もパワーアップしたり)、
新しい機能を作る機会が減って、最近このスレッドが寂しいのかなぁ、
などと思ったりした。

まとめサイトや紹介サイトも増えたしね。
ネタが出てくることを願って期待sage。


809:名無しさん@お腹いっぱい。
06/10/21 21:51:36
ちまちまと一年以上かけて作ってきたが、とうとうやる気が無くなったので晒すテスト。
使い方はソース読んでくれ。

URLリンク(grinocat.googlepages.com)

810:名無しさん@お腹いっぱい。
06/10/21 23:01:47
ネ(・∀・)申!


811:名無しさん@お腹いっぱい。
06/10/22 04:18:27
>>809
すげぇ。すげぇよ、あんた。

812:名無しさん@お腹いっぱい。
06/10/27 01:00:59
w3みたいなもの?
動かせない(´;ω;`)

813:<sage>
06/11/06 19:07:50
この板の趣旨とは、ちょっと内容がずれてますが、教えて下さい。

shell-command-to-string 関数を使って、perl を呼び出そうとしていますが、
日本語引数を渡すとどこの段階でか分かりませんが、文字がばけます。

(shell-command-to-string "c:/Perl/bin/perl.exe e:/work/0my/scripts/test.pl てすと表示")

で、「test.pl」 では、

my $outfile = "e:/work/0my/scripts/test.txt";
my $out;

open ($out, "> $outfile") || die ("couldn't open $outfile to write into.");
print ($out $ARGV [0]);
close($out);

で、"test.txt" を shift_jis とかで開いても化けています。

DOS 上で日本語引数は、問題なく処理されるので、Elisp から、
perl に渡されるときに壊れると解釈していますが、どうすればいいのでしょう?


814:名無しさん@お腹いっぱい。
06/11/06 21:51:47
>>813
> perl に渡されるときに壊れると解釈していますが、どうすればいいのでしょう?
表の後に\を付ける、とか?

815:sage
06/11/07 00:20:27
>>814
レスサンクス。

表のあとに\マークってことは、「てすと表\示」って感じにですか? 
日本語文字は何を入れてもだめなので、それでもだめだと思います。

気になるのは、エンコーディングがどうやって認識されるかです。
elisp -> shell -> perl と引数として指定された文字列が渡されると思いますが、
このプログラム間のエンコードは、どうやって指定するのかが、よく分かりません。

おそらく日本語 OS 下では、デフォルトが shift_jis になると思いますが、
これは、elisp からシェルの間も同じかな?

816:名無しさん@お腹いっぱい。
06/11/07 00:31:14
process-coding-system とか coding-system-for-write とか?

817:名無しさん@お腹いっぱい。
06/11/07 00:45:40
>>816 さんありがとう
(setq coding-system-for-write 'sjis)
でうまくいきました。m(_ _)m

818:名無しさん@お腹いっぱい。
06/11/07 00:48:11
>>817
letで束縛
URLリンク(www.fan.gr.jp)

819:名無しさん@お腹いっぱい。
06/11/07 01:04:52
>>818
この変数に対して値をグローバルに設定すべきではないということですね。
了解、let を使います。

820:名無しさん@お腹いっぱい。
06/12/13 14:58:06
emacs上でschemeの勉強しているんですが、
emacsのコメント行のインデントのしかたが気に入らないので
直したいと思っているのですが、
どこから始めたらいいのか、
さっぱり分かりません。

とりあえず
scheme-modeが定義されている場所の調べ方を教えていただけませんか?


821:名無しさん@お腹いっぱい。
06/12/13 15:38:18
>>820
> scheme-modeが定義されている場所の調べ方を教えていただけませんか?
find-function

> emacsのコメント行のインデントのしかたが気に入らないので
確かに comment-dwin は腐ってるからな

822:名無しさん@お腹いっぱい。
06/12/14 22:57:50
>>820
つ Gauche

823:名無しさん@お腹いっぱい。
07/01/14 02:16:27
初歩的な質問で聞き難いのですが教えて下さい。
バッファ中の文章の特定の文字を置き換えるようなコードを
作りたいのですが、condを使うのかifとprognを使うのかよく分かりません。
たとえば、文章中の”Red Hat”なら”赤帽”、”Vine”なら”葡萄”、”Windows”なら
”窓”というようにバッファ中の文章を変えたいです。

824:名無しさん@お腹いっぱい。
07/01/14 02:19:30
>>823
replace-stringじゃだめなん?

825:名無しさん@お腹いっぱい。
07/01/14 02:26:41
複数の文字列を一括して置換とかかな

826:名無しさん@お腹いっぱい。
07/01/14 02:33:07
>>824
検索関数(search-forward)などでマッチした文字列を
replace-matchなどで変えようと思ったのですが、条件分岐が
よくわからなくて・・・

>>825
たぶん、そんな感じです。

827:名無しさん@お腹いっぱい。
07/01/14 02:36:59
まずは仕様をきっちり決めれ。
「たぶん、そんな感じ」じゃなんだかわからん。

828:名無しさん@お腹いっぱい。
07/01/14 02:42:02
基本事項なんだぜ?
(info "(elisp)Conditionals")
(info "(elisp)Combining Conditions")


829:名無しさん@お腹いっぱい。
07/01/14 02:49:31
ありがとうございます。もう少し読んでみます。

830:823
07/01/14 03:25:03
レス下さった方々、どうもありがとうございました。
非常に無駄な処理をしていますが、望む結果が得られました。

(defun change-font ()
(interactive)
(let ((p (point)))
(goto-char (point-min))
(while (not (eobp))
(if (search-forward "Led Hat" nil t) (replace-match "赤帽")
(forward-line 1)))
(goto-char (point-min))
(while (not (eobp))
(if (search-forward "Vine" nil t) (replace-match "葡萄")
(forward-line 1)))
(goto-char (point-min))
(while (not (eobp))
(if (search-forward "Windows" nil t) (replace-match "窓")
(forward-line 1)))
(goto-char p)))

過去ログ読んで勉強してきます。


831:名無しさん@お腹いっぱい。
07/01/14 05:53:52
一行に2回出てきたらだめじゃね?

832:名無しさん@お腹いっぱい。
07/01/14 11:47:06
検索語を \\| で分けて match-string で抜き出し cond で振り分けろ

833:823
07/01/14 13:38:34
>>831
いえ、ちゃんと置き換えてくれました。

>>832
ご教授ありがとうございます。しばらくにらめっこします。

834:名無しさん@お腹いっぱい。
07/01/14 14:59:07
教授じゃなくて教示


835:名無しさん@お腹いっぱい。
07/01/15 00:23:16
> >>833
> > 一行に2回出てきたらだめじゃね?
>>831
> いえ、ちゃんと置き換えてくれました。

ホントに?
試していないけど VineVine とかいう行があったらダメっぽく見える。



836:名無しさん@お腹いっぱい。
07/01/15 01:09:45
`XWindows' も `X窓' になりそうだし、`divine' も `di葡萄' になりそう。
(後者は `case-fold-search' の値によるけど)

837:823
07/01/15 19:50:39
>>835
>>836
ご指摘ありがとうございます。例外処理(?)を考えていませんでした。
まだ>>832さんの方法で出来ていないしどんだけバカなんだろ私・・・

838:名無しさん@お腹いっぱい。
07/01/16 06:46:15
自分で頑張れてるのだから、頭が悪いとは思わないけどな。
やりつけないことは何でも最初は大変だ。
>>832, >>836とも正規表現が必要だし。

まず>>830の改善点としては(forward-line 1)、これは置換が終わったら次へ進む
ってことで入れたのだろうけど、次の行じゃなくて置換したテキストの直後に
移動すれば十分な筈。ところがreplace-match自身が

Leave point at the end of the replacement text.

という動作をしてくれる。

>>836は、正規表現を使うと「単語の先頭」という位置にだけ合うパターンが
使えるのでそれを使う。必要なら同様に「単語の末尾」というのも使える。
正規表現による検索はre-search-forward.

ここまでで一応、要求は満たされるんじゃないのかな。


>>832は正規表現を使うと「AまたはBまたはC」にマッチするパターンというのが
書ける。それで検索して、その後でそれがAだったかBだったかCだったかを調べ、
対応する文字列(A'なりB'なりC'なり)に置換するという方法。
これだとバッファの先頭から検索を始めるのが一回で済む。

839:名無しさん@お腹いっぱい。
07/01/16 08:06:14
save-excursion も教えたれよ。

840:名無しさん@お腹いっぱい。
07/01/16 10:05:53
replace-regexp を使う。

841:名無しさん@お腹いっぱい。
07/01/16 11:37:35
>>840
This function is usually the wrong thing to use in a Lisp program.

842:名無しさん@お腹いっぱい。
07/01/16 12:59:54
(defun foo (alist)
  (let ((regexp (regexp-opt (mapcar #'car alist) 'words))
        (table (make-hash-table :test 'equal))
        (normalize (if case-fold-search #'downcase #'identity)))
    (dolist (pair alist)
      (puthash (funcall normalize (car pair)) (cdr pair) table))
    (save-excursion
      (while (re-search-forward regexp nil t)
        (let ((new (gethash (funcall normalize (match-string 0)) table)))
          (replace-match new))))))

843:名無しさん@お腹いっぱい。
07/01/16 15:22:17
ほとんどの漢字も普通にword syntaxだから全然だめだな

844:名無しさん@お腹いっぱい。
07/01/16 16:47:50
俺、elispでハッシュとか使ったことねーや

845:名無しさん@お腹いっぱい。
07/01/17 00:50:09
オレも make-hash-table ってのははじめてみたけど、
elispのハッシュってのはcdr要素数1のalistと解釈して、だいたいおk?


846:名無しさん@お腹いっぱい。
07/01/17 01:15:55
論理的にはOKだけど、計算量がぜんぜん違うよ?
何かアルゴリズムの入門書を読んだほうがよさげ

847:名無しさん@お腹いっぱい。
07/01/17 02:15:15
最近知ったんだけど、バイトコンパイルした結果って
直接実行もできるんだね。

(defun fn(x)
(* x 2))
(byte-compile 'fn)
#[(x) "\211\\\301\\\207" [x 0] 2]

(#[(x) "\211\\\301\\\207" [x 0] 2] 10)
20


848:名無しさん@お腹いっぱい。
07/01/17 05:48:58
ワロタ
つくづくエディタなんだな

849:名無しさん@お腹いっぱい。
07/01/17 06:23:03
つまらん

850:名無しさん@お腹いっぱい。
07/01/17 14:28:00
お前等の中にシリコンバレーで働いてる人いる?

851:名無しさん@お腹いっぱい。
07/01/17 23:10:28
emacsで文字のフォントの大きさを変えるにはどうしたらよいですか?


852:名無しさん@お腹いっぱい。
07/01/17 23:41:26
もしemacs lispがstatic scopeだったら果たしてどうだったろうか

853:名無しさん@お腹いっぱい。
07/01/21 00:40:22
>>851
fontset

854:名無しさん@お腹いっぱい。
07/03/28 18:57:13
(゚Д゚≡゚д゚)

855:名無しさん@お腹いっぱい。
07/03/29 01:39:37
>>854
うちの .Xdefault には, 未だに
> Emacs.Font: fontset-12 bold
> Emacs.Fontset-0: -shinonome-gothic-bold-r-*-*-12-*-*-*-*-*-fontset-12 bold
> Emacs.Fontset-2: -shinonome-gothic-bold-r-*-*-14-*-*-*-*-*-fontset-14 bold
...
> Emacs.Fontset-11: -shinonome-gothic-medium-r-*-*-24-*-*-*-*-*-fontset-24 medium
てなものが残ってて機能しているが...


856:名無しさん@お腹いっぱい。
07/04/12 10:48:03
emacs ilspでwebプログラミング可能?

857:名無しさん@お腹いっぱい。
07/04/12 11:29:20
>>856
「webプログラミング」っていうとどの辺の話?

858:名無しさん@お腹いっぱい。
07/04/12 11:45:50
URLリンク(www1.odn.ne.jp)

こういうことだったりして

859:名無しさん@お腹いっぱい。
07/04/12 11:57:35
AllegroServe とかそういう話かなぁ。
elisp じゃないけど。

860:名無しさん@お腹いっぱい。
07/04/12 13:32:42
elservなんてのがあったなー。
もっとまともなのも多分あるだろうけど興味無いので知らない。

861:名無しさん@お腹いっぱい。
07/04/12 15:16:27
emacsがwebサーバーになるのですね。もはやなんでもありですね。
elispはphpで作成するのと同様のwebプログラミングは可能でしょうか?
掲示板とか、アンケートなど。



862:名無しさん@お腹いっぱい。
07/04/12 15:18:15
>>861
アクセスのたびに Emacs 呼ぶってこと?
まぁ不可能じゃないんじゃね。
やる気は起きないけど。

>>859 じゃだめなん?

863:名無しさん@お腹いっぱい。
07/04/13 04:31:21
単純にphpスクリプトを書けるか?と聞けば
遊ばれずに済んだであろう>>861


864:名無しさん@お腹いっぱい。
07/04/13 09:45:15
そういう質問じゃないっしょ。

865:名無しさん@お腹いっぱい。
07/04/13 15:06:43
>>861
もちろん同様のことは可能。もちろん同様にはできないけどな。

866:名無しさん@お腹いっぱい。
07/05/13 16:17:55
定期的に M-x hoge を実行するにはどうしたら良いのですか?
答えが駄目なら、誰かヒントだけでも教えてくれないでしょうか。

867:名無しさん@お腹いっぱい。
07/05/13 17:55:49
timer

868:名無しさん@お腹いっぱい。
07/05/15 01:21:02
23
という数値を16進数数値として扱い、
"35"にする方法はどんなのがあるでしょうか?

(let ((n 23))
(format "%d" (string-to-number (number-to-string n) 16)))

これは思いつきましたが、もちょっと簡単にならんかな、と。


869:名無しさん@お腹いっぱい。
07/05/15 06:39:30
じゅうぶんかんたんだとおもう

870:名無しさん@お腹いっぱい。
07/05/15 10:48:34
>>868
#x23

871:名無しさん@お腹いっぱい。
07/05/15 11:08:26
>>868
なんで元が数値なんだろ。
3a とかの入力は考えなくていいの?

872:名無しさん@お腹いっぱい。
07/05/15 20:18:46
>>870
(read (concat "#x" n))
か。なんかびみょーに感じる。この表記がいけるのってemacs21以降あたり?

873:名無しさん@お腹いっぱい。
07/05/16 00:01:09
数値を concat できたのか…


874:名無しさん@お腹いっぱい。
07/05/16 00:22:21
ごめん。emacs21からはムリなはず。

875:866
07/05/20 00:46:22
駄目だ分からない。
run-at-time 使おうにも hoge をどう指定したら良いのか不明……lisp は難しい orz
例えば、.emacs にどう書けば、自動で M-x hoge できますか? ; emacs の引数から起動するのではなくて。
あとは、start-process と while と sleep-for 辺りを組み合わせれば可能な気はするんだけど……さっぱり orz
週末に数時間しか PC に触れられないのは、現代社会をは思えない環境 orz

876:名無しさん@お腹いっぱい。
07/05/20 00:52:00
run-with-timer 使うんじゃないの?
何がわからないのかがよくわからない

877:名無しさん@お腹いっぱい。
07/05/20 00:53:00
もしかして M-x から指定してるものが関数名だってことを知らないとか?

878:名無しさん@お腹いっぱい。
07/05/20 03:58:00
(setq hoge-timer (run-with-timer 0 1 'hoge))
(defun hoge ()
(interactive)
(message (current-time-string)))
(defun hoge-cancel ()
(interactive)
(cancel-timer hoge-timer))

M-x hoge
=>Sun May 20 03:56:18 2007

879:lispp?
07/05/20 14:40:44
LISPを学習して1週間目の者ですが、

(progn
(setq wara 10)
(setq waru 0)
(/ wara waru)
)
でエラーが発生します。

(if (equal waru 0)...)でなくて、catch??? throw???のような例外処理で対応したいのですが、
可能でしょうか?



880:名無しさん@お腹いっぱい。
07/05/20 14:50:53
>>879
URLリンク(shakosv.sk.tsukuba.ac.jp)

881:名無しさん@お腹いっぱい。
07/05/20 17:00:06
>>879
condition-case

elisp.infoのControl Structuresを参照。
Lispではcatch/throwの例外処理とsignal/condition-caseのエラー処理は別物
である点に留意されたし。

882:名無しさん@お腹いっぱい。
07/05/20 17:12:06
xyzzy使っているのですが、 condition-caseで関数がないと表示されます。


883:名無しさん@お腹いっぱい。
07/05/20 17:17:31
板違い

884:名無しさん@お腹いっぱい。
07/05/28 20:48:43
EmacsでのLispのプログラムについての質問です。
リストAとして((a b c) (d e f) (g h i))というリストがあるとして、このリストの中の要素であるリストの
最後の要素を返す関数を作る場合どうしたらいいでしょうか?


885:名無しさん@お腹いっぱい。
07/05/28 21:33:40
>>884
各要素の cdr を見ていって、それが nil なものを返せばいいんじゃないの。
そういう話でない?

886:名無しさん@お腹いっぱい。
07/05/28 21:37:09
>>884
(car (last (car (last '((a b c) (d e f) (g h i))))))

887:名無しさん@お腹いっぱい。
07/05/28 21:47:12
884の補足ですが、
リストAを引数として(c f i)を返すような関数を定義したいのです。
また、リストAの要素がもっと多い場合にも対応できるようにしたいのです。

888:名無しさん@お腹いっぱい。
07/05/28 21:52:54
>>887
(mapcar (lambda (x) (car (last x))) A)

889:名無しさん@お腹いっぱい。
07/05/28 22:00:23
>>888
見たことないコマンドが多いのですが・・・。
初心者なのでもう少し分かりやすくしていただけるとありがたいのですが。

890:名無しさん@お腹いっぱい。
07/05/28 22:16:26
標準の関数くらい自分でしらべろよ。

891:名無しさん@お腹いっぱい。
07/05/28 22:17:51
そういった関数を使わないで定義したいんです。

892:名無しさん@お腹いっぱい。
07/05/28 23:42:03
lambda とか mapcar 使わないで lisp のプログラム書くのは
逆に難しいと思うぞ。

893:名無しさん@お腹いっぱい。
07/05/29 00:06:38
それは無理な話だ

894:名無しさん@お腹いっぱい。
07/05/29 00:08:04
ごめん
>>893>>891へね

895:名無しさん@お腹いっぱい。
07/05/29 00:11:56
おk。mapcar も lambda も car も廃止してやったぞ。last は使わせてくれて…

(require 'cl)
(defun fun-887 (lst)
(loop for element in lst
collect (first (last element))))

last も禁止ならこうだ。

(require 'cl)
(defun fun-887 (lst)
(loop for element in lst
collect (first (reverse element))))


896:名無しさん@お腹いっぱい。
07/05/29 00:16:23
>>895ありがとうございました
もう一つ聞きたいのは、数nとリストを引数として取り、
リストのn番目の要素を返す関数を定義したいのですが、
この関数を再帰を使って定義するにはどうしたらいいでしょう


897:名無しさん@お腹いっぱい。
07/05/29 00:24:12
(defun list-ref (lis n)
(if (zerop n)
(car lis)
(list-ref (cdr lis) (- n 1))))

898:名無しさん@お腹いっぱい。
07/05/29 00:43:50
んー?
URLリンク(questionbox.msn.co.jp)

899:名無しさん@お腹いっぱい。
07/05/29 00:46:01
最近なんでもかんでも聞く人多くない?


900:名無しさん@お腹いっぱい。
07/05/29 01:19:24
mapcar を独自に定義しようとするとどう書ける?

901:名無しさん@お腹いっぱい。
07/05/29 01:29:48
>>896
再帰使うまでもない。

(defun list-ref (lis n)
(nth (1- n) lis))

902:名無しさん@お腹いっぱい。
07/05/29 01:52:11
(defun my-mapcar (func list)
(let ((rest list) (results ()))
(while (not (null rest))
(setq results (cons (funcall func (car rest)) results))
(setq rest (cdr rest)))
(nreverse results)))

とかかな。

903:名無しさん@お腹いっぱい。
07/05/29 02:01:06
setq とか cons を使いたくないんですとか来た場合に備えておこう。

(require 'cl)
(defun my-mapcar-2 (func lst)
(loop for elem in lst
collect (funcall func elem)))


904:名無しさん@お腹いっぱい。
07/05/29 02:04:56
>>898 つうか、そゆのは大抵自分では考えないだろうし、調べないだろうし、向上心もないだろうし、礼儀も知らないだろうし、
人の忠告も聞かないだろうから。さっさと答を与えればそれ以上しつこく聞いてこない軽い荒らしだと思って対応するが吉。

905:名無しさん@お腹いっぱい。
07/05/29 02:05:17
cl は宗教上の理由でちょっと……。

906:名無しさん@お腹いっぱい。
07/05/29 02:09:23
自分も書いてみた。リストしか考慮してない。
あんまり慣れてないからどっかまずいところあるかも・・・(自分への免罪符

(defun my-mapcar (func list)
  (defun my-mapcar-iter (func list rtn)
    (if (null list)
        rtn
      (my-mapcar-iter func (cdr list)
                      (setq rtn (cons (funcall func (car list)) rtn)))))
  (my-mapcar-iter func list '()))


907:名無しさん@お腹いっぱい。
07/05/29 02:11:39
defunの中でdefunするのはじめて見た。

908:名無しさん@お腹いっぱい。
07/05/29 02:11:55
あー、 reverse すんの忘れたorz

909:名無しさん@お腹いっぱい。
07/05/29 02:18:25
Schemer の方ですか? Emacs Lisp じゃー再帰は実用的じゃないお。
しかも defun は internal define と違ってグローバルだし…。

910:名無しさん@お腹いっぱい。
07/05/29 02:23:05
>>898の質問者はもうダメだろうね。レポートは突破できても試験は無理そうだ……。
授業二三回でればいいだろうになぁ。まったく聞いてなかったんだろうな。授業料無駄だったね。

911:名無しさん@お腹いっぱい。
07/05/29 02:58:34
>>909
最近、ちょっと scheme で遊んでたもので・・・。

> Emacs Lisp じゃー再帰は実用的じゃないお。
調べてみたところ、再帰回数が max-lisp-eval-depth で制限されてる、
末尾再帰が最適化されない、のようなことがあるのですね。

> しかも defun は internal define と違ってグローバルだし…。
M-x help f で関数のリスト見たら、my-mapcar-iter があって驚きました。

よくよく考えてみたら、setq はいらなかった。
なんでつけたんだろう。
まずいところ多すぎorz


912:名無しさん@お腹いっぱい。
07/05/29 07:07:10
>>905
改宗すればおk

913:名無しさん@お腹いっぱい。
07/05/29 10:07:37
cl 使えば flet で関数内関数使えるよ。

914:名無しさん@お腹いっぱい。
07/05/29 12:55:46
flet を使って書き直すなら、こんなかんじでしょうか。
たしかに my-mapcar-iter が隠れた。これ便利かも。

(require 'cl)
(defun my-mapcar (func list)
  (flet ((my-mapcar-iter (func list rtn)
          (if (null list)
              (reverse rtn)
            (my-mapcar-iter func (cdr list)
                            (cons (funcall func (car list)) rtn)))))
    (my-mapcar-iter func list '())))

915:名無しさん@お腹いっぱい。
07/05/29 22:24:57
…再帰するなら labels じゃねーとダメなんじゃね? cl のバグ?
ズバリこうだろ。while 版より短い!! 俺のバイク小屋ハァハァ

(defun my-mapcar (func lst)
(let ((result nil))
(dolist (e lst)
(push (funcall func e) result))
(nreverse result)))


916:名無しさん@お腹いっぱい。
07/05/29 22:27:10
なんとなく nreverse なしのループで書いてみた
(defun my-mapcar (fun list)
  (let* ((result (list nil))
         (x result))
    (while list
      (setcdr x (list (funcall fun (car list))))
      (setq x (cdr x) list (cdr list)))
    (cdr result)))

>>915
flet を macroexpand してみればわかるよ
まあしょうがないんだろうけどちょっと気持ち悪いよね

917:名無しさん@お腹いっぱい。
07/06/02 08:50:13
ずびまぜん。

elispで 16進数文字列を整数に変換する楽な方法ってありません?
(hoge "64") => 100
ってなるような。
(defun hoge (s)
(string-to-number (concat "#x" s)))
とかじゃ 0が返ってきてしまいました。


918:名無しさん@お腹いっぱい。
07/06/02 08:59:28
(defun hage (s)
(string-to-number s 16))

(hage "64")

100 ウマー

919:名無しさん@お腹いっぱい。
07/06/02 09:16:44
おお、そんなところに &optional があったとは...
infoをもっとちゃんと読むべきでした。
どうも有難うございました。


920:名無しさん@お腹いっぱい。
07/06/02 16:36:52
>>868-

921:名無しさん@お腹いっぱい。
07/06/02 21:22:45
知ってる人も多いだろうけど C-h f めちゃくちゃ便利だよ。
関数定義してるソースの該当部分にも飛べる。

922:名無しさん@お腹いっぱい。
07/06/03 00:27:47
emacs22でも、mode-infoも動いてくれるしね。


923:名無しさん@お腹いっぱい。
07/06/10 19:00:25
あるオブジェクトに対し、car-safeが非nilとなる時
cdrでなくcdr-safeを使うべき局面ってある?

924:名無しさん@お腹いっぱい。
07/06/10 23:36:38
>>923
car-safe が non-nil なら対象は list ってことだから、そんな局面はない、
と思う。


925:名無しさん@お腹いっぱい。
07/06/27 22:28:03
同じ名前の変数 (defvar hoge)と関数 (defun hoge ())が定義されているとき、
変数だけ定義を消すことってできますか?

(unintern 'hoge) だと、両方消えてしまうので。


926:名無しさん@お腹いっぱい。
07/06/27 22:36:59
makunbound
c.f.
fmakunbound

927:名無しさん@お腹いっぱい。
07/06/27 22:45:39
ぬりがとう。

ところでこれ何て読むのですか?
(エフ)メイク・アン・バウンドでいいんかな?

思い出されるcreat()。


928:名無しさん@お腹いっぱい。
07/06/27 23:18:45
>ところでこれ何て読むのですか?
なんでしょうね?

>思い出されるcreat()。
なるw

929:名無しさん@お腹いっぱい。
07/06/29 01:06:36
defconstしてるものには、時に大文字のシンボルを使ってみるのも一興かなと
ふと思った。
たぶんウザいだろうけど。

930:名無しさん@お腹いっぱい。
07/08/07 22:22:42
EmacsがXで動いているときだけ、
C-zでアイコン化しない様にしたいと思っています。
Xで動いているのかterminalで動いているのか判別するには
どうしたらよいのでしょうか。

931:名無しさん@お腹いっぱい。
07/08/07 22:29:27
window-system

932:930
07/08/07 22:33:57
>931
ありがとうございます。
とりあえず、
(if window-system (global-set-key "\C-z" 'shell))
としてみました。


933:名無しさん@お腹いっぱい。
07/08/21 05:23:38
M-x shell
を.emacsファイルの読み込み時に動作させるにはどうしたらよいのでしょうか。

934:名無しさん@お腹いっぱい。
07/08/21 10:02:38
本当に文字通りそうしたいのならば
(shell)
と書く。

935:名無しさん@お腹いっぱい。
07/08/21 12:13:59
>>934
できました。ありがとうございました。

936:名無しさん@お腹いっぱい。
07/08/26 17:18:02
(global-set-key [?\C-;] 'なにか)
とか
(global-set-key "\C;" 'なにか)
とやってもエラーがでて動きません。
;をjにしたら動いたので”なにか”が間違っていることはいないと思います。

C-;やC-, C-. へのバインドを指定するにはどうしたらよいのでしょうか
どなたか教えていただけないでしょうか?


937:名無しさん@お腹いっぱい。
07/08/26 19:00:19
[(control ?;)]

設定程度の質問なら、次回からelispスレじゃなくてemacsスレ行きな。

938:名無しさん@お腹いっぱい。
07/08/26 21:58:08
>>937
ありがとうございます
今後は気をつけます
どうもすいませんでした

そのようにしても動きはしませんでしたが、
それはターミナルからの接続の仕様らしいと分かったので、
別のキーを割りあてることにします

939:名無しさん@お腹いっぱい。
07/08/26 22:06:20
man ascii
で出てくるコントロールコード以外の
コントロールキーの組み合わせ以外は
端末じゃ動かないよ。

940:名無しさん@お腹いっぱい。
07/08/26 22:09:03
まちがえた。以外が一つ多かった。

941:名無しさん@お腹いっぱい。
07/08/28 01:55:47
(func "/usr/bin/emacs" "/")
=> ("usr" "bin" "emacs")

こんな感じで、文字列からトークンを抽出する好い奴を
何方か識りませぬか?

942:名無しさん@お腹いっぱい。
07/08/28 02:03:17
普通に1文字ずつチェックすれば良いじゃない。

943:名無しさん@お腹いっぱい。
07/08/28 03:14:56
split-string

944:名無しさん@お腹いっぱい。
07/08/28 19:47:13
>>943
幸あれ。
やっぱりあるよね。token で探してたよ

>>942
普通?とりあえずこんなん書いてた

(lambda (string delimiter)
(let* ((iter (lambda (str dlm lst)
(if (and (string-match dlm str) (substring str (1+ (string-match dlm str)) nil))
(funcall iter
(and (string-match dlm str) (substring str (1+ (string-match dlm str)) nil))
dlm
(cons (substring str 0 (string-match dlm str)) lst))
(cons (substring str 0 (string-match dlm str)) lst)))))
(funcall iter string delimiter ())))

945:名無しさん@お腹いっぱい。
07/10/27 01:27:05
下記のような独自スクリプトのメジャーモードを作っています。
function:
if hoge == 0 {
hogehoge;
}
elseif hoge ==1 {
if hoge2 == 0 {
hogehoge2;
}else{
hogehoge3;
}
}
end;
階層は上記のif文のみです。
自動インデントをつけたいのですがどうすればいいでしょうか?


946:945
07/10/28 08:47:43
補足です。generic-x.elを使って作っています。


947:名無しさん@お腹いっぱい。
07/10/30 10:08:00
buffer-local-variableなるものがあるそうですが、
.emacs.elなどでsetq-defaultで設定した値は、
新しいバッファを作る度にバッファごとの値のコピーが作られてしまうんでしょうか。

カスタマイズ性から見るとsetq-defaultの方が使い易そうなのですが、
パフォーマンスに悪影響がでないか心配なんです。

948:名無しさん@お腹いっぱい。
07/10/30 20:29:39
make-variable-buffer-local されてるような変数の話だよね。
これは setq とかで書き換えた時点で、その buffer に local な変数が作られるってシステム。
書き換えるまではどの buffer でも初期値を参照してて、 setq-default はこの初期値を書き換える。
それ自体がコピーの原因になったりはしないはず。

949:名無しさん@お腹いっぱい。
07/11/16 08:26:40
call-processとかの外部コマンド呼び出し関数で
コマンドの出力(標準出力)を文字列もしくは文字列リストで
返すようなものってないでしょかね?
いちいちバッファに出すのがとても無駄に感じる時がある

950:名無しさん@お腹いっぱい。
07/11/16 22:17:04
set-process-filter

951:名無しさん@お腹いっぱい。
07/11/29 10:04:56
みなさん、乙です。

コードの中で読み易さを上げるためダブルクオート中の文字列を改行して書きたいのですが、
その改行自体はコード上では無効にしたいのですが、どうすればいいですか?


(message "
listA,
listB,
listC")

これが以下のようにmini-buffer に出力して貰いたいのですが、

listA,listB,listC

そんな方法ありますか?

952:名無しさん@お腹いっぱい。
07/11/29 11:08:37
>>951
(message (concat
"listA,"
"listB,"
"listC"))

953:名無しさん@お腹いっぱい。
07/11/29 12:39:04
>>951
(message "\
listA,\
listB,\
listC")


954:名無しさん@お腹いっぱい。
07/11/30 05:59:54
>>952, 953
サンクス。C と同じことできたのね。試せよオレ。



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch