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


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

Emacs Lisp 3



1 名前:デフォルトの名無しさん [2007/10/09(火) 05:39:53 ]
Emacs Lisp の専用スレ。
少数派による互助を中心に、初心者の相談も気が向けば受け付けます。
単なる Emacs ユーザーは別板の Emacs 関連スレにどうぞ。

過去スレ
Emacs Lisp
pc2.2ch.net/test/read.cgi/tech/1004551074/
Emacs Lisp 2
pc11.2ch.net/test/read.cgi/tech/1068467385/

関連スレ
Emacs part 22
pc11.2ch.net/test/read.cgi/unix/1180828013/
【叩かれて】Emacs Lisp道場【強くなれ】
pc11.2ch.net/test/read.cgi/unix/1063880951/
Lisp Scheme Part18
pc11.2ch.net/test/read.cgi/tech/1186922295/

92 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 12:03:29 ]
>>90
そんな長いコマンドがちょっといやで,
C-c C-tあたりでできるようにしたいです




93 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:28:35 ]
>>92
じゃあチラシの裏に書く前にさっさとそうしてください。

94 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 07:24:04 ]
opensuse11 初心者だけど、manページが文字化けする。。。。

95 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 09:18:57 ]
elispでもマクロがあるんだねぇ。しらなかった。試しに作ったけど

