【GNU】Emacs Lisp 【Elisp】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Emacs Lispのスレです。

- GNU Emacs Lisp Reference Manual
http://www.gnu.org/software/emacs/manual/elisp.html
- An Introduction to Programming in Emacs Lisp
http://www.gnu.org/software/emacs/manual/eintr.html
- Emacs Wiki の "EmacsLisp"
http://www.emacswiki.org/cgi-bin/wiki/EmacsLisp
- GNU Emacs
http://www.gnu.org/software/emacs/emacs.html
2デフォルトの名無しさん:2013/10/20(日) 23:11:55.61
こっちでどーぞー
Emacs Part 43
http://toro.2ch.net/test/read.cgi/unix/1370754332/

Windows 依存部分ならここで
NTEmacs スレッド 3
http://anago.2ch.net/test/read.cgi/software/1325573999/

MAC関係の板にもあるのかもしれないけれど知らない
3デフォルトの名無しさん:2013/10/20(日) 23:58:05.57
お薦めの書籍は?
4デフォルトの名無しさん:2013/10/21(月) 08:41:04.63
るびきち本
5デフォルトの名無しさん:2013/10/21(月) 12:51:30.26
Emacs Lispテクニックバイブル(るびきち)
http://www.amazon.co.jp/dp/4774148970
6デフォルトの名無しさん:2013/10/21(月) 13:19:32.90
やさしいEmacs‐Lisp講座(広瀬 雄二)
http://www.amazon.co.jp/dp/4877832718/
7デフォルトの名無しさん:2013/10/21(月) 13:24:59.87
Emacs Lispプログラミング入門(Robert J.Chassell)
http://www.amazon.co.jp/dp/4756118054/
8デフォルトの名無しさん:2013/10/21(月) 16:49:56.02
スクリプトの基本

EmacsをEmacs Lispインタプリタとして起動するには--scriptオプションを指定します。

$ emacs --script test.el

例:
hello.el:
(princ "Hello, World!\n")
実行
$ emacs --script hello.el
Hello, World!
9デフォルトの名無しさん:2013/10/21(月) 21:21:37.23
10デフォルトの名無しさん:2013/11/02(土) 13:54:03.16
* ワンポイント
**タイマー

(run-with-timer 時間 繰り返し 関数)
11デフォルトの名無しさん:2013/11/05(火) 22:09:23.05
リストを処理するためのプログラミング言語
- Lisp
リストを処理するためのエディタ
- Emacs
12デフォルトの名無しさん:2013/11/09(土) 22:58:43.14
Emacs Lisp 3 [981res]
http://toro.2ch.net/test/read.cgi/tech/1191875993
http://unkar.org/r/tech/1191875993
1 2007/10/09(火) 05:39:53
981 2012/09/13(木) 19:32:44.10

Emacs Lisp 4 [6res]
http://toro.2ch.net/test/read.cgi/tech/1357029188
http://unkar.org/r/tech/1357029188
1 2013/01/01(火) 17:33:08.97
6 2013/01/21(月) 04:55:20.98
13デフォルトの名無しさん:2013/11/09(土) 23:02:02.86
前スレが今年早々に保守失敗してんのね
lispスレに統合するという話すら出ないうちに
>>2みたいな無知が偉そうに誘導している始末
全く人がいなくなってしまった様子

るびきちはすっかり教祖様なのに
おまえらときたらどこいったんだ・・・
14デフォルトの名無しさん:2013/11/09(土) 23:11:12.18
そういえばこんなスレあったな
>>12見るまで前スレあること忘れてた
15デフォルトの名無しさん:2013/11/11(月) 10:37:09.91
質問です。

-------------------------------------
310 <- 表示されている 最上段
311
312
313
314
315
316 <- 今ここ
317
.
.
.
.
350
-------------------------------------

表示されている最上段の行番号を知りたいのですが
どうすればいいでしょうか?
16デフォルトの名無しさん:2013/11/11(月) 19:53:18.77
>>15
(line-number-at-pos (window-start))
17デフォルトの名無しさん:2013/11/11(月) 22:47:59.75
>>16
ありがとうございます!
18デフォルトの名無しさん:2013/11/11(月) 23:45:46.74
ニュー速VIP爆撃中の2ch定期書き込みツールqsocks
lispで書かれたこのツールを誰か改造してください。
他板でも使えるようにしてください。
お願いします。m(ーー)m

qsocks
https://anonfiles.com/file/3fcd3edbf6000ecf37b61e8af186c453

