[表示 : 全て 最新50 1-99 101- 201- 301- 2ch.scのread.cgiへ]
Update time : 11/15 23:17 / Filesize : 88 KB / Number-of Response : 306
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

【GNU】Emacs Lisp 【Elisp】



1 名前:デフォルトの名無しさん mailto:sage [2013/10/20(日) 07:50:56.93 .net]
Emacs Lispのスレです。

- GNU Emacs Lisp Reference Manual
www.gnu.org/software/emacs/manual/elisp.html
- An Introduction to Programming in Emacs Lisp
www.gnu.org/software/emacs/manual/eintr.html
- Emacs Wiki の "EmacsLisp"
www.emacswiki.org/cgi-bin/wiki/EmacsLisp
- GNU Emacs
www.gnu.org/software/emacs/emacs.html

52 名前:デフォルトの名無しさん [2014/01/17(金) 20:04:09.16 .net]
俺です。

53 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 20:06:45.37 .net]
貴方でしたか・・

54 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 20:46:42.74 .net]
Ctrlキーって小指で押すのと小指の付け根で押すのと、どちらが正しい流儀なんだろう?
TECOエディタは小指の付け根で押したなんて記述を見た気がしてきた

55 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 20:51:58.59 .net]
emacs スレ向けだろうそれは流石に

56 名前:デフォルトの名無しさん [2014/01/21(火) 02:17:15.59 .net]
なんか話題ないの?

57 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 15:07:45.72 .net]
ない

58 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 16:39:38.15 .net]
www.youtube.com/watch?v=0EBTn_3DBYo

59 名前:デフォルトの名無しさん [2014/02/07(金) 22:36:50.85 .net]
ソチオリンピックはじまったぞ

60 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 13:17:24.90 .net]
xyzzy Lispにsetcar/setcdrがなかった
ググったらrplaca/rplacdだとわかった



61 名前:デフォルトの名無しさん [2014/02/11(火) 08:52:22.47 .net]
>>60
すごい!大発見だね

62 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 09:07:28.36 .net]
>>61
そうだね
君もいつか自分がクズだと気づけるといいね

63 名前:デフォルトの名無しさん [2014/02/11(火) 09:24:32.31 .net]
キーボードから絵が描けるように拡張したった 後は音鳴るようにするー

64 名前:デフォルトの名無しさん [2014/02/11(火) 10:07:29.09 .net]
>>63
ソース見せて〜

65 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 12:56:24.94 .net]
【入門】Common Lisp その10【質問よろず】スレから誘導されてきました。
Emacsで選択範囲部分の四則演算を行なえるようにしたいのですが、
どのように記述すればいけるでしょうか?
たとえば100*200+300*400を範囲選択すれば、140000を表示できるようにしたいです。

(defun my-calc-region (start end)
(interactive "r")
(if mark-active
(let ((str (buffer-substring start end)))
;;ここで選択範囲strの四則演算を行ないたい
(message str)
)))

66 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 12:58:36.81 .net]
>>65
calc-eval ってのがあるよ。
(setq str (calc-eval str)) で ok。
calc は無駄に多機能だから info 読んでみるといい。

67 名前:65 mailto:sage [2014/02/11(火) 17:47:10.31 .net]
>>66
できました。ありがとうございます。

68 名前:デフォルトの名無しさん [2014/02/12(水) 09:38:07.02 .net]
>>66
こういう親切な人がいるところが2ちゃんの凄いところ

69 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 17:48:01.21 .net]
ム板ってマイナー言語とかのスレに凄い優しい人一杯いるよね

70 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 17:52:46.28 .net]
仲間が少なくなってきてるから寂しいんだろう



71 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 23:04:33.78 .net]
Sublime Textが
Emacs LispやCommon Lispで拡張できるようになったらどうするんだろうか。

72 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 23:05:24.28 .net]
Sublime TextがEmacsenになる

73 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 23:11:54.46 .net]
EmacsにとってEmacs Lispは拡張言語じゃないんだよ
C言語で作られたEmacs Lispがあって、そのEmacs LispでEmacsが作られている

Sublime TextがEmacs Lispを拡張言語として使えるようになってもあまり魅力は無い
Emacs Lispで作られたSublime Textがあればちょっと考える

74 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 01:01:11.54 .net]
>>73
なんだなら全部C言語なんだね!