(defmacro definsert (name str)
(let ((dstr (gensym)) (len (gensym)))
`(defun ,name ()
(let* ((,dstr (concat ,str ,str)) (,len (length ,str)))
(insert ,dstr)
(backward-char ,len)))))

( definsert insert-double-aho "aho")
(insert-double-aho) => ahoaho カーソルの位置 最初のahoの後ろ

インデントは適当になおしてね。また、これは車輪の再発明でinsert-pairが
標準であることを付け加えておきますね。

96 名前:デフォルトの名無しさん [2008/09/28(日) 07:16:03 ]
一行コピーの一番エレガントな実装を教えてください。
取り合えず手元にあるものではこんな感じ。

(defun duplicate-line (n)
(interactive "p")
(save-excursion
(copy-region-as-kill (line-beginning-position)
(progn (forward-line 1) (point)))
(dotimes (i n)
(yank))))

ちなみに、コピー後のカーソル位置は任意です。(カラムが移動するのはイヤン)


97 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 08:05:33 ]
;; エレガントかどうか知らんけど、最終行でも動作が変わらないようにしてみました
(defun duplicate-line (n)
(interactive "p")
(save-excursion
(let ((str (concat (buffer-substring (line-beginning-position)
(line-end-position))
"\n")))
(forward-line)
(when (= (line-end-position)
(point-max))
(insert "\n"))
(dotimes (i n)
(insert str)))))

98 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 10:44:45 ]
(fset 'duplicate-line
[?\C-a ?\C- ?\C-e escape ?w ?\C-m ?\C-y ?\C-a ?\C-p])

99 名前:96 mailto:sage [2008/09/28(日) 11:13:49 ]
ありがとうございます。

>>97
確かに最終行が改行で終わってないと動作がおかしいですが、
ある意味正しいというか、あまりないことなので現状でも
いいかなという気もします…

>>98
マクロも考えたんですが、カーソルのカラム位置が移動しちゃうのと
一回のUndoで元に戻らないのがちょっと微妙です。


100 名前:96のお父さん [2008/09/28(日) 11:34:40 ]

(insert (save-excursion (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))




101 名前:96のお父さん [2008/09/28(日) 11:36:45 ]
失礼。
× (insert (save-excursion (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))
○ (save-excursion (insert (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))

どっちでもいいけどな。


102 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 13:26:48 ]
質問です。

grep-find で、あちこちの .svnディレクトリ以下を無視したいのですが、
参考:.svnを除外してfindする
snak.tdiary.net/20081008.html#p02

今は毎回、-name .svn -prune -o を手で付け加えていて面倒なのです。

そこで、デフォルトでこのオプションが追加されるようにしたいのですが、で
きたらgrep.elはそのままで、.emacs.el で設定したいのです。どうしたら良い
でしょうか?


103 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 13:35:06 ]
なんか自己解決しました。grep-findじゃなくてrgrepだと.svnディレクトリを
デフォルトで無視してくれてるみたいです。
もっと調べてから質問するべきでした。すみません。


104 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 14:24:45 ]
すみません、>>102-103です。
Emacs本スレに書いたつもりの誤投稿でした。本当にごめんなさい。

105 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 11:27:34 ]
Emacs Lispでwgetみたいなことはできますか?

106 名前:デフォルトの名無しさん [2008/12/03(水) 15:34:26 ]
質問です。
x と lst が与えられたとき、x を lst から取りだす CAR と CDR の適用列を返す
関数 co を定義しなさい。 coは、そのような適用列が存在しない場合は NIL を
返すものとする。

107 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 15:43:05 ]
>>106
> x と lst が与えられたとき、x を lst から取りだす CAR と CDR の適用列を返す
> 関数 co を定義しなさい。
この文章は 命令 とか 指示 とかいった文章で
> coは、そのような適用列が存在しない場合は NIL を返すものとする。
この文章は 補足 とか 追加説明 とかいった文章だな。

で質問は何?

108 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:02:51 ]
;; >>106 エスパーして作ってみた
(mapc 'require (cl el-expectations))

(defun co (x lst &optional acc)
(assert (listp lst))
(macrolet
((recur (&rest lst) `(co ,@lst)))
(let ((cur (car lst)))
(cond ((null cur) nil)
((and (atom cur)) (if (eq x cur) (cons 'car acc)
(recur x (cdr lst) (cons 'cdr acc))))
((listp cur) (or (recur x (car lst) (cons 'car acc))
(recur x (cdr lst) (cons 'cdr acc))))
(t (error "unexpected lst: %s" cur))))))
;; test cases
(expectations
(error (co 'a '()))
(expect (co 'not-found '()))
(expect (co 'a '(a)) '(car))
(expect (co 'b '(a b c)) '(car cdr))
(expect (co 'c '(a b c)) '(car cdr cdr))
(expect (co 'x '((x) a b c)) '(car car))
(expect (co 'x '((a b c x) d e f)) '(car cdr cdr cdr car))
(expect (co 'x '(a b (c x d) e f)) '(car cdr car cdr cdr)))

109 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:04:03 ]
(mapc 'require '(cl el-expectations))



110 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 18:41:44 ]
>>106
どこの学校の宿題 ?



111 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:04:29 ]
戸塚ヨットスクール

112 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:40:53 ]
;; とりあえず質問者からの動作報告求む
(defun* co (x lst &optional (compare 'eq))
"COMPAREで比較関数を指定できるようにしてみた。
引数無しでは`eq'を使って比較する。"
(assert (listp lst))
(labels ((f (lst acc)
(let ((cur (car lst)))
(cond ((null cur) nil)
((and (atom cur)) (if (funcall compare x cur) (cons 'car acc)
(f (cdr lst) (cons 'cdr acc))))
((listp cur) (or (f (car lst) (cons 'car acc))
(f (cdr lst) (cons 'cdr acc))))
(t (error "unexpected lst: %s" cur))))))
(f lst '())))
;; てすけ
(expectations
(error (co 'a '()))
(expect (co 'not-found '()))
(expect (co 'a '(a)) '(car))
(expect (co 'b '(a b c)) '(car cdr))
(expect (co 'c '(a b c)) '(car cdr cdr))
(expect (co 'x '((x) a b c)) '(car car))
(expect (co 'x '((a b c x) d e f)) '(car cdr cdr cdr car))
(expect (co 'x '(a b (c x d) e f)) '(car cdr car cdr cdr))
(expect (co "foo" '("bar" "foo") 'string=) '(car cdr)))

113 名前:デフォルトの名無しさん [2008/12/04(木) 15:17:06 ]
遅くなりました106です。
関数coを定義しなさいという問題でした。

みなさんのおかげできました。
ありがとうございました。



114 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 16:07:00 ]
質問をさせてください。
read-string等でminibufferから読み込みをしている最中にC-x C-bとかすると
(if enable-recursive-minibuffers
    (error "Command attempted to use minibuffer while in minibuffer")
   (error "Cannot switch buffers in minibuffer window"))
なんですが
condition-caseでは捕まえられないし(switch-to-buffer中のエラー?)
*Backtrace*でqを押すとread-stringが戻る事無くトップレベルに返ってしまいます。
こういう場合はどう対処すればよいのでしょうか?
非同期プロセスと通信するプログラムを書いているので
いきなりtop-levelに返ってもらっては困るのです。
よろしくお願いします。

115 名前:114 mailto:sage [2008/12/05(金) 16:18:25 ]
ifのthen式とelse式が逆でした

116 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:20:41 ]
すみません、
>>106>>108>>112
より簡単に書けませんか?
よく分かりません

117 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:50:38 ]
宿題をここで教えてもらうような人間が提出するには
コードが綺麗すぎて困っているのですね、わかります。

118 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:56:12 ]
(defun co (x lst)
(let ((f (lambda (node acc)
(cond ((eq node x) acc)
((consp node)
(or (funcall f (car node) (cons 'car acc))
(funcall f (cdr node) (cons 'cdr acc))))))))
(funcall f lst '())))

119 名前:デフォルトの名無しさん [2008/12/24(水) 16:57:33 ]
ある eval に時間のかかる式を
開発中に eval-buffer したときは eval せずに,
compile 時のみに eval したいんですが,
どうするんでしょうか?

(eval-when (compile) (hoge))

これはうまくいっていないように思う.
Emacs 22.


120 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 22:25:20 ]
eval-when-compile



121 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:44:53 ]
eval-when-compile は eval-buffer でも eval される.

質問の仕方を変えると, byte compiling 中のみ Non-NIL に
なる変数はどうすれば定義できるか?

(defvar hoge-byte-compiling-p ...)



122 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 09:15:49 ]
>>119>>121じゃ問題が全然違うだろ。

123 名前:デフォルトの名無しさん [2008/12/25(木) 12:25:52 ]
質問がへたでごめんなさい.
eval-when-compile は eval-buffer のときも byte-compile のときも eval されるが,
今どちらなのかを区別したいです.


124 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 16:32:59 ]
>>121
backtrace/backtrace-frame を使って byte-compile-form あたりの有無で判定
できると思う.


125 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 11:11:43 ]
大学2年です
春休みを使って、emacs lispを勉強して、より快適な環境を作り、雑多な手間を省きたいんですが
どのくらいのレベルに行けば、emacs lispを扱えるレベルと言えるんでしょうか?
現在、自分はレベル1でしょうか

実は、Pythonのほうが興味があって、Pythonのほうがメインの勉強だったりします
Pythonでも下記のリンクのようなことは、できそうですよね?
Lisp(emacs lispとの違いがまだよくわかっていませんが)のほうがスマートなんでしようか

古いネタですが、叩き台のネタに

Scheme:Schemeプログラマのレベル10
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3aScheme%a5%d7%a5%ed%a5%b0%a5%e9%a5%de%a4%ce%a5%ec%a5%d9%a5%eb10


126 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:23:43 ]
新しいmajor-modeを書いたり、標準のelispとか誰かが作ったelispのバグを取ったり拡張を書いたり
できるようになれば十分扱えてるといっていい状態だろうね
それ以外の項目については何が言いたいのかよくわからない

127 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:28:15 ]
Lispの方がスマートに解ける問題もあればPythonの方が良い場合もあるでそ。
なんとなく思いだしたのでこれ貼っとく。
ttp://www.aoky.net/articles/steve_yegge/tour_de_babel.htm

128 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 06:58:22 ]
>>127
リンク、サンクスです
この人の寸評だと、このころはRubyのほうが優れた言語とされていたんだね

elispで何ができるかというのは、漠然とだけど、掴めるんだけど
Schemeでなにができるかがよく掴めない(どういう用途に優れているとか)
単なる教養としての言語なのかな
言語仕様として一貫性があるとか、そんな感じなのかな

Scheme関連のチュートリアルを読んでみます

129 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 11:50:11 ]
一応言っておくけど、Lispを学びたいからEmacs Lispをやるっていうのなら、
括弧になれるとか入口程度に思っておいた方がいいよ。
Emacs Lispは、見た目、Lispなだけだから。
末尾再帰を最適化できないから、再帰で書くことが事実上できなかったり、色々とLispらしくないから。

130 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 12:40:51 ]
Emacs Lispはテキストエディタのマクロとは思えないほど多機能だけど
>>129に書かれてるような問題があるよということを>>127の人の最近のポストで書いてるね。
ttp://steve-yegge.blogspot.com/2008/11/ejacs-javascript-interpreter-for-emacs.html
Emacs LispでJavascriptを実装しちゃうってのも凄い話だけど。
あとLispの方言の説明がおもろい。

>Lisp is a whole family of languages, and can be broken down approximately as follows:
> * Scheme is an exotic sports car. Fast. Manual transmission. No radio.
> * Emacs Lisp is a 1984 Subaru GL 4WD: "the car that's always in front of you."
> * Common Lisp is Howl's Moving Castle.



131 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 13:02:07 ]
>>130
コメント欄みてみるとハウルネタがやたらウケてるな。このアニオタどもめ!

132 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 13:11:50 ]
言語仕様に問題のあるEmacs Lispだけどlispの総合環境としてはソースレベルデバッガあり、トレーサあり、
プロファイラあり勿論ディスアセンブラもありと割と至れり尽せりだったりする

133 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 13:43:30 ]
>>130
ハウル、みていないんだがw
Emacs Lisp の"the car that's always in front of you."をYahooに訳させたら、
いつもあなたの正面にある車。と訳したんだけど、どういう意味だ
1984 Subaru GLは
ttp://farm1.static.flickr.com/65/208717197_bde1198885.jpg
らしいけど、古い4WDって話か
>>132
そういう通常利用の一個上を行く使い方ってどういうのがあるんですかね
潜在能力が高いなら、もっと踏み込んで勉強したいところなんですが
ちょっとEmacs Lispをかじっただけですが、けっこうのことをEmacs1つでできそうだなと想像するんですが


Lisp関連であと2日ぐらいググって、今後のカリキュラムを組もうかな
言語仕様50ページだったSchmeは、ちょっとやりたくなるね
Schmeをやってから、Emacs Lispをやったほうが言語仕様も理解しやすいかな

関数名が長いのってEmacs Lispだけじゃなくて、Schmeもそうなんだね
略記もあるみたいだけど
個人的に長いほうが好きかも
保守しやすそうだし

チラシの裏
年齢(生まれ)比較
Lispは1958年生まれの51歳
Schmeは1970年代生まれの30代
Comon Lispは1984生まれの25歳
Emacs本体(Emacs Lisp)は約1976年生まれ, 32〜33歳
Pythonは1991生まれの18歳
C言語は1972年生まれの37歳

134 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:19:28 ]
>>133
"the car that's always in front of you."
は、俺だったら
「いつもそこにある車」 って訳すかな
(=古くてダサくて定番中の定番で面白くないけど、結局乗るのはこの車なんだよね、
的な意味で)

あと、「Scheme」 だぞ。typoかと思ったけど全部Schmeって書いてるってことは
本気で勘違いしてる?

135 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:27:08 ]
schemeやelispはhogeライブラリのfoo関数ってのをhoge-fooみたいに定義せにゃならんからね
この規則を使って階層になったライブラリの関数、hogeライブラリの中にあるfooライブラリの関数fの名前を付けると
hoge-foo-fのようになってしまう
長くなるのは仕方ないけど、この規則ででかいアプリケーションは書きたくないよね

136 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:31:26 ]
the car that's always in front of you というネタの原型はフォードT型。
あまりに売れすぎて、「どんなレーシングカーもフォードTの前に出ることはできない。どれだけ抜いてもまだ前にもう1台いる」というジョークが生まれたので。
スーパーカーとの対比で、性能はプアだけどみんなが使ってる普及版っていうニュアンスだろうな。

elispはよくも悪くもEmacsと切り離せないものなので、本当に言語の勉強をしたいならcommon lispかschemeのほうがいいよ。
逆にEmacsいじって遊びたいならelisp使うしかないし。

137 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:39:45 ]
>>136
134だが勉強になった。トン

138 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 18:12:24 ]
>>136
> elispはよくも悪くもEmacsと切り離せないものなので、本当に言語の勉強をしたいならcommon lispかschemeのほうがいいよ。
言語の勉強したいまでは、まだ至っていません
Emacsを使いこなせるようになりたいだけで

Schemeは、知っていて損はなさそうですね
チュートリアルの語彙も特徴的で好奇心をそそられる
英語・日本語の資料も豊富そうで資料には、困らないだろうし
プログラマとしての幅が広がるなら、なおうれしいかな

139 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 00:26:28 ]
俺はバッファ、リージョン、選択範囲なんか用の
map関数を書いてよく使ってるんだがこれ便利よ
色々関数を別途定義しといて
関数を行に対して呼び出す

2chに書き込むときによくやるのは
タブ→スペース変換と
半角スペース→nbsp変換
こうするとプログラムはインデントされて見やすい

ところで、久しぶりにここきたんだが
xyzzyスレってどこいったの?
見つからないんだけど

140 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 00:34:37 ]
ソフトウェア板とWindows板に1つずつあるよ。



141 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 00:45:02 ]
あったあった、さんきゅー

142 名前:デフォルトの名無しさん [2009/02/19(木) 18:25:06 ]
行の(半角相当で)80文字目の位置をを色づけしたいとおもったんですが,
とりあえず思いついた
'(("^......................................................\
.........................\\(.\\)" 1 highlight-long-line-face append))
というのをfont-lock-add-keywordsして加えたところ、
当然ながら全角文字をいれると後ろにずれました

半角で80文字目の位置をを色づけする方法について、
なにかお知恵を拝借できませんでしょうか?

143 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 19:21:13 ]
www.emacswiki.org/emacs/ColumnMarker

144 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:19:43 ]
質問者じゃないけど
めちゃめちゃ重いなそれw

145 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 15:29:29 ]
>>143
ありがとうございます
そんなものが作られてたんですね、試してみます

146 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 22:05:35 ]
>>144
うまい工夫をしないと速くならないだろうからなぁ。常に80文字目を数えるって
いうことだしね。

147 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:00:47 ]
cygwin環境下でgaucheをリッチに使いたくて
行ごとに色を変えたいんですが教えてください

まさに自分がやりたいことがこれ
ttp://pitecan.com/codeblog/2006/01/emacs.html

上のプログラムをざっと読んだ感じ、
色の変更に関するプリミティブな部分ってのは
「put-text-propertyに背景色を設定したfaceを設定する」
というように感じたのですがあってますか?

それらしきコードを書いてみたのですがうまくいかず・・

(setq symbol (make-symbol "test"))
(setq face (make-face symbol))
(set-face-background face "DarkSeaGreen1")
(point)
134 ←評価結果
(point)
146 ←評価結果
(put-text-property 134 146 'face face)

148 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:02:07 ]
あ、補則。このコードは行は意識してなくて、とりあえず指定箇所の背景色を変えたいだけです

149 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:19:05 ]
とりあえずfont-lock-faceにしたら動いたけど
(put-text-property 1 20 'font-lock-face 'highlight)

150 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:39:13 ]
ありがとうございます。
それを実行したときはtが返るんですよね?
M-x list-faces-displayで書いてあるフェイスをいくつかうちこんでは見ましたが
自分の環境ではnilが返ってきて色が変わらないです

↓動作はよくわかってませんが、これを切り替えた場合はちゃんと色が変わります
(global-font-lock-mode t)
(global-font-lock-mode nil)

今日は寝て、また明日調べてみますわ



151 名前:デフォルトの名無しさん [2009/02/25(水) 12:19:45 ]
ver22で拡張された \,(function \1) みたいなのが
replace-match では使えない(不正な\エラーになる)のは何で?

こんな感じ↓
(re-search-forward "\\(.+\\)" nil t)
(replace-match "\\,(my-func \\1)" nil nil)
=> Invalid use of `\' in replacement text


152 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:06:59 ]
est

153 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 17:08:20 ]
>>151
君の頭が腐っているというのを疑った方がいいよ

154 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:26:35 ]
>>151
プログラマブル正規表現だっけ?
よくわからん

155 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:11:40 ]
プログラマブルなのが使えるのは、インタラクティブに実行した場合だけでしょ。

NEWS
*** When used interactively, the commands `query-replace-regexp' and
`replace-regexp' allow \,expr to be used in a replacement string,

ちなみに replace-regexp を実行したら次のように展開された(repeat-complex-command)。

(replace-regexp "\\(.+\\)"
(quote
(replace-eval-replacement replace-quote
(my-func (match-string 1))))
nil
(if (and transient-mark-mode mark-active)
(region-beginning))
(if (and transient-mark-mode mark-active)
(region-end)))

で、replace-regexp をプログラムの中で使うのはbadなので、

(while (re-search-forward "\\(.+\\)" nil t)
(replace-match (my-func "\\1") nil nil))


156 名前:151 mailto:sage [2009/02/28(土) 01:47:45 ]
>> 154
そんな名前があるとは知らなんだ。
google先生は記号の検索には弱いしね・・・

>> 155
サンクス。インタラクティブ専用だったんだ。
よく使う置換の組を「お気に入り」みたいに登録して一発で呼び出せるlispを作ってたんだけど、
仕組み上、正規表現は自由に指定可能だから関数決めうち実行ができなくて。
プログラマブル正規表現は非対応とあきらめるしかないか。

157 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 03:23:53 ]
>> と数字の間は開けないで

158 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 22:18:39 ]
起動時にインタラクティブな関数を自動的に呼び出すにはどうしたらいい?
2画面で起動して、片方にSchemeインタプリタを起動したい
2画面の分割は、.emacsに(split-window-vertically)を追記したらうまくいったが
M-x run-schemeが呼び出せないんだ

159 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 22:50:34 ]
(run-scheme) ではだめなのけ?

160 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:14:03 ]
だめぽ。そうするとこんなわけわからんエラーが出る
Wrong number of arguments: #[(cmd) "\304\305!\204^Y^@\306^H!^Y\307\310\311 @\312 A%q\210\313 \210)^H^R\305^S\314\305\
!\207" [cmd cmdlist scheme-program-name scheme-buffer comint-check-proc "*scheme*" scheme-args-to-list apply make-comint "s\
cheme" nil inferior-scheme-mode pop-to-buffer] 6 ("/usr/share/emacs/21.2/lisp/cmuscheme.elc" . 6428) (list (if current-pref\
ix-arg (read-string "Run Scheme: " scheme-program-name) scheme-program-name))], 0



161 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:18:46 ]
describe-function(C-h f)ぐらい覚えような

162 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:29:14 ]
>>160
(run-scheme scheme-program-name)


163 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 09:48:57 ]
(call-interactively 'run-scheme)


164 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 14:28:41 ]
>>161-163
d牛d牛トーン・・カツ!
すばらしく快適な環境になった

165 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:07:00 ]
>>164
(call-interactively 'run-scheme)
これしらんかった、すげぇ勉強になった、ありがとう
いままでintaractive関数の機動失敗時はいつも.elの中調べてた。


166 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 03:01:42 ]
elispで呼び出し元の関数名を調べるにはどうしたらよいのでしょう?

167 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 15:59:27 ]
Meadow3(Emacs22)の画像インライン展開で質問です。

ヘルプ見る限り、create-imageはファイルからだけじゃなくデータも直接読んで
画像を作ってくれるみたいなんですが、うまくいきません。
insert-file-contents-literallyでテンポラリバッファに読み込んで渡してるんですが
なにかやり方に問題があるのでしょうか?

(insert-image (create-image "~/hoge.gif"))
だと画像が出ますが、

(insert-image (create-image (with-temp-buffer
(insert-file-contents-literally "~/hoge.gif")
(buffer-string)) 'gif))

だとトウフが出てしまいます。


168 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 16:33:41 ]
>>167
set-buffer-multibyte -> nil
DATA-P -> t
でどうです。

169 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 16:43:04 ]
>>168
素早い指摘陳謝です。
無事表示されるようになりました。
ヘルプはちゃんと読まないとだめですね。

unibyteとかmultibyteはまだよく理解してないので勉強します。
ありがとうございました。

170 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 13:49:09 ]
自分でメジャーモードとか作ろうと思った時に
Infoとか書籍以外にこれは参考にすべきといったパッケージってなにがありますか?
色々眺めてるんですがみんな結構やり方が違っててよくわからなくなってきました。



171 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 15:03:54 ]
>>170
Infoによるとtext-modeが最もシンプルだと言うから、text-modeがいいと思うよ。
Emacs22からdefine-derived-modeが使われててより簡単に作れるようになってる。
たった1行でも実行可能なのを今やってみて初めて知った。
(define-derived-mode hoge-mode nil "Hoge")
あとは、キーマップを定義するだけ。
ま、そういうわけでEmacs21と22のtext-modeが参考になる。