qsocksソースコード
http://codepad.org/uyuG7Ovg
19デフォルトの名無しさん:2013/11/15(金) 15:42:25.09
Emacs Lispはなんでローカル関数ないのん?
20デフォルトの名無しさん:2013/11/15(金) 18:54:42.44
>>19
lambda使って
21デフォルトの名無しさん:2013/11/18(月) 13:14:39.57
elisperっていそうでいないんだけど、いったいどこにいるの?
22デフォルトの名無しさん:2013/11/18(月) 16:15:26.64
地球上では3分間しかその能力を発揮できないからな
23デフォルトの名無しさん:2013/11/18(月) 22:02:40.71
>>22
それってUltra-C のユーザじゃね?
24デフォルトの名無しさん:2013/11/24(日) 00:09:52.10
>>21
elispなんて、今もうunix関連の企業で職人しか触らないんじゃない?
25デフォルトの名無しさん:2013/11/24(日) 00:13:08.19
HHKのUS配列なんて、そこらの電器店で買えないし、
Swapするのも面倒だし、皆、Vimに移ったんじゃない?
26デフォルトの名無しさん:2013/11/24(日) 03:47:10.26
vimに移るなんて何年前の話だよ?
移り先はsublimetextあたり。

でもEmacsはある一定のユーザは残る。その理由がlispで拡張できる点だろうな。
27デフォルトの名無しさん:2013/11/24(日) 08:28:32.93
Emacs 対 Vim の宗教戦争は収拾がつかなくなる
28デフォルトの名無しさん:2013/11/24(日) 08:49:04.91
>>27
だが、このスレはその戦争には無縁だな。
elispのスレなのだから。
29デフォルトの名無しさん:2013/11/24(日) 11:56:54.55
エディタに関するスレではなく、
単なるいちプログラミング言語についての話。
あえていえば、elispをコマンドラインから起動させる前提ならvimmerがこのスレに参加してくれても構わない。

