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/
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の中調べてた。