172 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 15:55:22 ]
>>171
回答ありがとうございます。
見てみましたが雛形に丁度良い感じですね。
text-modeを足掛りにして頑張ってみようと思います。

標準配布されてるパッケージのコードは
基本的に正しいやり方(?)で書かれていると思ってよいんですよね?
#もっとスマートな方法があるのに変なやり方で無駄に処理を増やしてるとか
#メモリを無駄に使ってしまう書き方だったりとか....

173 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 17:33:24 ]
>>172
必要なことを必要なだけ書けばいいんですよ。
メジャーモードとして機能するためには最低限何が必要か。
そこに、自分が欲しいものを追加していくだけです。
またそのために、例えばsyntax-tableを独自に定義した方がいいならそうするし。
defcustomなんかはdefvarで済ますこともできるけど、ひとが作ったパッケージを
利用するときはdefcustomの方が分かりやすいと思うので、そう考えるならそうするしとか。
コードを書く上では、自分でこれでいいと思うコードを書けばいいんです。
あとは、慣習に従うと。


174 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 18:51:55 ]
コロン付きのキーワードシンボルってあんまり使われてない気がするんですが、
なにか歴史的理由とかバージョン間互換性とかの理由があったりするんでしょうか?

alistのcarとかオプショナルな引数が沢山ある関数での&restで引数とる時のラベリングとか
値を取らないことを明示的に示してて便利だと思うんですけど(elispモードで色分けもされるし)、
色々ソース眺めた感じ、使ってるパッケージはガンガン使ってるんですが、
まったく使ってないところはcustomとかtext-property等ぐらいでしか使ってません。