pythonもC言語だから
全部既にできたことなんだね!

C言語を経由すれば全て可能!

ということだよね!

75 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 01:10:17.62 .net]
そりゃそうだろ
機械語最強伝説みたいなもんだ

76 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 01:20:48.87 .net]
>>74
プログラムの再起動とか無しに自身を書き換える機能が欲しい
コンパイルが必須な言語だとちょっと使い勝手が悪いかな
メモリ管理も自動でやってほしい

77 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 01:23:31.49 .net]
elisp も ffi が実装されたら素敵なんだが

78 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 01:27:09.81 .net]
Pymacsとかそれっぽい

79 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 02:09:03.65 .net]
pythonはインデントが嫌いなんだよなー、構文で文ブロック表さないようにしている所がどうしてもなじめない。
なのでいまだにEmacsラブラブなんであるよ。

あと基本の削除がKillRing無いと生きていけない

80 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 05:24:21.72 .net]
俺は逆
Pythonのインデントが美しい、見やすい。ブロック指示語無しでの表現がスマート
でも、Lisp使いになると東大女とやり放題と聞いたのでLispの勉強を始めた



81 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 07:52:22.02 .net]
>>71
理想的だな。
Emacsを使う理由が薄れる。
ここのスレの住人はLispで拡張できるからEmacsを使うって人が多いと思う。
目的がLispであってEmacsは手段でしかない。
できれば素のlisp,common lispが使えれば理想的だな。

82 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 07:54:13.80 .net]
俺はxyzzyだけど

83 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 08:48:50.79 .net]
>>82
だけど、何?

84 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 09:57:01.02 .net]
xyzzy はより Common Lisp っぽいんじゃなかったっけ
emacs lisp は lisp 好きにはむしろ

85 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 11:38:56.40 .net]
Common Lispで実装されたEmacsみたいなエディタあるよ。
でもEmacsのように便利に使おうと思うと、自分でCommon Lispをバリバリ書かないといけない。

86 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 12:43:10.37 .net]
あったとしてもEmacsやVimくらい世界中からHackされようじゃないとねぇ。
zyzzyなんて海外じゃ誰も知らないだろうし。

87 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 12:45:46.31 .net]
xyzzy さり気なく github で開発継続してたんだなあ

88 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 17:12:56.16 .net]
>>86
お馬鹿丸出し

89 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 02:00:59.87 .net]
>>88
煽るよりもこうすれば良いっていう提案をするのが吉だと信じてる。

>>80
構文からインデントを生成してくれる<言語名>.elにおんぶにだっこになるとPythonが辛いんよ。

90 名前:デフォルトの名無しさん [2014/02/23(日) 18:39:31.98 .net]
すいません。Emacs Part 45から来ました。
質問させてください。

一定文字数、右にカーソルを移動させる方法はありますか。
「矩形、編集」などで調べましたがわかりませんでした。
図1)のテキストがあったときに、右側に対訳のような形で編集したいです。

図1)
あいうえ   
かきくけこ
さしす
たちつてとなにぬねの

図2)
あいうえ        aiue
かきくけこ       kakikukeko
さしす         <-ここにカーソルを移動させ段組みで編集したい
たちつてとなにぬねの

よろしくお願いします。



91 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 21:16:16.11 .net]
お前ら、久々の仕事だぞ。

92 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 21:20:02.14 .net]
>>90
forward-char

93 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 22:08:08.90 .net]
関数組めばいいのに
それにショートカットきーを割り当てる

94 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 22:09:51.03 .net]
> 「矩形、編集」などで調べましたがわかりませんでした。
もっと深く調べろ

95 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 22:12:44.44 .net]
矩形、編集で調べている時点であかん
もともと、そんな関数あるわけない。
カーソル制御で知らべろ
で、関数作れ(簡単にできる)

96 名前:90のなりすまし mailto:sage [2014/02/23(日) 22:49:00.93 .net]
>>91
てめーは何もやらないのかよ、使えねぇなカス
>>92
そんな関数1つだけで出来る訳ねーだろ、氏ね
>>93
抽象的なことだけ書き込んで悦に入ってんじゃねーよ
>>94
煽る以外に芸が無いのかよ、無脳
>>95
だったら、その関数をてめーが組んで、ここに貼り付けろ

