【GNU】Emacs Lisp 【Elisp】
Emacs Lispプログラミング入門(Robert J.Chassell)
http://www.amazon.co.jp/dp/4756118054/ スクリプトの基本
EmacsをEmacs Lispインタプリタとして起動するには--scriptオプションを指定します。
$ emacs --script test.el
例:
hello.el:
(princ "Hello, World!\n")
実行
$ emacs --script hello.el
Hello, World! * ワンポイント
**タイマー
(run-with-timer 時間 繰り返し 関数) リストを処理するためのプログラミング言語
- Lisp
リストを処理するためのエディタ
- Emacs 前スレが今年早々に保守失敗してんのね
lispスレに統合するという話すら出ないうちに
>>2みたいな無知が偉そうに誘導している始末
全く人がいなくなってしまった様子
るびきちはすっかり教祖様なのに
おまえらときたらどこいったんだ・・・ そういえばこんなスレあったな
>>12見るまで前スレあること忘れてた 質問です。
-------------------------------------
310 <- 表示されている 最上段
311
312
313
314
315
316 <- 今ここ
317
.
.
.
.
350
-------------------------------------
表示されている最上段の行番号を知りたいのですが
どうすればいいでしょうか? >>15
(line-number-at-pos (window-start)) ニュー速VIP爆撃中の2ch定期書き込みツールqsocks
lispで書かれたこのツールを誰か改造してください。
他板でも使えるようにしてください。
お願いします。m(ーー)m
qsocks
https://anonfiles.com/file/3fcd3edbf6000ecf37b61e8af186c453
qsocksソースコード
http://codepad.org/uyuG7Ovg Emacs Lispはなんでローカル関数ないのん? elisperっていそうでいないんだけど、いったいどこにいるの? >>22
それってUltra-C のユーザじゃね? >>21
elispなんて、今もうunix関連の企業で職人しか触らないんじゃない? HHKのUS配列なんて、そこらの電器店で買えないし、
Swapするのも面倒だし、皆、Vimに移ったんじゃない? vimに移るなんて何年前の話だよ?
移り先はsublimetextあたり。
でもEmacsはある一定のユーザは残る。その理由がlispで拡張できる点だろうな。 Emacs 対 Vim の宗教戦争は収拾がつかなくなる >>27
だが、このスレはその戦争には無縁だな。
elispのスレなのだから。 エディタに関するスレではなく、
単なるいちプログラミング言語についての話。
あえていえば、elispをコマンドラインから起動させる前提ならvimmerがこのスレに参加してくれても構わない。
あくまでも、このスレはLispの一方言であるelispというプログラミング言語についてのスレなのだから。 こういうエディタを乗り換える人って、ろくすっぽマクロも書いてなさそう JDEEのinstallに何時間もかけたものの、1、2ヶ月たっても使いこなせなかった
甘酸っぱい経験からすれば、javaはeclipseで良い あんなにー♪いっしょぉ、だぁったぁのにぃー♬
ゆぅぐれぇはぁー、もぅーちぃがぁーういろぉー♫ >>30
そのマクロはスレチ
ポールグレアムのマクロならこのスレであってる。 (let ((ningen '(:name "tarou" :age 20)))
(get-value :name ningen)) ; tarou
こんなことがしたいのですがget-valueのような関数はありますか? それだとそのまんま plist-get が使える
(plist-get ningen :name) ; => tarou
すごい巨大になるなら hash もいいかもね。 >>37
リスト コロン なんかで検索しても出てこなかったので困ってました。
ありがとうございます! 何らかのキーを押した時点で実行されて
押したキー情報を取得できるようにしたいのですが、
可能でしょうか?
"C-a" "C-t" "0" "q" "w" "j" "j" "s" の様に
キーを押した時点でなんのキーを押したかを過去数回分取得したいです。
"C-a" "C-t"
"q" "w"
"j" "j" "s"
でそれぞれコマンド実行
のようなことがしたいです。 >>39
何かの入力があった後に実行する → post-command-hook
何か文字が入力された後に実行する → after-self-insert-hook
直前のキー入力 → last-input-event
過去のキー入力リスト → (recent-keys)
直前に何が入力されてたかで挙動を変える系の拡張だと key-combo ってのがあったけど
やりたいのはそういうのかね? 嘘書いてしまった
×after-self-insert-hook
○post-self-insert-hook >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を分けたいのですが、
どのように書けばよいでしょうか? 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 ではない何か別の挙動をしたい
ってことだよね? >44
ありがとうございます。
emacs導入初期に全てのキー設定をいじって、self-insert-commandでない書き方にしてしまったため、一部入力支援系が試せず、キー設定を見直しているところです。
入力支援系を使えるようにするためには英数記号だけkey-comboに移せば改善されそうです。
C-a + C-t を例にだしたのは特に意味はなかったですが、そういう感じです。
sequential-command的なことは自分でやれるようにはしてます。
文字の同時入力は微妙に使いづらいのでやめました。
勉強がてら自分でいろいろ書いてみようと思います。 >>45
なんかこれが一番目的に近づいてる気がする
https://github.com/yuutayamada/mykie-el
キーをおしたときに条件に応じて挙動を変えるって拡張だけど
条件は自分で追加できるから、あるキーを押したあとだとこの挙動、なんてのは自在に作れると思う
リージョンがどうのとかも標準で用意されてるし。 >>46
いいですね。一番しっくりきたのでこれにしました。
結構いじりやすいので
"C-j f" "f C-j" "YYY" "qj"
なども反応するようにできて満足です。
ただアルファベットも設定してしまうとself-insert-commandではなくなるのでタイピング時にauto-commandが実行されないのが残念ですが、仕方ないですかね。 使ってないから詳しい事はわからないけど、
(mkie:set-keys 'with-self-key ... ) で設定したのに
self-insert-command に関する何かがおかしくなるんだとすると
仕様に漏れがあるのかもしれないね。 >>48
読み落とししてました。。。
(mykie:global-set-key …
で書いてました。
(mkie:set-keys 'with-self-key …
ならいけました!! ありがとうございます。 Ctrlキーって小指で押すのと小指の付け根で押すのと、どちらが正しい流儀なんだろう?
TECOエディタは小指の付け根で押したなんて記述を見た気がしてきた xyzzy Lispにsetcar/setcdrがなかった
ググったらrplaca/rplacdだとわかった >>61
そうだね
君もいつか自分がクズだと気づけるといいね キーボードから絵が描けるように拡張したった 後は音鳴るようにするー 【入門】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)
))) >>65
calc-eval ってのがあるよ。
(setq str (calc-eval str)) で ok。
calc は無駄に多機能だから info 読んでみるといい。 >>66
こういう親切な人がいるところが2ちゃんの凄いところ ム板ってマイナー言語とかのスレに凄い優しい人一杯いるよね Sublime Textが
Emacs LispやCommon Lispで拡張できるようになったらどうするんだろうか。 EmacsにとってEmacs Lispは拡張言語じゃないんだよ
C言語で作られたEmacs Lispがあって、そのEmacs LispでEmacsが作られている
Sublime TextがEmacs Lispを拡張言語として使えるようになってもあまり魅力は無い
Emacs Lispで作られたSublime Textがあればちょっと考える >>73
なんだなら全部C言語なんだね!
pythonもC言語だから
全部既にできたことなんだね!
C言語を経由すれば全て可能!
ということだよね! >>74
プログラムの再起動とか無しに自身を書き換える機能が欲しい
コンパイルが必須な言語だとちょっと使い勝手が悪いかな
メモリ管理も自動でやってほしい elisp も ffi が実装されたら素敵なんだが pythonはインデントが嫌いなんだよなー、構文で文ブロック表さないようにしている所がどうしてもなじめない。
なのでいまだにEmacsラブラブなんであるよ。
あと基本の削除がKillRing無いと生きていけない 俺は逆
Pythonのインデントが美しい、見やすい。ブロック指示語無しでの表現がスマート
でも、Lisp使いになると東大女とやり放題と聞いたのでLispの勉強を始めた >>71
理想的だな。
Emacsを使う理由が薄れる。
ここのスレの住人はLispで拡張できるからEmacsを使うって人が多いと思う。
目的がLispであってEmacsは手段でしかない。
できれば素のlisp,common lispが使えれば理想的だな。 xyzzy はより Common Lisp っぽいんじゃなかったっけ
emacs lisp は lisp 好きにはむしろ Common Lispで実装されたEmacsみたいなエディタあるよ。
でもEmacsのように便利に使おうと思うと、自分でCommon Lispをバリバリ書かないといけない。 あったとしてもEmacsやVimくらい世界中からHackされようじゃないとねぇ。
zyzzyなんて海外じゃ誰も知らないだろうし。 xyzzy さり気なく github で開発継続してたんだなあ >>88
煽るよりもこうすれば良いっていう提案をするのが吉だと信じてる。
>>80
構文からインデントを生成してくれる<言語名>.elにおんぶにだっこになるとPythonが辛いんよ。 すいません。Emacs Part 45から来ました。
質問させてください。
一定文字数、右にカーソルを移動させる方法はありますか。
「矩形、編集」などで調べましたがわかりませんでした。
図1)のテキストがあったときに、右側に対訳のような形で編集したいです。
図1)
あいうえ
かきくけこ
さしす
たちつてとなにぬねの
図2)
あいうえ aiue
かきくけこ kakikukeko
さしす <-ここにカーソルを移動させ段組みで編集したい
たちつてとなにぬねの
よろしくお願いします。 関数組めばいいのに
それにショートカットきーを割り当てる > 「矩形、編集」などで調べましたがわかりませんでした。
もっと深く調べろ 矩形、編集で調べている時点であかん
もともと、そんな関数あるわけない。
カーソル制御で知らべろ
で、関数作れ(簡単にできる) >>91
てめーは何もやらないのかよ、使えねぇなカス
>>92
そんな関数1つだけで出来る訳ねーだろ、氏ね
>>93
抽象的なことだけ書き込んで悦に入ってんじゃねーよ
>>94
煽る以外に芸が無いのかよ、無脳
>>95
だったら、その関数をてめーが組んで、ここに貼り付けろ
ジョークだから本気に受け取らずに藁ってね 今だにemacsとか使ってるバカいるのか。
Common Lispでなければ
意味ない。 そうかな?
俺自身はCommon Lisp系のxyzzyを使っているが
emacsはemacsで良さがある >>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 の懐かしさに、久しぶりの書き込みでござる。