175 名前:デフォルトの名無しさん [2009/04/15(水) 16:51:29 ]
ttp://www.bookshelf.jp/texi/elisp-manual/21-2-8/jp/elisp_11.html#SEC138

176 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 18:05:50 ]
よもや返事がくるとは思わなかったw

値が設定出来無い=ラベルとか専用ってことがコンパイラレベルで保証されてて
よさげだと思うんですが・・・

とりあえずassocのcarはシンボル、plistと関数のrestはキーワードシンボルで
書き進めちゃってるんですが、いいんだろか・・・

177 名前:デフォルトの名無しさん [2009/04/15(水) 20:11:53 ]
コードリードしてるとき、コメントアウトうざいなーと思うことが多々あったので、
こんなコード書いてみました。スマートじゃない部分あるのでまだ改良しますが、
方向性として他に方法ないかアドバイスお願いします。


178 名前:デフォルトの名無しさん [2009/04/15(水) 20:13:51 ]
改行多すぎと怒られたのでbase64-encode-region
KGRlZnVuIGhpZGUtY29tbWVudC1mYWNlICgpIAogICJmYWNlIGNvbW1lbnQgaGlkZSIgCgkoaW50
ZXJhY3RpdmUpCiAgIDs7JygxIDIgMyAuLi4uIGNvbW1lbnQgZmFjZSBwb2ludCBsaXN0KQoJKHNl
dHEgY29tbWVudC13YWxrCgkJCQkobG9vcCBmb3IgeCBmcm9tIDEgdG8gKHBvaW50LW1heCkKCQkJ
CQkJCWZvciBsb2ZhY2UgPSAobGlzdCAoZ2V0LXRleHQtcHJvcGVydHkgeCAnZmFjZSkgeCkKCQkJ
CQkJCWlmIChvcgoJCQkJCQkJCQkobWVtYmVyICdmb250LWxvY2stY29tbWVudC1kZWxpbWl0ZXIt
ZmFjZSBsb2ZhY2UpCgkJCQkJCQkJCShtZW1iZXIgJ2ZvbnQtbG9jay1kb2MtZmFjZSBsb2ZhY2Up
CgkJCQkJCQkJCShtZW1iZXIgJ2ZvbnQtbG9jay1jb21tZW50LWZhY2UgbG9mYWNlKQoJCQkJCQkJ
CQkpIGNvbGxlY3QgKG50aCAoLSAobGVuZ3RoIGxvZmFjZSkgMSkgbG9mYWNlKSkpCgkoYWRkLXRv
LWxpc3QgJ2NvbW1lbnQtd2FsayAnLTEpIDsgYmFkIGNvZGUKCShhZGQtdG8tbGlzdCAnY29tbWVu
dC13YWxrICctMiB0KSA7IGJhZCBjb2RlCgogICA7Oycoc3RhcnQgZW5kIHN0YXJ0IGVuZCBzdGFy
dCBlbmQgLi4ub3ZlcmxheSByZWdpb24gbGlzdCkKCShzZXRxIGNvbW1lbnQtd2FsawoJCQkJKGxv
b3AgZm9yIHJpZ2h0U3RlcCBpbiBjb21tZW50LXdhbGsKCQkJCQkJCWZvciBsZWZ0U3RlcCBpbiAo
Y2RyIGNvbW1lbnQtd2FsaykKCQkJCQkJCWlmIChub3QgKGVxICgrIHJpZ2h0U3RlcCAxKSBsZWZ0
U3RlcCkpIGFwcGVuZCAobGlzdCByaWdodFN0ZXAgbGVmdFN0ZXApKSkKCShzZXRxIGNvbW1lbnQt
d2FsayAoZGVscSAnLTEgY29tbWVudC13YWxrKSkgOyBiYWQgY29kZQoJKHNldHEgY29tbWVudC13
YWxrIChkZWxxICctMiBjb21tZW50LXdhbGspKTsgYmFkIGNvZGUKCgkoc2V0cSBjb21tZW50LW92
LWxpc3QKCQkJCShsb29wIGZvciBzdGFydCBpbiBjb21tZW50LXdhbGsgYnkgIydjZGRyIAoJCQkJ
CQkJZm9yIGVuZCBpbiAoY2RyIGNvbW1lbnQtd2FsaykgYnkgIydjZGRyIGNvbGxlY3QgKG1ha2Ut
b3ZlcmxheSAoLSBzdGFydCAxKSBlbmQpKSkKICAgOzsgd2h5IG5lZWQgcmVzPwoJKGxldCAocmVz
KQoJCShkb2xpc3QgKG92IGNvbW1lbnQtb3YtbGlzdCByZXMpCgkJCShvdmVybGF5LXB1dCBvdiAn
Y2F0ZWdvcnkgJ2hpZGUtY29tbWVudC1mYWNlKQoJCQkJCQkJCQkJCQkJCQkJCQkJCTsJCShvdmVy
bGF5LXB1dCBvdiAnY2xlYW51cCB0KQoJCQkob3ZlcmxheS1wdXQgb3YgJ2ludmlzaWJsZSB0KQoJ
CQkJCQkJCQkJCQkJCQkJCQkJCTsJCShvdmVybGF5LXB1dCBvdiAnZGlzcGxheSAiIikKCQkJKSkp