ジョークだから本気に受け取らずに藁ってね

97 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 03:36:47.58 .net]
今だにemacsとか使ってるバカいるのか。

Common Lispでなければ
意味ない。

98 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 03:54:33.31 .net]
そうかな?
俺自身はCommon Lisp系のxyzzyを使っているが
emacsはemacsで良さがある

99 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 09:22:57.05 .net]
>>97
(require `cl)

100 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 15:01:22.07 .net]
>>90
(info "(emacs) Two-Column")

かな。

<F2> s or C-x 6 s

で、split して

<F2> 1 or C-x 6 1

で、merge

C-x C-n set-goal-column

という、手もある。

これだと、行末に空白が足りない時そのcolumn に飛んでくれないから、
こんな関数を、作っておいて、適当な Key に bind しておくといいかも

(defun fill-to-goal-column ()
""
(interactive)
(when goal-column
(end-of-line)
(let ((len (- goal-column (current-column))))
(when (> len 0)
(insert (make-string len ?\ ))))))

;; two-column mode の懐かしさに、久しぶりの書き込みでござる。



101 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 08:13:00.51 .net]
質問です。
実行後、空白行で区切った段落を1行で省略表示させて、
カーソル行が省略表示されている段落と同じ範囲内に来た場合に
展開してくれるというものが作りたいのですが、可能でしょうか?

【実行前】
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト

□←カーソル位置
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト

【実行後】
テキストテキストテキストテキストテキストテキスト...

□テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト

102 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 08:23:12.92 .net]
>>101
出来るでしょう。
テキストプロパティやオーバーレイには
表示内容だけ一時的に変更するってのと、カーソルが上に乗った時/いなくなった時に任意の関数を呼び出すって属性があるから
それを設定してやればいいんじゃないかな。

hs-minor-mode あたりを設定を変えつつ使うのが楽でいいんじゃないでしょうか。
隠す区切りを改行が連続している領域に変更して、
隠す処理を行ってる関数あたりに point-entered/point-left で表示をトグルする処理を追加してやると。

103 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 10:46:01.33 .net]
hs-set-up-overlay に出入りした時に隠したり表示したりするプロパティ追加する関数せっていすりゃいいんじゃね。

104 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 21:33:23.49 .net]
>>103
具体的にどのようにすればよろしいでしょうか?

105 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 21:48:51.04 .net]
まずorg.elを開きます

106 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 21:56:23.12 .net]
point-entered は残念ながら overlay では機能しないらしいから
気合入れて text-property に追加してまわるしかないんじゃないかなあ
post-command-hook でいちいちチェックして hs-hide-block/hs-show-block もいいかもね

107 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 07:20:52.21 .net]
一度elispの拡張の楽しさを覚えると、他のエディタに移れない

108 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 07:48:40.35 .net]
ひょえー
固まっていくんだ

109 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 16:22:33.05 .net]
>>107
vimやsublimetextはpythonで拡張できるけどそれと比較してどうよ?

110 名前:デフォルトの名無しさん [2014/03/10(月) 16:28:12.11 .net]
Pymacs動くから普通にPythonでも拡張できるよ



111 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 20:38:09.46 .net]
Lispで拡張子できるのに、ナニが悲しゅうてパイソンつかうんや?
Lisp使えへんからか?
ひょっとしてナニがうずくんか?
「リストは飽きた、パイもませろ」
エッヂね、あなた

112 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 20:39:25.89 .net]
リスト × L
リスト ○ R

113 名前:デフォルトの名無しさん [2014/03/25(火) 18:27:18.16 ID:Ye296TBS.net]
なんか話題ない?

114 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 23:27:38.28 ID:LML8JeED.net]
>>109
Vim ってpythonで拡張できるん?

115 名前:デフォルトの名無しさん mailto:sage [2014/03/26(水) 23:31:15.83 ID:6UDaHe6u.net]
emacsは遅めだな

116 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 00:13:29.55 ID:/J3FM59H.net]
>>114
python だけじゃなく ruby とか lua でも拡張出来るよ
ただしコンパイル時に if_python とか if_lua とか組み込まないとだめだけど
オリジナルの Vim scriptは海外ではウケが悪いんだとさ

117 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 02:09:44.05 ID:FdT+1cD1.net]
24.4から (< a b c …) できるって。

118 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 13:12:09.80 ID:rnycJJoD.net]
今までできなかったのかよ

119 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 13:16:52.73 ID:qdz8LPjI.net]
定義すれば済むことだな

120 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 21:55:07.06 ID:4xfA40Vl.net]
>>116
すげぇ!
Sublime Textなんていらなかったんや!



121 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 22:08:59.03 ID:PIEAAVmi.net]
>>119
vimmerはエディタの拡張のために、好きな言語を「選択」できる。
しかし、lisperはエディタの拡張のために、好きに言語を「拡張」できる。

122 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 22:37:18.61 ID:DQUVbJjr.net]
そういう意味ではリーダーマクロのない elisp はいまいち

123 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 22:44:26.98 ID:PIEAAVmi.net]
>>122
Emacs Lisp にリーダーマクロを実装してみた
dev.ariel-networks.com/Members/matsuyama/implement-emacs-lisp-reader-macro/

124 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 08:03:24.78 ID:xiFjVo8G.net]
Latexのコードの特殊文字(?)を取り除いて文字だけにしたい
例えば

This figure ¥ref{fig:some} show someone.

This figure 321 show someone.
に変換したい
どんな正規表現置換すればいいでしょうか

125 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 06:14:21.54 ID:hZWbnKFL.net]
パッケージが使えるようになってから
ライブラリ関係が整理されてきたね
www.wilfred.me.uk/blog/2013/03/31/essential-elisp-libraries/

126 名前:デフォルトの名無しさん mailto:sage [2014/05/05(月) 22:14:00.15 ID:rH4KCYSG.net]
>>124
321はどっから出てきた?

127 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 04:12:16.26 ID:gIosECTp.net]
あああ

128 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 20:38:27.07 ID:APfGLDmZ.net]
あああじゃねえよ321は決め打ち?

129 名前:デフォルトの名無しさん [2014/05/29(木) 22:57:32.74 ID:lRFHqZI8.net]
iii

130 名前:みつを mailto:sage [2014/06/04(水) 19:55:43.06 ID:1mti/jFC.net]
>>129
iiiじゃねえよ。決め打ちね。
ちいさいことからこつこつやっていくしかないよなぁ
(replace-regexp-in-string "[\\]ref\{.*\}" "321" "This figure \\ref{fig:some} show someone.")

そもそも\refを先に\\refにしないとイカンかもな。\rになってまうもんなぁ



131 名前:みつを mailto:sage [2014/06/04(水) 19:57:17.25 ID:1mti/jFC.net]
>>125
パッケージってMELPAとかいうやつ?
ずっと横ばいだな。これは普及するのか
www.modulecounts.com/

132 名前:デフォルトの名無しさん mailto:sage [2014/06/04(水) 21:16:48.17 ID:40jNRALG.net]
むしろそれが今の Emacs の成長率みたいなもんなんじゃないのかな

133 名前:デフォルトの名無しさん mailto:sage [2014/06/13(金) 21:28:22.09 ID:9IC9OAVr.net]
あああ
iii
uuu

134 名前:デフォルトの名無しさん [2014/09/10(水) 14:59:47.34 ID:TJ7Vp+Yk.net]
最近なんか話題ある?

135 名前:デフォルトの名無しさん mailto:sage [2014/09/10(水) 23:18:57.46 ID:7cU3np3J.net]
きちさんが元気になった。

136 名前:デフォルトの名無しさん mailto:sage [2014/09/12(金) 06:48:41.92 ID:pwXLQ7qz.net]
カーソル位置の単語または選択範囲の文字をisearcの検索対象にする
nicolas-petton.fr/blog/isearch-thing.html

137 名前:デフォルトの名無しさん [2014/09/13(土) 00:21:10.93 ID:3yBdenhy.net]
>>135
どんなふうに?

138 名前:デフォルトの名無しさん [2014/10/12(日) 21:42:50.50 ID:QLTYsLQy.net]
Ymacs

139 名前:デフォルトの名無しさん mailto:sage [2014/10/16(木) 00:29:06.56 ID:9sgE7fDV.net]
windows の emacs で find-name-dired をやりたかったんだけど、cmd の find は挙動が違うし、外部から find.exe をもってくるのも難しいしということで、elisp で find-name-dired っぽいものを自作した。

それは、条件に合致したものを cons で繋げていく原始的なものだったんだけど、その後、「リストよりもベクトルの方が参照が速い」ことや、mapcar 関数の存在を知って、自作 find を書き換えた。

修正の結果、find に要する時間は長くなってしまった。
その後、remove-if なる関数があることをしって、先のコードの mapcar を remove-if にすげ替えた。
結果さらに遅くなった。

やっぱりコンスセル単位で操作していくのが一番速いのですか?

140 名前:デフォルトの名無しさん mailto:sage [2014/10/16(木) 09:04:05.88 ID:ML6o1wZC.net]
> やっぱりコンスセル単位で操作していくのが一番速いのですか?

ベクトルは参照は早いけど追加操作は遅い。リストはその逆と思っておけばいい。
ケースバイケースだからソース公開するといいよ。



141 名前:デフォルトの名無しさん mailto:sage [2014/10/16(木) 09:56:15.97 ID:9sgE7fDV.net]
>>140
ありがとうございます。まず、最初に作ったコードです。最後の reverse は無意味でした。

;; M-x myfind

(defvar myfind-ffile-map (make-sparse-keymap))
(define-key myfind-ffile-map [return]
(lambda ()
(interactive)
(find-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
(define-key myfind-ffile-map "\C-m"
(lambda ()
(interactive)
(find-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
(define-key myfind-ffile-map "f"
(lambda ()
(interactive)
(find-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
(define-key myfind-ffile-map "v"
(lambda ()
(interactive)
(view-file (buffer-substring
(line-beginning-position)
(line-end-position)))))

;; 続きます

142 名前:デフォルトの名無しさん mailto:sage [2014/10/16(木) 10:00:45.11 ID:9sgE7fDV.net]
(defun myfind (dir pattern)
"find by elisp"
(interactive
"DDirectory: \nspattern: ")
;; define variable
(let ((case-fold-search t)
(myfind-temp (sort (myfind-store-files dir pattern)
'string<)))
;; make buffer
(let ((temp-buffer-show-function 'switch-to-buffer))
(with-output-to-temp-buffer "*Myfind*"
(set-buffer "*Myfind*")
(font-lock-mode 0)
(setq buffer-read-only nil)
(princ (format "%d matches for \"%s\" in dir: %s\n"
(length myfind-temp) pattern dir))
(dolist (temp myfind-temp)
(princ (concat "\n" temp))
(goto-char (1- (point-max)))
(put-text-property
(line-beginning-position)
(line-end-position) 'face 'underline)
(put-text-property
(line-beginning-position)
(line-end-position) 'keymap myfind-ffile-map)
(when (file-directory-p temp)
(put-text-property
(line-beginning-position)
(line-end-position) 'face 'link))
(goto-char (point-max)))
(view-mode t)))))

143 名前:デフォルトの名無しさん mailto:sage [2014/10/16(木) 10:06:43.79 ID:9sgE7fDV.net]
(defun myfind-dir (input-list input-dir-box)
(let (dir-box)
(dolist (x input-list)
(when (file-directory-p x)
(unless (equal "." (substring x -1))
(if dir-box
(setq dir-box (cons x dir-box))
(setq dir-box (cons x input-dir-box))))))
(if dir-box
(setq dir-box (reverse dir-box))
input-dir-box)))
(defun myfind-store (input-list input-store-box pattern)
(let ((store-box)
(case-fold-search t))
(dolist (x input-list)
(unless (equal "." (substring x -1))
(when (string-match pattern (file-name-nondirectory x))
(if store-box
(setq store-box (cons x store-box))
(setq store-box (cons x input-store-box))))))
(if store-box
store-box input-store-box)))
(defun myfind-store-files (dir pattern)
(let ((tmp-files (directory-files dir t)))
(let ((dir-box (reverse (myfind-dir tmp-files nil))) (store-box (myfind-store tmp-files nil pattern)) (dir-temp-box))
(while (> (length dir-box) 0)
(setq dir-temp-box ())
(dolist (x dir-box)
(setq store-box (myfind-store (directory-files x t) store-box pattern))
(setq dir-temp-box (myfind-dir (directory-files x t) dir-temp-box)))
(setq dir-box (reverse dir-temp-box)))
(reverse store-box))))

144 名前:デフォルトの名無しさん mailto:sage [2014/10/16(木) 10:11:33.46 ID:9sgE7fDV.net]
連投すみません。どこか外部にアップして、url を貼るべきでした。以上に対して、新しいコードでは、上記の関数 myfind-dir, myfind-store, myfind-store-files を以下に差し替えました。

(defun myfind-store-files (dir pattern)
(let* ((tmp-files (directory-files dir t))
(dir-box)
(dir-store)
(store-box (vconcat tmp-files))
(i 0))
(setq dir-box (remove-if '(lambda (x)
(or (not (file-directory-p x))
(equal "." (substring x -1))))
(vconcat tmp-files)))
(while (> (length dir-box) 0)
(while (< i (length dir-box))
(setq store-box (vconcat store-box (directory-files
(aref dir-box i) t)))
(setq dir-store (vconcat
dir-store
(remove-if
'(lambda (x)
(or (not (file-directory-p x))
(equal "." (substring x -1))))
(vconcat (directory-files (aref dir-box i) t)))))
(setq i (1+ i)))
(setq i 0)
(setq dir-box dir-store)
(setq dir-store nil))
(append (remove-if '(lambda (x)
(or (equal "." (substring x -1))
(not (string-match
pattern (file-name-nondirectory x)))))
(delete nil store-box)) nil)))

145 名前:デフォルトの名無しさん mailto:sage [2014/10/16(木) 10:26:10.93 ID:ML6o1wZC.net]
いや、github とかにだね。。

146 名前:デフォルトの名無しさん mailto:sage [2014/10/16(木) 10:42:49.66 ID:ML6o1wZC.net]
vconcat して新しいベクトルをいっぱい生成してるけど、それぐらいならリス
トをそのまま使った方がましだろうね。走査する速度が速くなるよりもベクト
ルを生成するコストの方が高い気はする。

それから mapcar は C の関数だからベクトルでもリストでも気にするほどのパ
フォーマンスの違いはない。elisp でパフォーマンスを気にしてプログラミン
グするときは C で書いてあるか否かも意識するとよいね。

(let ((vec (make-vector 1000 nil)))
(benchmark 100
`(mapcar 'identity vec)))

(let ((lis (make-list 1000 nil)))
(benchmark 100
`(mapcar 'identity lis)))

ざっと見る限りひたすらプログラミング初心者なのでとりあえずパフォーマン
スなんか気にしないで「リスト」を使って富豪的にどんどん書いてく方がいい
よ。

147 名前:ID:9sgE7fDV mailto:sage [2014/10/16(木) 11:15:16.59 ID:DN4MHL3l.net]
>>146
コメントありがとうございます。
なるほど、パフォーマンスはかわらないのか。

elisp でいろいろ作ってみて、プログラミングを学んでいきたいと思います。
スレを汚してしまい、すみません。

148 名前:ID:9sgE7fDV mailto:sage [2014/10/28(火) 15:57:32.52 ID:XuuTzEP8.net]
elisp による find を書き直しました。

https://gist.github.com/anonymous/e0d440b0be2ab4106390

M-x efind
で、ディレクトリとパターンをいれると、
指定したディレクトリ以下にあるファイルもしくはディレクトリのうち、
パターンにマッチするものを列挙します。

下線がひいてあるところは、enter を押すとリンクできます。

「ここは普通こう書くよ」など、コメントをいただけないでしょうか。

149 名前:デフォルトの名無しさん mailto:sage [2014/10/28(火) 16:53:12.91 ID:BaOL+HSr.net]
>>148
普通のdiredじゃ駄目な理由がわからん

150 名前:デフォルトの名無しさん mailto:sage [2014/10/28(火) 20:47:19.78 ID:ABQvesFS.net]
>>149
外部の find を呼ぶ find-name-dired などが、windows ではデフォルトでは使えないので作りました。

あれ、もしかして使えるのかも。もう少し調べてみます。



151 名前:デフォルトの名無しさん mailto:sage [2014/10/30(木) 22:47:05.96 ID:ZUGQOqFu.net]
久々に来たけどなんかもりあがってるね。

152 名前:デフォルトの名無しさん [2014/11/16(日) 21:37:23.05 ID:ifD0nPmW.net]
>>148
君、すごうぃーね〜






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

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

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