あくまでも、このスレはLispの一方言であるelispというプログラミング言語についてのスレなのだから。
30デフォルトの名無しさん:2013/11/24(日) 15:35:08.97
こういうエディタを乗り換える人って、ろくすっぽマクロも書いてなさそう
31デフォルトの名無しさん:2013/11/24(日) 15:39:23.72
JDEEのinstallに何時間もかけたものの、1、2ヶ月たっても使いこなせなかった
甘酸っぱい経験からすれば、javaはeclipseで良い
32デフォルトの名無しさん:2013/11/24(日) 15:45:28.88
あんなにー♪いっしょぉ、だぁったぁのにぃー♬
ゆぅぐれぇはぁー、もぅーちぃがぁーういろぉー♫
33デフォルトの名無しさん:2013/11/24(日) 16:04:23.53
termの中でvi使ってます♪
34デフォルトの名無しさん:2013/11/24(日) 18:38:31.87
>>30
そのマクロはスレチ
ポールグレアムのマクロならこのスレであってる。
35デフォルトの名無しさん:2013/12/01(日) 20:00:51.02
あなたがLispを無視することができない理由
http://blog.8arrow.org/entry/2013/12/01/120712
36デフォルトの名無しさん:2013/12/11(水) 21:39:24.67
(let ((ningen '(:name "tarou" :age 20)))
(get-value :name ningen)) ; tarou

こんなことがしたいのですがget-valueのような関数はありますか?
37デフォルトの名無しさん:2013/12/11(水) 21:51:07.33
それだとそのまんま plist-get が使える
(plist-get ningen :name) ; => tarou

すごい巨大になるなら hash もいいかもね。
38デフォルトの名無しさん:2013/12/11(水) 22:27:05.81
>>37
リスト コロン なんかで検索しても出てこなかったので困ってました。
ありがとうございます!
39デフォルトの名無しさん:2013/12/21(土) 08:17:51.09
何らかのキーを押した時点で実行されて
押したキー情報を取得できるようにしたいのですが、
可能でしょうか?

"C-a" "C-t" "0" "q" "w" "j" "j" "s" の様に
キーを押した時点でなんのキーを押したかを過去数回分取得したいです。

"C-a" "C-t"
"q" "w"
"j" "j" "s"
でそれぞれコマンド実行
のようなことがしたいです。
40デフォルトの名無しさん:2013/12/21(土) 09:48:34.64
>>39
何かの入力があった後に実行する → post-command-hook
何か文字が入力された後に実行する → after-self-insert-hook

直前のキー入力 → last-input-event
過去のキー入力リスト → (recent-keys)

直前に何が入力されてたかで挙動を変える系の拡張だと key-combo ってのがあったけど
やりたいのはそういうのかね?
41デフォルトの名無しさん:2013/12/21(土) 09:50:13.60
嘘書いてしまった
×after-self-insert-hook
○post-self-insert-hook
42デフォルトの名無しさん:2013/12/21(土) 09:51:47.40
あとこれ結構まとまってるな
Emacsでキーボードイベントを扱う方法まとめ
http://d.hatena.ne.jp/uk-ar/20120213/1329138385
43デフォルトの名無しさん:2013/12/21(土) 15:14:36.76
>40-42
ありがとうございます。
key-comboで大方は解決しそうです。

key-comboでできないのは触った限り
・C-a+C-t のような違うショートカットの組み合わせと
・C-a+a のようなショートカットとキー組み合わせ
だと思ったんですが、上記も書き方によっては可能ですか?

できなければ、
post-command-hook
(recent-keys)
single-key-description
らへんでいじって試してみようと思います。

あと、
key-comboで
・◯◯◯モードで(region-active-p)がtの状態
・◯◯◯モードで(region-active-p)がnilの状態
のようにそれぞれhookを分けたいのですが、
どのように書けばよいでしょうか?
44デフォルトの名無しさん:2013/12/21(土) 17:22:18.88
key-combo はあくまで self-insert-key で入力される文字に特化したものっぽいね。
特にフックとか用意されていないみたいだから
リージョンの状態とかに応じて挙動を変えたいなんて場合はソースに直接手を入れるか
advice でも設定するしかないんでないかな。

他にも
・同じキーを連続入力した時に(文字ではなく)別なコマンドを割り当てる sequential-command
http://d.hatena.ne.jp/rubikitch/20090219/sequential_command
・プリフィクスキーの入力を一回でOKにする smartrep
http://sheephead.homelinux.org/2011/12/19/6930/
・文字キーの同時押しにキーバインドする key-chord
http://www.emacswiki.org/emacs/KeyChord

とか色々キー入力を見るのはあるみたいだけど、希望する動作のものはなさそう。
もっとも作る時の参考ぐらいにはなるかもしれない。
何か他にもあったような気もするんだけど記憶が定かでないな・・

C-a + C-t でってのは、C-a C-t に何か直接割り当てるんじゃなく
・普段の C-t は transpose-chars
・C-a は何も変わらず beginning-of-line
・C-a した後に C-t したら transpose-chars ではない何か別の挙動をしたい

ってことだよね?
45デフォルトの名無しさん:2013/12/24(火) 06:05:38.74
>44
ありがとうございます。
emacs導入初期に全てのキー設定をいじって、self-insert-commandでない書き方にしてしまったため、一部入力支援系が試せず、キー設定を見直しているところです。
入力支援系を使えるようにするためには英数記号だけkey-comboに移せば改善されそうです。
C-a + C-t を例にだしたのは特に意味はなかったですが、そういう感じです。
sequential-command的なことは自分でやれるようにはしてます。
文字の同時入力は微妙に使いづらいのでやめました。
勉強がてら自分でいろいろ書いてみようと思います。
46デフォルトの名無しさん:2013/12/26(木) 21:05:55.80
>>45
なんかこれが一番目的に近づいてる気がする
https://github.com/yuutayamada/mykie-el

キーをおしたときに条件に応じて挙動を変えるって拡張だけど
条件は自分で追加できるから、あるキーを押したあとだとこの挙動、なんてのは自在に作れると思う
リージョンがどうのとかも標準で用意されてるし。
47デフォルトの名無しさん:2013/12/29(日) 23:55:09.33
>>46
いいですね。一番しっくりきたのでこれにしました。
結構いじりやすいので
"C-j f" "f C-j" "YYY" "qj"
なども反応するようにできて満足です。

ただアルファベットも設定してしまうとself-insert-commandではなくなるのでタイピング時にauto-commandが実行されないのが残念ですが、仕方ないですかね。
48デフォルトの名無しさん:2013/12/30(月) 00:05:41.35
使ってないから詳しい事はわからないけど、
(mkie:set-keys 'with-self-key ... ) で設定したのに
self-insert-command に関する何かがおかしくなるんだとすると
仕様に漏れがあるのかもしれないね。
49デフォルトの名無しさん:2013/12/30(月) 01:51:31.65
>>48
読み落とししてました。。。
(mykie:global-set-key …
で書いてました。
(mkie:set-keys 'with-self-key …
ならいけました!! ありがとうございます。
50デフォルトの名無しさん:2014/01/17(金) 19:22:13.14
どういたしまして。
51デフォルトの名無しさん:2014/01/17(金) 19:58:14.55
いやいや誰だよw
52デフォルトの名無しさん:2014/01/17(金) 20:04:09.16
俺です。
53デフォルトの名無しさん:2014/01/17(金) 20:06:45.37
貴方でしたか・・
54デフォルトの名無しさん:2014/01/17(金) 20:46:42.74
Ctrlキーって小指で押すのと小指の付け根で押すのと、どちらが正しい流儀なんだろう?
TECOエディタは小指の付け根で押したなんて記述を見た気がしてきた
55デフォルトの名無しさん:2014/01/17(金) 20:51:58.59
emacs スレ向けだろうそれは流石に
56デフォルトの名無しさん:2014/01/21(火) 02:17:15.59
なんか話題ないの?
57デフォルトの名無しさん:2014/01/25(土) 15:07:45.72
ない
58デフォルトの名無しさん:2014/01/25(土) 16:39:38.15
59デフォルトの名無しさん:2014/02/07(金) 22:36:50.85
ソチオリンピックはじまったぞ
60デフォルトの名無しさん:2014/02/08(土) 13:17:24.90
xyzzy Lispにsetcar/setcdrがなかった
ググったらrplaca/rplacdだとわかった
61デフォルトの名無しさん:2014/02/11(火) 08:52:22.47
>>60
すごい!大発見だね
62デフォルトの名無しさん:2014/02/11(火) 09:07:28.36
>>61
そうだね
君もいつか自分がクズだと気づけるといいね
63デフォルトの名無しさん:2014/02/11(火) 09:24:32.31
キーボードから絵が描けるように拡張したった 後は音鳴るようにするー
64デフォルトの名無しさん:2014/02/11(火) 10:07:29.09
>>63
ソース見せて〜
65デフォルトの名無しさん:2014/02/11(火) 12:56:24.94
【入門】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デフォルトの名無しさん:2014/02/11(火) 12:58:36.81
>>65
calc-eval ってのがあるよ。
(setq str (calc-eval str)) で ok。
calc は無駄に多機能だから info 読んでみるといい。
6765:2014/02/11(火) 17:47:10.31
>>66
できました。ありがとうございます。
68デフォルトの名無しさん:2014/02/12(水) 09:38:07.02
>>66
こういう親切な人がいるところが2ちゃんの凄いところ
69デフォルトの名無しさん:2014/02/12(水) 17:48:01.21
ム板ってマイナー言語とかのスレに凄い優しい人一杯いるよね
70デフォルトの名無しさん:2014/02/12(水) 17:52:46.28
仲間が少なくなってきてるから寂しいんだろう
71デフォルトの名無しさん:2014/02/12(水) 23:04:33.78
Sublime Textが
Emacs LispやCommon Lispで拡張できるようになったらどうするんだろうか。
72デフォルトの名無しさん:2014/02/12(水) 23:05:24.28
Sublime TextがEmacsenになる
73デフォルトの名無しさん:2014/02/12(水) 23:11:54.46
EmacsにとってEmacs Lispは拡張言語じゃないんだよ
C言語で作られたEmacs Lispがあって、そのEmacs LispでEmacsが作られている

Sublime TextがEmacs Lispを拡張言語として使えるようになってもあまり魅力は無い
Emacs Lispで作られたSublime Textがあればちょっと考える
74デフォルトの名無しさん:2014/02/13(木) 01:01:11.54
>>73
なんだなら全部C言語なんだね!

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

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

ということだよね!
75デフォルトの名無しさん:2014/02/13(木) 01:10:17.62
そりゃそうだろ
機械語最強伝説みたいなもんだ
76デフォルトの名無しさん:2014/02/13(木) 01:20:48.87
>>74
プログラムの再起動とか無しに自身を書き換える機能が欲しい
コンパイルが必須な言語だとちょっと使い勝手が悪いかな
メモリ管理も自動でやってほしい
77デフォルトの名無しさん:2014/02/13(木) 01:23:31.49
elisp も ffi が実装されたら素敵なんだが
78デフォルトの名無しさん:2014/02/13(木) 01:27:09.81
Pymacsとかそれっぽい
79デフォルトの名無しさん:2014/02/13(木) 02:09:03.65
pythonはインデントが嫌いなんだよなー、構文で文ブロック表さないようにしている所がどうしてもなじめない。
なのでいまだにEmacsラブラブなんであるよ。

あと基本の削除がKillRing無いと生きていけない
80デフォルトの名無しさん:2014/02/13(木) 05:24:21.72
俺は逆
Pythonのインデントが美しい、見やすい。ブロック指示語無しでの表現がスマート
でも、Lisp使いになると東大女とやり放題と聞いたのでLispの勉強を始めた
81デフォルトの名無しさん:2014/02/13(木) 07:52:22.02
>>71
理想的だな。
Emacsを使う理由が薄れる。
ここのスレの住人はLispで拡張できるからEmacsを使うって人が多いと思う。
目的がLispであってEmacsは手段でしかない。
できれば素のlisp,common lispが使えれば理想的だな。
82デフォルトの名無しさん:2014/02/13(木) 07:54:13.80
俺はxyzzyだけど
83デフォルトの名無しさん:2014/02/13(木) 08:48:50.79
>>82
だけど、何?
84デフォルトの名無しさん:2014/02/13(木) 09:57:01.02
xyzzy はより Common Lisp っぽいんじゃなかったっけ
emacs lisp は lisp 好きにはむしろ
85デフォルトの名無しさん:2014/02/13(木) 11:38:56.40
Common Lispで実装されたEmacsみたいなエディタあるよ。
でもEmacsのように便利に使おうと思うと、自分でCommon Lispをバリバリ書かないといけない。
86デフォルトの名無しさん:2014/02/13(木) 12:43:10.37
あったとしてもEmacsやVimくらい世界中からHackされようじゃないとねぇ。
zyzzyなんて海外じゃ誰も知らないだろうし。
87デフォルトの名無しさん:2014/02/13(木) 12:45:46.31
xyzzy さり気なく github で開発継続してたんだなあ
88デフォルトの名無しさん:2014/02/13(木) 17:12:56.16
>>86
お馬鹿丸出し
89デフォルトの名無しさん:2014/02/14(金) 02:00:59.87
>>88
煽るよりもこうすれば良いっていう提案をするのが吉だと信じてる。

>>80
構文からインデントを生成してくれる<言語名>.elにおんぶにだっこになるとPythonが辛いんよ。
90デフォルトの名無しさん:2014/02/23(日) 18:39:31.98
すいません。Emacs Part 45から来ました。
質問させてください。

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

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

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

よろしくお願いします。
91デフォルトの名無しさん:2014/02/23(日) 21:16:16.11
お前ら、久々の仕事だぞ。
92デフォルトの名無しさん:2014/02/23(日) 21:20:02.14
>>90
forward-char
93デフォルトの名無しさん:2014/02/23(日) 22:08:08.90
関数組めばいいのに
それにショートカットきーを割り当てる
94デフォルトの名無しさん:2014/02/23(日) 22:09:51.03
> 「矩形、編集」などで調べましたがわかりませんでした。
もっと深く調べろ
95デフォルトの名無しさん:2014/02/23(日) 22:12:44.44
矩形、編集で調べている時点であかん
もともと、そんな関数あるわけない。
カーソル制御で知らべろ
で、関数作れ(簡単にできる)
9690のなりすまし:2014/02/23(日) 22:49:00.93
>>91
てめーは何もやらないのかよ、使えねぇなカス
>>92
そんな関数1つだけで出来る訳ねーだろ、氏ね
>>93
抽象的なことだけ書き込んで悦に入ってんじゃねーよ
>>94
煽る以外に芸が無いのかよ、無脳
>>95
だったら、その関数をてめーが組んで、ここに貼り付けろ

ジョークだから本気に受け取らずに藁ってね
97デフォルトの名無しさん:2014/02/25(火) 03:36:47.58
今だにemacsとか使ってるバカいるのか。

Common Lispでなければ
意味ない。
98デフォルトの名無しさん:2014/02/25(火) 03:54:33.31
そうかな?
俺自身はCommon Lisp系のxyzzyを使っているが
emacsはemacsで良さがある
99デフォルトの名無しさん:2014/02/25(火) 09:22:57.05
>>97
(require `cl)
100デフォルトの名無しさん:2014/02/25(火) 15:01:22.07
>>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デフォルトの名無しさん:2014/03/01(土) 08:13:00.51
質問です。
実行後、空白行で区切った段落を1行で省略表示させて、
カーソル行が省略表示されている段落と同じ範囲内に来た場合に
展開してくれるというものが作りたいのですが、可能でしょうか?

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

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

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

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

hs-minor-mode あたりを設定を変えつつ使うのが楽でいいんじゃないでしょうか。
隠す区切りを改行が連続している領域に変更して、
隠す処理を行ってる関数あたりに point-entered/point-left で表示をトグルする処理を追加してやると。
103デフォルトの名無しさん:2014/03/01(土) 10:46:01.33
hs-set-up-overlay に出入りした時に隠したり表示したりするプロパティ追加する関数せっていすりゃいいんじゃね。
104デフォルトの名無しさん:2014/03/02(日) 21:33:23.49
>>103
具体的にどのようにすればよろしいでしょうか?
105デフォルトの名無しさん:2014/03/02(日) 21:48:51.04
まずorg.elを開きます
106デフォルトの名無しさん:2014/03/02(日) 21:56:23.12
point-entered は残念ながら overlay では機能しないらしいから
気合入れて text-property に追加してまわるしかないんじゃないかなあ
post-command-hook でいちいちチェックして hs-hide-block/hs-show-block もいいかもね
107デフォルトの名無しさん:2014/03/10(月) 07:20:52.21
一度elispの拡張の楽しさを覚えると、他のエディタに移れない
108デフォルトの名無しさん:2014/03/10(月) 07:48:40.35
ひょえー
固まっていくんだ
109デフォルトの名無しさん:2014/03/10(月) 16:22:33.05
>>107
vimやsublimetextはpythonで拡張できるけどそれと比較してどうよ?
110デフォルトの名無しさん:2014/03/10(月) 16:28:12.11
Pymacs動くから普通にPythonでも拡張できるよ
111デフォルトの名無しさん:2014/03/11(火) 20:38:09.46
Lispで拡張子できるのに、ナニが悲しゅうてパイソンつかうんや?
Lisp使えへんからか?
ひょっとしてナニがうずくんか?
「リストは飽きた、パイもませろ」
エッヂね、あなた
112デフォルトの名無しさん:2014/03/11(火) 20:39:25.89
リスト × L
リスト ○ R
113デフォルトの名無しさん:2014/03/25(火) 18:27:18.16 ID:Ye296TBS
なんか話題ない?
114デフォルトの名無しさん:2014/03/26(水) 23:27:38.28 ID:LML8JeED
>>109
Vim ってpythonで拡張できるん?
115デフォルトの名無しさん:2014/03/26(水) 23:31:15.83 ID:6UDaHe6u
emacsは遅めだな
116デフォルトの名無しさん:2014/03/27(木) 00:13:29.55 ID:/J3FM59H
>>114
python だけじゃなく ruby とか lua でも拡張出来るよ
ただしコンパイル時に if_python とか if_lua とか組み込まないとだめだけど
オリジナルの Vim scriptは海外ではウケが悪いんだとさ
117デフォルトの名無しさん:2014/03/27(木) 02:09:44.05 ID:FdT+1cD1
24.4から (< a b c …) できるって。
118デフォルトの名無しさん:2014/03/27(木) 13:12:09.80 ID:rnycJJoD
今までできなかったのかよ
119デフォルトの名無しさん:2014/03/27(木) 13:16:52.73 ID:qdz8LPjI
定義すれば済むことだな
120デフォルトの名無しさん:2014/03/27(木) 21:55:07.06 ID:4xfA40Vl
>>116
すげぇ!
Sublime Textなんていらなかったんや!
121デフォルトの名無しさん:2014/04/03(木) 22:08:59.03 ID:PIEAAVmi
>>119
vimmerはエディタの拡張のために、好きな言語を「選択」できる。
しかし、lisperはエディタの拡張のために、好きに言語を「拡張」できる。
122デフォルトの名無しさん:2014/04/03(木) 22:37:18.61 ID:DQUVbJjr
そういう意味ではリーダーマクロのない elisp はいまいち
123デフォルトの名無しさん:2014/04/03(木) 22:44:26.98 ID:PIEAAVmi
>>122
Emacs Lisp にリーダーマクロを実装してみた
http://dev.ariel-networks.com/Members/matsuyama/implement-emacs-lisp-reader-macro/
124デフォルトの名無しさん:2014/04/20(日) 18:24:46.84 ID:RjB2Ff6v
>>123
おお、なんか凄そうだな
勉強すすんだら、それ勉強させてもらいます
来年かなあ
125デフォルトの名無しさん:2014/04/25(金) 08:03:24.78 ID:xiFjVo8G
Latexのコードの特殊文字(?)を取り除いて文字だけにしたい
例えば

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

This figure 321 show someone.
に変換したい
どんな正規表現置換すればいいでしょうか
126デフォルトの名無しさん:2014/04/29(火) 06:14:21.54 ID:hZWbnKFL
パッケージが使えるようになってから
ライブラリ関係が整理されてきたね
http://www.wilfred.me.uk/blog/2013/03/31/essential-elisp-libraries/
127デフォルトの名無しさん:2014/05/05(月) 22:14:00.15 ID:rH4KCYSG
>>125
321はどっから出てきた?
128デフォルトの名無しさん:2014/05/08(木) 04:12:16.26 ID:gIosECTp
あああ
129デフォルトの名無しさん:2014/05/08(木) 20:38:27.07 ID:APfGLDmZ
あああじゃねえよ321は決め打ち?
130デフォルトの名無しさん:2014/05/29(木) 22:57:32.74 ID:lRFHqZI8
iii
131みつを:2014/06/04(水) 19:55:43.06 ID:1mti/jFC
>>130
iiiじゃねえよ。決め打ちね。
ちいさいことからこつこつやっていくしかないよなぁ
(replace-regexp-in-string "[\\]ref\{.*\}" "321" "This figure \\ref{fig:some} show someone.")

そもそも\refを先に\\refにしないとイカンかもな。\rになってまうもんなぁ
132みつを:2014/06/04(水) 19:57:17.25 ID:1mti/jFC
>>126
パッケージってMELPAとかいうやつ?
ずっと横ばいだな。これは普及するのか
http://www.modulecounts.com/
133デフォルトの名無しさん:2014/06/04(水) 21:16:48.17 ID:40jNRALG
むしろそれが今の Emacs の成長率みたいなもんなんじゃないのかな
134デフォルトの名無しさん:2014/06/13(金) 21:28:22.09 ID:9IC9OAVr
あああ
iii
uuu
135デフォルトの名無しさん:2014/09/10(水) 14:59:47.34 ID:TJ7Vp+Yk
最近なんか話題ある?
136デフォルトの名無しさん:2014/09/10(水) 23:18:57.46 ID:7cU3np3J
きちさんが元気になった。
137デフォルトの名無しさん:2014/09/12(金) 06:48:41.92 ID:pwXLQ7qz
カーソル位置の単語または選択範囲の文字をisearcの検索対象にする
http://nicolas-petton.fr/blog/isearch-thing.html
138デフォルトの名無しさん:2014/09/13(土) 00:21:10.93 ID:3yBdenhy
>>136
どんなふうに?
139デフォルトの名無しさん:2014/10/12(日) 21:42:50.50 ID:QLTYsLQy
Ymacs
140デフォルトの名無しさん:2014/10/16(木) 00:29:06.56 ID:9sgE7fDV
windows の emacs で find-name-dired をやりたかったんだけど、cmd の find は挙動が違うし、外部から find.exe をもってくるのも難しいしということで、elisp で find-name-dired っぽいものを自作した。

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

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

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

ベクトルは参照は早いけど追加操作は遅い。リストはその逆と思っておけばいい。
ケースバイケースだからソース公開するといいよ。
142デフォルトの名無しさん:2014/10/16(木) 09:56:15.97 ID:9sgE7fDV
>>141
ありがとうございます。まず、最初に作ったコードです。最後の 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)))))

;; 続きます
143デフォルトの名無しさん:2014/10/16(木) 10:00:45.11 ID:9sgE7fDV
(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)))))
144デフォルトの名無しさん:2014/10/16(木) 10:06:43.79 ID:9sgE7fDV
(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))))
145デフォルトの名無しさん:2014/10/16(木) 10:11:33.46 ID:9sgE7fDV
連投すみません。どこか外部にアップして、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)))
146デフォルトの名無しさん:2014/10/16(木) 10:26:10.93 ID:ML6o1wZC
いや、github とかにだね。。
147デフォルトの名無しさん:2014/10/16(木) 10:42:49.66 ID:ML6o1wZC
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)))

ざっと見る限りひたすらプログラミング初心者なのでとりあえずパフォーマン
スなんか気にしないで「リスト」を使って富豪的にどんどん書いてく方がいい
よ。
148ID:9sgE7fDV:2014/10/16(木) 11:15:16.59 ID:DN4MHL3l
>>147
コメントありがとうございます。
なるほど、パフォーマンスはかわらないのか。

elisp でいろいろ作ってみて、プログラミングを学んでいきたいと思います。
スレを汚してしまい、すみません。
149ID:9sgE7fDV:2014/10/28(火) 15:57:32.52 ID:XuuTzEP8
elisp による find を書き直しました。

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

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

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

「ここは普通こう書くよ」など、コメントをいただけないでしょうか。
150デフォルトの名無しさん:2014/10/28(火) 16:53:12.91 ID:BaOL+HSr
>>149
普通のdiredじゃ駄目な理由がわからん
151デフォルトの名無しさん:2014/10/28(火) 20:47:19.78 ID:ABQvesFS
>>150
外部の find を呼ぶ find-name-dired などが、windows ではデフォルトでは使えないので作りました。

あれ、もしかして使えるのかも。もう少し調べてみます。
152デフォルトの名無しさん:2014/10/30(木) 22:47:05.96 ID:ZUGQOqFu
久々に来たけどなんかもりあがってるね。
153デフォルトの名無しさん:2014/11/16(日) 21:37:23.05 ID:ifD0nPmW
>>149
君、すごうぃーね〜
154名無しさん@お腹いっぱい。:2014/11/16(日) 23:28:59.20 ID:moSkozbZ
無駄多し、バグありの find-lisp-find-dired ってのが大昔からあるよ
155ID:9sgE7fDV:2014/11/19(水) 11:27:44.63 ID:De3REAga
>>154
!!
ありがとうございます。
ソースコードをみて書き方を学びます。
156デフォルトの名無しさん:2014/11/23(日) 11:20:51.79 ID:3HkxdKNj
LispとPrologやれば
Cでの再帰プログラムが得意になる
157デフォルトの名無しさん:2014/11/24(月) 06:26:03.94 ID:eOmEBZPc
べつに
lisp/prologの経験と
再帰の得手不得手は無関係だと思う
158デフォルトの名無しさん:2015/01/11(日) 18:20:45.19 ID:NEH94HBN
なんか話題ない?
159デフォルトの名無しさん:2015/01/13(火) 10:50:02.39 ID:NDLkVK0s
マイナーモードの作成について、こちらが意図しないアクション (とくに keyboard-quit) をされたら、そのマイナーモードを抜けるようにしたいんだけど、どうすればいいですか?

できれば pre-command-hook や post-command-hook は使いたくないです。
160デフォルトの名無しさん:2015/01/13(火) 15:38:25.07 ID:8CwIIHPp
>>159
> マイナーモードを抜ける

の意味がわからない。

minor-mode のコマンドを途中でやめて元のキーシーケンスに戻るってことなら
auto-complete.el の ac-fallback-command あたりを見るとよろしかろう。
161デフォルトの名無しさん:2015/01/13(火) 16:45:00.86 ID:NDLkVK0s
>>160
コメントありがとうございます。
ご提示いただいたソースを読みたいと思います。

ちなみに、

(add-hook ’post-command-hook ’(lambda () (when hoge-mode (hoge-mode -1))))

のような処理を意図しております。
162デフォルトの名無しさん:2015/01/13(火) 17:30:12.89 ID:8CwIIHPp
>>161
> (add-hook ’post-command-hook ’(lambda () (when hoge-mode (hoge-mode -1))))

それなら auto-complete.el の例は関係ないかな…
post-command-hook 使うか timer で意図しないコマンドを監視するかしかないのではなかろうか。

何やろうとしてるか分からないから余計なことかもしれないけど、
minor-mode を使うという発想をやめるのも解に繋がるかもしれないよ。
163デフォルトの名無しさん:2015/01/13(火) 17:45:35.15 ID:NDLkVK0s
>>162
ありがとうございます。
minor-mode を使うなら、あまり選択肢がないのですね。

> minor-mode を使わない
なるほど!なんとなく、とりあえずでマイナーモードを利用していたのですが、使わないという発想も大事なのですね。
164デフォルトの名無しさん:2015/01/13(火) 18:03:40.40 ID:Wsh3Ajof
そのものずばり何をしたいか書いちゃった方がいい気もする
165デフォルトの名無しさん:2015/01/13(火) 19:16:25.85 ID:NDLkVK0s
はい、ありがとうございます。

自分用に ace-jump を拡張してます。
勉強のため、通常の ace-jump 部分も最初から作っております。

今回は、hoge-jump というマイナーモードを定義しておりました。
マイナーモードという形を選択した理由は、なんとなくなのですが、他に、マイナーモードを抜ける時点に hook をかけたいという理由があります。

具体的には、hoge-jump によってバッファに付加したオーバーレイを、hoge-jump の去り際にリムーブしております。

(ただ、本家の ace-jump もマイナーモードを使ってないのですね。
本家のほうをもっと検討したいと思います)。
166デフォルトの名無しさん:2015/01/17(土) 10:12:31.67 ID:IkrGJUzn
ace-jumpで

1. (ace-jump-char-mode) 実行
2. Query char を mini-bufferから選択
3. a-Zの選択

の2の作業を省いて、

1. (ace-jump-char-selected-mode "A") みたいなの作って実行
2. a-Zの選択

のように。単語を指定した状態で実行したいのですが、
やり方が分からず。

わかる方いらっしゃいますか?
167デフォルトの名無しさん:2015/01/17(土) 15:43:11.36 ID:mj45QIEF
>>166
ace-jump 使ってないからコメントしづらいけど
数日経ってこの調子だとすごく低いレベルで推移もしていないように見える。(まるで成長していない)

何をしようとしてどうだめだったのか書きたまえ。

ソースを見る限りだと ace-jump-char-mode の引数に目的の char を渡すだけ
にも思える。

(ace-jump-char-mode ?A)
168デフォルトの名無しさん:2015/01/17(土) 20:04:09.96 ID:dLLfAZ37
>>167
ちょっとまて、165 は私で別人ですよ。
169168:2015/01/17(土) 20:58:25.28 ID:654N0mRZ
私のほうは、結局マイナーモードを使うにしろ使わないにしろ、keyboard-quit のタイミングを知るには post-command-hook に任意の hook をかけるしかないな、との考えに至りました。

なので、マイナーモードを使用し、それに入るタイミングと出るタイミングで add-hook と remove-hook をおこなうよう設定する予定です。
170166:2015/01/19(月) 06:23:29.23 ID:q+OlVYly
>>167
>>168

混乱させてすいません。。
asiiで書けと書いてありました。
171デフォルトの名無しさん:2015/01/19(月) 13:52:05.04 ID:9dIDW3L4
>>170
s/asii/ascii/

ascii がどうとかはきっと本質的な問題じゃないよ。
基本的なことが理解できてない感じがするけど、
理解しようとする意欲が感じられない。0 点。
172デフォルトの名無しさん:2015/01/19(月) 14:00:29.29 ID:KroxEeJe
釣り質問としては85点くらい
173168:2015/01/20(火) 12:57:47.26 ID:TBaNt/xg
>>159
これ、unwind-protect でできるんですね。
174デフォルトの名無しさん:2015/01/20(火) 20:54:08.37 ID:boIocfqk
(condition-case err
(keyboard-quit)
(quit
(message "My Quit! %s" err)))

(condition-case err
(keyboard-quit)
(error
(message "Not Quit")))
175デフォルトの名無しさん:2015/01/21(水) 07:37:45.06 ID:ydgtfCH8
アッシー
176デフォルトの名無しさん:2015/01/23(金) 00:28:52.51 ID:A+ui+mzv
symbolp()は'symと:symの両方tを返すけど
:symこれのみ真を返す述語あったっけ?
177デフォルトの名無しさん:2015/01/23(金) 00:38:40.51 ID:KyQRIuOJ
keywordp
178デフォルトの名無しさん:2015/01/23(金) 02:16:59.21 ID:+QZK+ImI
>>176
keywordp
179デフォルトの名無しさん:2015/01/23(金) 13:03:20.01 ID:A+ui+mzv
>>177,178
キーワードか
プロパティでさがしてた、ありがと
180デフォルトの名無しさん:2015/01/24(土) 13:37:32.69 ID:rWwk77U6
どういたしまして
181デフォルトの名無しさん:2015/03/02(月) 23:35:21.61 ID:b1MuukTF
swift-modeどこかに落ちてませんか?
182デフォルトの名無しさん
検索したら一瞬で出てくるが