179 名前:デフォルトの名無しさん [2009/04/15(水) 20:16:39 ]
連投ごめんなさい、コード内容は、
コメントのfaceを見て、overlay作成し不可視にするlispです。

180 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 20:29:36 ]
ろくに読まずに発言するけど、
ループのところってnext-property-changeで検索じゃだめなん?




181 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 20:34:18 ]
>>175
elisp-manual-21-2.8.tar.gz を見てみたが、
keyword-symbols-constant-flag はすでになかった。


182 名前:177 mailto:sage [2009/04/15(水) 20:37:10 ]
>>180
ありがとございます、それ知らなかったので調べてみたら、
自分がやってることは非効率極まりないことまでわかりました。
ちょっと書き換えてみます。

183 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 20:37:21 ]
というよりkeyword-symbol自体がそんなに沢山使われてない。

184 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 20:43:06 ]
>>182
自分は使ったことないけど、
comment-search-forward と backward なんていう
もっとよさげな関数があったよ。

185 名前:デフォルトの名無しさん [2009/04/16(木) 23:21:38 ]
>>176
Emacs19 用 Elisp マニュには keyword で始まる名前自体がなくて : に関する記述もなさげだから
Emacs20 あたりで追加された新機能だと思われ
古い Emacs との互換性が不要なら使ってもいいんでないかな

