【GNU】Emacs Lisp 【Elisp】

2013/10/20(日) 07:50:56.93
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
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
どういたしまして。
2014/01/17(金) 19:58:14.55
いやいや誰だよw
52デフォルトの名無しさん
垢版 |
2014/01/17(金) 20:04:09.16
俺です。
2014/01/17(金) 20:06:45.37
貴方でしたか・・
2014/01/17(金) 20:46:42.74
Ctrlキーって小指で押すのと小指の付け根で押すのと、どちらが正しい流儀なんだろう?
TECOエディタは小指の付け根で押したなんて記述を見た気がしてきた
2014/01/17(金) 20:51:58.59
emacs スレ向けだろうそれは流石に
56デフォルトの名無しさん
垢版 |
2014/01/21(火) 02:17:15.59
なんか話題ないの?
2014/01/25(土) 15:07:45.72
ない
2014/01/25(土) 16:39:38.15
http://www.youtube.com/watch?v=0EBTn_3DBYo
59デフォルトの名無しさん
垢版 |
2014/02/07(金) 22:36:50.85
ソチオリンピックはじまったぞ
2014/02/08(土) 13:17:24.90
xyzzy Lispにsetcar/setcdrがなかった
ググったらrplaca/rplacdだとわかった
61デフォルトの名無しさん
垢版 |
2014/02/11(火) 08:52:22.47
>>60
すごい!大発見だね
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
ソース見せて〜
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)
)))
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ちゃんの凄いところ
2014/02/12(水) 17:48:01.21
ム板ってマイナー言語とかのスレに凄い優しい人一杯いるよね
2014/02/12(水) 17:52:46.28
仲間が少なくなってきてるから寂しいんだろう
2014/02/12(水) 23:04:33.78
Sublime Textが
Emacs LispやCommon Lispで拡張できるようになったらどうするんだろうか。
2014/02/12(水) 23:05:24.28
Sublime TextがEmacsenになる
2014/02/12(水) 23:11:54.46
EmacsにとってEmacs Lispは拡張言語じゃないんだよ
C言語で作られたEmacs Lispがあって、そのEmacs LispでEmacsが作られている

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

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

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

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

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

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

ジョークだから本気に受け取らずに藁ってね
2014/02/25(火) 03:36:47.58
今だにemacsとか使ってるバカいるのか。

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

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

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

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

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

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

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

This figure 321 show someone.
に変換したい
どんな正規表現置換すればいいでしょうか
2014/04/29(火) 06:14:21.54ID:hZWbnKFL
パッケージが使えるようになってから
ライブラリ関係が整理されてきたね
http://www.wilfred.me.uk/blog/2013/03/31/essential-elisp-libraries/
2014/05/05(月) 22:14:00.15ID:rH4KCYSG
>>125
321はどっから出てきた?
2014/05/08(木) 04:12:16.26ID:gIosECTp
あああ
2014/05/08(木) 20:38:27.07ID:APfGLDmZ
あああじゃねえよ321は決め打ち?
130デフォルトの名無しさん
垢版 |
2014/05/29(木) 22:57:32.74ID:lRFHqZI8
iii
131みつを
垢版 |
2014/06/04(水) 19:55:43.06ID: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.25ID:1mti/jFC
>>126
パッケージってMELPAとかいうやつ?
ずっと横ばいだな。これは普及するのか
http://www.modulecounts.com/
2014/06/04(水) 21:16:48.17ID:40jNRALG
むしろそれが今の Emacs の成長率みたいなもんなんじゃないのかな
2014/06/13(金) 21:28:22.09ID:9IC9OAVr
あああ
iii
uuu
135デフォルトの名無しさん
垢版 |
2014/09/10(水) 14:59:47.34ID:TJ7Vp+Yk
最近なんか話題ある?
2014/09/10(水) 23:18:57.46ID:7cU3np3J
きちさんが元気になった。
2014/09/12(金) 06:48:41.92ID:pwXLQ7qz
カーソル位置の単語または選択範囲の文字をisearcの検索対象にする
http://nicolas-petton.fr/blog/isearch-thing.html
138デフォルトの名無しさん
垢版 |
2014/09/13(土) 00:21:10.93ID:3yBdenhy
>>136
どんなふうに?
139デフォルトの名無しさん
垢版 |
2014/10/12(日) 21:42:50.50ID:QLTYsLQy
Ymacs
2014/10/16(木) 00:29:06.56ID:9sgE7fDV
windows の emacs で find-name-dired をやりたかったんだけど、cmd の find は挙動が違うし、外部から find.exe をもってくるのも難しいしということで、elisp で find-name-dired っぽいものを自作した。

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

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

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

ベクトルは参照は早いけど追加操作は遅い。リストはその逆と思っておけばいい。
ケースバイケースだからソース公開するといいよ。
2014/10/16(木) 09:56:15.97ID: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)))))

;; 続きます
2014/10/16(木) 10:00:45.11ID: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)))))
2014/10/16(木) 10:06:43.79ID: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))))
2014/10/16(木) 10:11:33.46ID: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)))
2014/10/16(木) 10:26:10.93ID:ML6o1wZC
いや、github とかにだね。。
2014/10/16(木) 10:42:49.66ID: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.59ID:DN4MHL3l
>>147
コメントありがとうございます。
なるほど、パフォーマンスはかわらないのか。

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

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況