186 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 16:03:55 ]
自分自身を remove-hook するような hook は邪道でしょうか?

具体的にはバッファの内容を別の形式で別ウィンドウに表示するアプリを作っています。
編集中の内容をリアルタイムに反映させるため post-command-hook で監視を行なおうと思っているのですが、
変換後の表示バッファが消されていた場合、自分自身で remove-hook して後始末をしたいなと・・・


187 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 16:44:34 ]
自分自身でremove-hook するって、子bufferの有無をずっと監視するってこと?

別ウィンドウで表示しているbufferのkill-buffer-hookに
buffer local で post-command-hookのhookをremove するものを
仕掛けておくって思いついたんだけど、どうかな?



188 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 17:12:30 ]
>>187
なるほど!
どう考えてもその方がスマートですよね。一々 buffer-live-p しなくて済みますし。
ありがとうございます。

189 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 01:48:31 ]
/bin/shとかだと``でコマンドの実行結果をテキストで得られるけど
同じことをelispでしたい場合どうすれば良い?
バッククォートはlispでは別な意味なのでアレだが
(print `date`)で"Fri Apr 24 01:47:15 JST 2009"のようなことは出来ないかな

190 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 01:55:51 ]
>>189ドゾー
(print (shell-command-to-string "date"))




191 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 23:42:19 ]
さんきゅー!

192 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 12:11:19 ]
buffer中で使った単語をリストアップするlispを書いてます。(想定する用途は、coding中にtypoした単語がないかチェックする)

単語とその出現回数のAssociationListを作って、新規に作ったbufferにinsertするようにしました。

できないのがありまして、
アルファベット順にsortするのが上手くできないです。(出現回数の方も同様にオプションでsortするようにしたいけど、後回しになってます)
(sort (mapcar '(lambda (x) (car x)) word-alist) 'string-lessp)
とsortしたら、sort対象のcar部分だけでなく、元のリストがsortされて、値がもどってくるにはどうしたらいいのでしょう?

(defun my-list-words ()
(interactive)
(save-excursion
(goto-char (point-min))
(let (word word-alist cu-word)
(while (re-search-forward "[-_a-zA-Z]+" nil t)
(setq word (buffer-substring (match-beginning 0) (match-end 0)))
(if (assoc word word-alist)
(setcdr (assoc word word-alist) (1+ (cdr (assoc word word-alist))))
(setq word-alist (cons (cons word 1) word-alist))))
;;;この下のS式が、上手く表現できない
(setq word-alist (sort (mapcar '(lambda (x) (car x)) word-alist) 'string-lessp))
(pop-to-buffer "*words list*")
(erase-buffer)
(mapc '(lambda (x) (insert (format "%s\n" x))) word-alist)
)))

他の点でもアドバイスがあれば、お願いします。










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

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

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