1 :
デフォルトの名無しさん :
2007/10/09(火) 05:39:53
System.out.println("
>>1 乙");
スパイがいるぞ
ここまでバレバレだとスパイというより罠だな そんなことよりコンスセルの話をしようぜ
いやでゴンス
ところで、lexbindはもうtrunkにマージされた?
elisp で perl みたいなテキスト処理をしたいんだけど、 ファイルから一行読み込む、ってどうやるの? ファイルは馬鹿でかいから、バッファに全部は読み込めない。
insert-file-contents かな
リージョン内の文字列を対象に、ファイルサイズを知りたいです。 リージョンを指定して M-| wc -c だと、改行コードなどがバッファのものと違う、 string-width だと TAB が 8 にカウントされる、改行がカウントされない、 length だとマルチバイト文字も 1 文字とカウントする、 など、どれもちょっと期待と違います。 ちなみに、最終的には mode-line に表示させたいので、 外部プロセスなどは使わずにすませたいところです。 何かいい方法ないでしょうか?
buffer-file-coding-system に encode-coding-string して length 取る、とか…
毎回やるのか、それ。遅そう……。
>>11 です。
>>12 を参考にコードを書いてみましたが、
1MBくらいのファイルになるとスクロールに影響がありました。
私の組み方も悪かったのかも知れませんね。
バッファ全体を substring して temp-buffer に insert して encode して length… だったので。
きっと、もちょっと効率良くできるのでしょう。
で、mode-line の表示をどうしたものかと xdisp.c を眺めていたのですが、
mode-line-format に %i や %I が使えることが分かったので、
もうこれでいいコトにします。
ありがとうございました。
> 1MBくらいのファイルになるとスクロールに影響がありました。 変更がなければ再計算する必要ないと思うが。
バッファに変更がないことを知るのは難しいよね? undo-list はアテにならないから使えないと思うんだけど、 バッファに変更があったことをどうやって知ればいい?
buffer-modified-tickとか。 buffer-undo-listじゃどうアテにならないのかおせーて。
buffer-undo-list って、メジャーモードによっては消えたりするじゃない、 …と思ったけど、変化したら再計算するんだから、十分アテになるね。
after-change-functions
>>19 おお、これなら…、と思ってやってみましたが、
少し速くタイプすると描画がついてきませんでした。これは CPU の性能のせいかな?
もちろん、スクロールには影響なかったですよ。ありがとうございます。
after-change-functions 自体は便利そうなので、別の何かに使います。
昨日からelispを勉強しています。 Rubyが一応は書けます。 OSはUbuntu7.10を使っています。 質問なのですが yatexは.elファイルをどっかに置いているのだと思いますが これはどこに置いてあるのですか? rpm系を使っていて rpm -ql yatexのような事が出来ればいいのですが良く分かりません。 まずこれについて方法を教えていただければと思います。 次に、 例えば/usr/libとかに.elファイルが置いてあるとして emacsはどこに書いてある命令でこれを読みに行くのでしょうか? 最後に .emacsというのにelispを書くとemacsをカスタマイズ出来るそうですが .emacsに例えば (set-language-environment "Japanese") (set-default-coding-systems 'euc-japan) (set-terminal-coding-system 'euc-japan) と書いた場合、確認した中では 何もファイルを指定せずにファイルを開いた場合と .rbファイルを開いた場合に設定が反映されましたが、 .texの時は変わらず、JISのままでした。 例えば/usr/libにyatex.elというのがあると仮定して、 おそらくここにJISにしなさいという命令が書いてあるものと思われ それにより上書きされているものと思われますが、 同一種の命令の場合、 .emacsの設定の方を優先順序を上にするにはどうすればいいですか?
>>21 ライブラリの場所は M-x locate-library でわかるよ
ありがとうございます。 無理やりですが locate yatexで調べました。 /usr/share/emacs/site-lisp とかにそれらしきパッケージが入っていますね。 しかしどうやって読み込んでるのかとか どうやってyatexを使用した場合でも.emacsに書いたeuc-jpを使いなさい という命令を優先させる事が出来るのかが分かりません・・・
yatexが入っているならそのinfoも入っているはずなので、 C-h iでyatexを探して読んでみるといい。 文字エンコーディングの設定方法はそこに書いてある。
このスレはEmacs設定スレじゃないと思うんだが……
Emacs Lispの成分解析結果 : Emacs Lispの55%は陰謀で出来ています。 Emacs Lispの39%は祝福で出来ています。 Emacs Lispの6%は成功の鍵で出来ています。
リストの n 番目の要素を置き換えるような関数はありますか? &optional な引数で、上書きと挿入を切り替えることができると嬉しいです。 (setq test '(A B C D E)) (func test 3 X) => (A B C X E) (func test 3 X t) => (A B C X D E) みたいなものがあったら嬉しいのですが、標準関数でこれと同じようなものはありますか? 自分でやると (append (reverse (nthcdr (- (length lst) n ) (reverse lst))) X (nthcdr n lst)) みたいになってしまうのです。
;; 破壊的挿入 (setf (nthcdr n lst) (cons new (nthcdr n lst))) ;; 非破壊的挿入 (let ((lst (copy-list lst))) (setf (nthcdr n lst) (cons new (nthcdr n lst))) lst) ;; 破壊的上書き (setcar (nthcdr n lst) new) ;; 非破壊的上書き (let ((lst (copy-list lst))) (setcar (nthcdr n lst) new) lst) or (substitute-if new 'identity lst :count 1 :start n) setfとsubstitute-ifはCL。あとは詳しい人が降臨するのを待とう。 おれもここは苦手なんだ。
>>27 仕様バグ。使い方は
(setq test (func test 3 x t))
でないとダメ。
なぜなら0番目に挿入がありえるから。
>>29 ???
そういうこともあるから値返してんじゃないの?
どのへんがバグなのか分からないオレははんぶん素人です。
変更箇所を色分けするhighlight-changes-modeで、 保存のたびに色が変化する(tomato→black)ようにしたくて、以下を.emacsに書いたのですが、エラーが出てしまいます。 小関氏の『入門Meadow/Emacs』に載っているソースを真似たのですが、どこが問題なのでしょうか? よろしくお願いします。 ●.emacs (setq highlight-changes-colours (let ((r 255)(g 99)(b 71) ret) ;初期値tomato (while (> (+ r g b) 0) ;だんだん色褪せる (setq ret (append ret (list (format "#%02x%02x%02x" r g b)))) (setq r (* (/ r 10) 8) g (* (/ g 10) 8) b (* (/ b 10) 8))) ret)) ●エラー Wrong type argument: symbolp, (* (/ b 10) 8)
じっと目を凝らしても君には見えないんだろうな。
>>31 Emacsが日本語でやさしく教えてくれるようになるまで別のもの使っときw
develockで赤くしました。
develockって一度有効にしちゃったらoffにできないよね……
バージョンが古いんじゃないの?
と思ったら、なんか変だね…
関数内で、自身の関数名を取得する方法はありますか?
backtrace-frame()
>>40 (defun hoge()
(interactive)
(setq self (second (backtrace-frame 3)))
(message "%s" self)
)
お、できた。
サンクス
let使えよ selfが汚染されるだろ
変数 arg が string で空ではない事を判定するのは こんな感じだと思うんですが (and (stringp arg) (not (string= arg ""))) これに相当する標準のコマンドってありますか?
(equal arg "")じゃダメなん?
ああnonempty stringで真にしたいのか。ない、そんなの。
lisp のファイル内に時々 ^L (Control-L) だけの行があるけど あれ何のためにあるの?
改ページ
Lispに限らず見かけるけど。 a2ps-j とかはそれを認識して改ページしてくれるので、 見やすくするために入れる。
EmacsのCソースコードにも入ってるよ。 一つのソースファイルをいくつかのセクションに分けたいときに使ってるね。 Emacsではbackword-page (C-x [), forward-page (C-x ])でページ単位で移動できる。
文字列を N 回結合する関数ってありますか? (defun foo (str num) (let (i result) (dotimes (i num result) (setq result (concat result str))))) こんなのを作るしかないんですかね?
ないんじゃないかな、こんなのやってみたけど (defun X (s n) (apply 'concat (make-list n s)))
>>52 おお、素晴らしい。
そっちの方が色々応用できそうですね。
>>53 mapconcat の方がいろいろ対応できるよ
>>54 確認しました。 ありがとうございます。
941 :デフォルトの名無しさん:2007/09/08(土) 00:20:18
ということは、まとめると
(mapconcat 'identity (make-vector 3 "abc") nil)
が一番速いのかね
>>55 みたいですね。
こういうコードをさらっと書けるように修行します。
(reduce 'concat (make-vector 3 "abc")) ;; ==> "abcabcabc" ぱっとみて思いついた。
58 :
Zeno ◆5nZQbNmQPs :2008/03/28(金) 09:47:16
>>57 でもそれは
>>51 のように順々に concat していくのと同様だから遅すぎである。
(reduce 'concat (make-vector 10000 "abc"))
Time: 5182 ms
(mapconcat 'identity (make-vector 10000 "abc") nil)
Time: 2 ms
>>58 さっさと本スレで初心者にやさしく答えてあげてください。
こっちの方が速かった。 (mapconcat (lambda (x) "abc") (make-bool-vector 10000 nil) nil) くり返し回数が十分大きい場合はこっちのが速い (with-temp-buffer (let* ((n 10000) (s "abc") (l nil)) (while (/= n 0) (setq l (cons (= 1 (logand n 1)) l)) (setq n (lsh n -1))) (while (progn (if (car l) (insert s)) (setq l (cdr l))) (insert-buffer-substring (current-buffer) (point-min) (point-max))) (buffer-string)))
>>60 思いつく柔軟さはいいと思うけど、
そんなコード氾濫してたら嫌だというのが正直なとこだな
62 :
デフォルトの名無しさん :2008/03/29(土) 14:02:44
ならinline functionにすればいいじゃない
63 :
デフォルトの名無しさん :2008/04/19(土) 05:38:06
Perlの $foo =~ s/abc/def/; みたいにして変数の中身を正規表現を使って置換することはEmacsLispで出来ますか? perfume-replaceをどう使っていいのか分かりません
>>63 replace-regexp-in-string
>>63 replace-regexp-in-string でいいんじゃね? と思ったが、
s/abc/def/ じゃなくて s/abc/def/g になっちまうな。
(let ((foo "abc123abc"))
(setq foo (replace-regexp-in-string "abc" "def" foo)))
⇒ "def123def"
replace-match なら s/abc/def/ になるかな。
(let ((foo "abc123abc"))
(string-match "abc" foo)
(setq foo (replace-match "def" nil nil foo)))
⇒ "def123abc"
>>65 あー s/abc/def/gでいいんです。すいません
とりあえずreplace-regexp-in-stringとstring-matchの使い方を覚えます
どうもありがとうございました
ヘルプでcount-mathesの説明を見るとhow-manyのアライアスだということで how-manyのソースを見てみたところ (defun how-many (regexp &optional rstart rend) と、引数を3つしかとらないみたいなのですが バッファ内で(how-many "aa" nil nil nil)と引数を4つ渡して評価しても何故か 普通に動作します。 どうして引数を4つ渡しても動作するんでしょうか? emacsのバージョンは22です
68 :
67 :2008/04/27(日) 07:50:01
すみません 使ってるバージョン(22)と見たソースのバージョン(21)が異なってただけでした。orz 22のソースだとちゃんと引数は4になってました。 あともう1つわからない点があって、22のcount-matchesの説明をc-h fで見ると the function behaves in all respects has if it had been called interactively. という英文があるんですが、これはどういう意味なんでしょうか? 特にin all respects has という部分がわかりません。
69 :
Zeno ◆5nZQbNmQPs :2008/04/27(日) 08:12:30
>>68 その英文は少々不自然である。 例えばそれは
if interactive is t, the function behaves as if it had been called interactively (in every respect).
(もし `interactive' が t であるならば、この関数は interactive に呼ばれた時と同じ動作をする。)
と訂正されるべきだろう。 "has" は "as" であって、単純なタイポである。
70 :
67 :2008/04/27(日) 08:23:11
>>69 変な英文だと思ったらtypoだったんですね。
わかりました、ありがとうございます。
71 :
Zeno ◆5nZQbNmQPs :2008/04/27(日) 08:40:00
関数のカリー化はできないのでしょうか?
プ
emacs lisp からcommon lispのcl-whoなどのパッケージを使う方法ないでしょうか?
Google Desktop の検索結果に time というプロパティがあり、それを通常の日付/時間表示に変換する方法が分かりません。どうすればいいのでしょうか? ;Google Deskitop の time の値(milie second): 128542440648970000 ; 試してみたこと。 ; current-time-string に渡すため (high low)のフォーマットにしようとこころみた。 (let* ((second 128542440648970) (high (/ second 65535)) (low (logand second 65535))) (List high low)) ;こんな結果になる。 (-380 28938)
(let* ((second "128542440648970") (high (calc-eval (concat second " / 65535"))) (low (calc-eval (concat "and(" second ",65535")))) (list high low)) => ("1961431916.52" "28938") で結果は正しい?
77 :
デフォルトの名無しさん :2008/05/08(木) 12:32:31
>>76 レスありがとう。
'high' が integer じゃないって怒られた。だめみたいです。
それくらい自分で型変換しようぜ…
>(concat second " / 65535") 65535 じゃなくて 65536 じゃないか?
emacs21 --batch --eval "(hoge ...) " の出力が日本語を含むリストのはずなのですが \222 が連続して並んでます nkfでも変換できないみたいです どうすれば普通の日本語にできるのでしょうか?
>>80 --batch の出力は必ず iso-2022 になるはず。
>>82 その真上にある終了時に byte-compile ってやつはダメなの?
>>82 kill-buffer-query-functions で eval してはどうでしょうか。
(add-to-list 'kill-buffer-query-functions
(lambda ()
(when (string= (expand-file-name "~/.emacs.el")
(buffer-file-name))
(eval-buffer))
t))
85 :
82 :2008/05/12(月) 05:10:30
>>84 的確なレスありがとうございます。
さっそく試したところ、うまいこと動きました。
ただ、やはり、バッファ終了時ではなく、手動保存時に
add-hookすることができればそれがベストかなと、
思い直した次第です。
つまり、'after-save-hookだとauto-save時にも適用されてしまいますが、自分でC-x C-sした時だけeval-bufferするようなことって、できますでしょうか?
たびたびすいませんです。これで最後の質問にいたします。
>>85 eval-bufferして本来の動作をするようなelispを定義して
C-xC-s のコマンドに上書きすればいいだけじゃないか。
そういうコマンド書いて C-x C-s に割り当てればいいんじゃないかな。
>>85 interactive-p で auto-save かどうかを判定できるかも。
選択範囲内のすべての行の先頭にタブを入れたいのですが, どうすればいいですか? わかる方がいましたら教えてください。
>>89 マークして C-x r t C-q TAB RET
基本的な操作は本スレで質問しような。
>>81 なぜかうちの環境ではならない
ubuntu7.10
>>90 そんな長いコマンドがちょっといやで,
C-c C-tあたりでできるようにしたいです
>>92 じゃあチラシの裏に書く前にさっさとそうしてください。
opensuse11 初心者だけど、manページが文字化けする。。。。
elispでもマクロがあるんだねぇ。しらなかった。試しに作ったけど (defmacro definsert (name str) (let ((dstr (gensym)) (len (gensym))) `(defun ,name () (let* ((,dstr (concat ,str ,str)) (,len (length ,str))) (insert ,dstr) (backward-char ,len))))) ( definsert insert-double-aho "aho") (insert-double-aho) => ahoaho カーソルの位置 最初のahoの後ろ インデントは適当になおしてね。また、これは車輪の再発明でinsert-pairが 標準であることを付け加えておきますね。
96 :
デフォルトの名無しさん :2008/09/28(日) 07:16:03
一行コピーの一番エレガントな実装を教えてください。 取り合えず手元にあるものではこんな感じ。 (defun duplicate-line (n) (interactive "p") (save-excursion (copy-region-as-kill (line-beginning-position) (progn (forward-line 1) (point))) (dotimes (i n) (yank)))) ちなみに、コピー後のカーソル位置は任意です。(カラムが移動するのはイヤン)
;; エレガントかどうか知らんけど、最終行でも動作が変わらないようにしてみました (defun duplicate-line (n) (interactive "p") (save-excursion (let ((str (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n"))) (forward-line) (when (= (line-end-position) (point-max)) (insert "\n")) (dotimes (i n) (insert str)))))
(fset 'duplicate-line [?\C-a ?\C- ?\C-e escape ?w ?\C-m ?\C-y ?\C-a ?\C-p])
99 :
96 :2008/09/28(日) 11:13:49
ありがとうございます。
>>97 確かに最終行が改行で終わってないと動作がおかしいですが、
ある意味正しいというか、あまりないことなので現状でも
いいかなという気もします…
>>98 マクロも考えたんですが、カーソルのカラム位置が移動しちゃうのと
一回のUndoで元に戻らないのがちょっと微妙です。
100 :
96のお父さん :2008/09/28(日) 11:34:40
(insert (save-excursion (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))
101 :
96のお父さん :2008/09/28(日) 11:36:45
失礼。 × (insert (save-excursion (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n"))) ○ (save-excursion (insert (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n"))) どっちでもいいけどな。
質問です。
grep-find で、あちこちの .svnディレクトリ以下を無視したいのですが、
参考:.svnを除外してfindする
http://snak.tdiary.net/20081008.html#p02 今は毎回、-name .svn -prune -o を手で付け加えていて面倒なのです。
そこで、デフォルトでこのオプションが追加されるようにしたいのですが、で
きたらgrep.elはそのままで、.emacs.el で設定したいのです。どうしたら良い
でしょうか?
なんか自己解決しました。grep-findじゃなくてrgrepだと.svnディレクトリを デフォルトで無視してくれてるみたいです。 もっと調べてから質問するべきでした。すみません。
すみません、
>>102-103 です。
Emacs本スレに書いたつもりの誤投稿でした。本当にごめんなさい。
Emacs Lispでwgetみたいなことはできますか?
106 :
デフォルトの名無しさん :2008/12/03(水) 15:34:26
質問です。 x と lst が与えられたとき、x を lst から取りだす CAR と CDR の適用列を返す 関数 co を定義しなさい。 coは、そのような適用列が存在しない場合は NIL を 返すものとする。
>>106 > x と lst が与えられたとき、x を lst から取りだす CAR と CDR の適用列を返す
> 関数 co を定義しなさい。
この文章は 命令 とか 指示 とかいった文章で
> coは、そのような適用列が存在しない場合は NIL を返すものとする。
この文章は 補足 とか 追加説明 とかいった文章だな。
で質問は何?
;;
>>106 エスパーして作ってみた
(mapc 'require (cl el-expectations))
(defun co (x lst &optional acc)
(assert (listp lst))
(macrolet
((recur (&rest lst) `(co ,@lst)))
(let ((cur (car lst)))
(cond ((null cur) nil)
((and (atom cur)) (if (eq x cur) (cons 'car acc)
(recur x (cdr lst) (cons 'cdr acc))))
((listp cur) (or (recur x (car lst) (cons 'car acc))
(recur x (cdr lst) (cons 'cdr acc))))
(t (error "unexpected lst: %s" cur))))))
;; test cases
(expectations
(error (co 'a '()))
(expect (co 'not-found '()))
(expect (co 'a '(a)) '(car))
(expect (co 'b '(a b c)) '(car cdr))
(expect (co 'c '(a b c)) '(car cdr cdr))
(expect (co 'x '((x) a b c)) '(car car))
(expect (co 'x '((a b c x) d e f)) '(car cdr cdr cdr car))
(expect (co 'x '(a b (c x d) e f)) '(car cdr car cdr cdr)))
(mapc 'require '(cl el-expectations)) ね
戸塚ヨットスクール
;; とりあえず質問者からの動作報告求む (defun* co (x lst &optional (compare 'eq)) "COMPAREで比較関数を指定できるようにしてみた。 引数無しでは`eq'を使って比較する。" (assert (listp lst)) (labels ((f (lst acc) (let ((cur (car lst))) (cond ((null cur) nil) ((and (atom cur)) (if (funcall compare x cur) (cons 'car acc) (f (cdr lst) (cons 'cdr acc)))) ((listp cur) (or (f (car lst) (cons 'car acc)) (f (cdr lst) (cons 'cdr acc)))) (t (error "unexpected lst: %s" cur)))))) (f lst '()))) ;; てすけ (expectations (error (co 'a '())) (expect (co 'not-found '())) (expect (co 'a '(a)) '(car)) (expect (co 'b '(a b c)) '(car cdr)) (expect (co 'c '(a b c)) '(car cdr cdr)) (expect (co 'x '((x) a b c)) '(car car)) (expect (co 'x '((a b c x) d e f)) '(car cdr cdr cdr car)) (expect (co 'x '(a b (c x d) e f)) '(car cdr car cdr cdr)) (expect (co "foo" '("bar" "foo") 'string=) '(car cdr)))
113 :
デフォルトの名無しさん :2008/12/04(木) 15:17:06
遅くなりました106です。 関数coを定義しなさいという問題でした。 みなさんのおかげできました。 ありがとうございました。
質問をさせてください。 read-string等でminibufferから読み込みをしている最中にC-x C-bとかすると (if enable-recursive-minibuffers (error "Command attempted to use minibuffer while in minibuffer") (error "Cannot switch buffers in minibuffer window")) なんですが condition-caseでは捕まえられないし(switch-to-buffer中のエラー?) *Backtrace*でqを押すとread-stringが戻る事無くトップレベルに返ってしまいます。 こういう場合はどう対処すればよいのでしょうか? 非同期プロセスと通信するプログラムを書いているので いきなりtop-levelに返ってもらっては困るのです。 よろしくお願いします。
115 :
114 :2008/12/05(金) 16:18:25
ifのthen式とelse式が逆でした
宿題をここで教えてもらうような人間が提出するには コードが綺麗すぎて困っているのですね、わかります。
(defun co (x lst) (let ((f (lambda (node acc) (cond ((eq node x) acc) ((consp node) (or (funcall f (car node) (cons 'car acc)) (funcall f (cdr node) (cons 'cdr acc)))))))) (funcall f lst '())))
119 :
デフォルトの名無しさん :2008/12/24(水) 16:57:33
ある eval に時間のかかる式を 開発中に eval-buffer したときは eval せずに, compile 時のみに eval したいんですが, どうするんでしょうか? (eval-when (compile) (hoge)) これはうまくいっていないように思う. Emacs 22.
eval-when-compile
eval-when-compile は eval-buffer でも eval される. 質問の仕方を変えると, byte compiling 中のみ Non-NIL に なる変数はどうすれば定義できるか? (defvar hoge-byte-compiling-p ...)
123 :
デフォルトの名無しさん :2008/12/25(木) 12:25:52
質問がへたでごめんなさい. eval-when-compile は eval-buffer のときも byte-compile のときも eval されるが, 今どちらなのかを区別したいです.
>>121 backtrace/backtrace-frame を使って byte-compile-form あたりの有無で判定
できると思う.
新しいmajor-modeを書いたり、標準のelispとか誰かが作ったelispのバグを取ったり拡張を書いたり できるようになれば十分扱えてるといっていい状態だろうね それ以外の項目については何が言いたいのかよくわからない
>>127 リンク、サンクスです
この人の寸評だと、このころはRubyのほうが優れた言語とされていたんだね
elispで何ができるかというのは、漠然とだけど、掴めるんだけど
Schemeでなにができるかがよく掴めない(どういう用途に優れているとか)
単なる教養としての言語なのかな
言語仕様として一貫性があるとか、そんな感じなのかな
Scheme関連のチュートリアルを読んでみます
一応言っておくけど、Lispを学びたいからEmacs Lispをやるっていうのなら、 括弧になれるとか入口程度に思っておいた方がいいよ。 Emacs Lispは、見た目、Lispなだけだから。 末尾再帰を最適化できないから、再帰で書くことが事実上できなかったり、色々とLispらしくないから。
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.
>>130 コメント欄みてみるとハウルネタがやたらウケてるな。このアニオタどもめ!
言語仕様に問題のあるEmacs Lispだけどlispの総合環境としてはソースレベルデバッガあり、トレーサあり、 プロファイラあり勿論ディスアセンブラもありと割と至れり尽せりだったりする
>>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歳
>>133 "the car that's always in front of you."
は、俺だったら
「いつもそこにある車」 って訳すかな
(=古くてダサくて定番中の定番で面白くないけど、結局乗るのはこの車なんだよね、
的な意味で)
あと、「Scheme」 だぞ。typoかと思ったけど全部Schmeって書いてるってことは
本気で勘違いしてる?
schemeやelispはhogeライブラリのfoo関数ってのをhoge-fooみたいに定義せにゃならんからね この規則を使って階層になったライブラリの関数、hogeライブラリの中にあるfooライブラリの関数fの名前を付けると hoge-foo-fのようになってしまう 長くなるのは仕方ないけど、この規則ででかいアプリケーションは書きたくないよね
the car that's always in front of you というネタの原型はフォードT型。 あまりに売れすぎて、「どんなレーシングカーもフォードTの前に出ることはできない。どれだけ抜いてもまだ前にもう1台いる」というジョークが生まれたので。 スーパーカーとの対比で、性能はプアだけどみんなが使ってる普及版っていうニュアンスだろうな。 elispはよくも悪くもEmacsと切り離せないものなので、本当に言語の勉強をしたいならcommon lispかschemeのほうがいいよ。 逆にEmacsいじって遊びたいならelisp使うしかないし。
>>136 > elispはよくも悪くもEmacsと切り離せないものなので、本当に言語の勉強をしたいならcommon lispかschemeのほうがいいよ。
言語の勉強したいまでは、まだ至っていません
Emacsを使いこなせるようになりたいだけで
Schemeは、知っていて損はなさそうですね
チュートリアルの語彙も特徴的で好奇心をそそられる
英語・日本語の資料も豊富そうで資料には、困らないだろうし
プログラマとしての幅が広がるなら、なおうれしいかな
俺はバッファ、リージョン、選択範囲なんか用の map関数を書いてよく使ってるんだがこれ便利よ 色々関数を別途定義しといて 関数を行に対して呼び出す 2chに書き込むときによくやるのは タブ→スペース変換と 半角スペース→nbsp変換 こうするとプログラムはインデントされて見やすい ところで、久しぶりにここきたんだが xyzzyスレってどこいったの? 見つからないんだけど
ソフトウェア板とWindows板に1つずつあるよ。
あったあった、さんきゅー
142 :
デフォルトの名無しさん :2009/02/19(木) 18:25:06
行の(半角相当で)80文字目の位置をを色づけしたいとおもったんですが, とりあえず思いついた '(("^......................................................\ .........................\\(.\\)" 1 highlight-long-line-face append)) というのをfont-lock-add-keywordsして加えたところ、 当然ながら全角文字をいれると後ろにずれました 半角で80文字目の位置をを色づけする方法について、 なにかお知恵を拝借できませんでしょうか?
質問者じゃないけど めちゃめちゃ重いなそれw
>>143 ありがとうございます
そんなものが作られてたんですね、試してみます
>>144 うまい工夫をしないと速くならないだろうからなぁ。常に80文字目を数えるって
いうことだしね。
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)
あ、補則。このコードは行は意識してなくて、とりあえず指定箇所の背景色を変えたいだけです
とりあえずfont-lock-faceにしたら動いたけど (put-text-property 1 20 'font-lock-face 'highlight)
ありがとうございます。 それを実行したときは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
est
>>151 君の頭が腐っているというのを疑った方がいいよ
>>151 プログラマブル正規表現だっけ?
よくわからん
プログラマブルなのが使えるのは、インタラクティブに実行した場合だけでしょ。 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 :2009/02/28(土) 01:47:45
>> 154 そんな名前があるとは知らなんだ。 google先生は記号の検索には弱いしね・・・ >> 155 サンクス。インタラクティブ専用だったんだ。 よく使う置換の組を「お気に入り」みたいに登録して一発で呼び出せるlispを作ってたんだけど、 仕組み上、正規表現は自由に指定可能だから関数決めうち実行ができなくて。 プログラマブル正規表現は非対応とあきらめるしかないか。
>> と数字の間は開けないで
起動時にインタラクティブな関数を自動的に呼び出すにはどうしたらいい? 2画面で起動して、片方にSchemeインタプリタを起動したい 2画面の分割は、.emacsに(split-window-vertically)を追記したらうまくいったが M-x run-schemeが呼び出せないんだ
(run-scheme) ではだめなのけ?
だめぽ。そうするとこんなわけわからんエラーが出る 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
describe-function(C-h f)ぐらい覚えような
>>160 (run-scheme scheme-program-name)
(call-interactively 'run-scheme)
>>164 (call-interactively 'run-scheme)
これしらんかった、すげぇ勉強になった、ありがとう
いままでintaractive関数の機動失敗時はいつも.elの中調べてた。
elispで呼び出し元の関数名を調べるにはどうしたらよいのでしょう?
Meadow3(Emacs22)の画像インライン展開で質問です。 ヘルプ見る限り、create-imageはファイルからだけじゃなくデータも直接読んで 画像を作ってくれるみたいなんですが、うまくいきません。 insert-file-contents-literallyでテンポラリバッファに読み込んで渡してるんですが なにかやり方に問題があるのでしょうか? (insert-image (create-image "~/hoge.gif")) だと画像が出ますが、 (insert-image (create-image (with-temp-buffer (insert-file-contents-literally "~/hoge.gif") (buffer-string)) 'gif)) だとトウフが出てしまいます。
>>167 set-buffer-multibyte -> nil
DATA-P -> t
でどうです。
>>168 素早い指摘陳謝です。
無事表示されるようになりました。
ヘルプはちゃんと読まないとだめですね。
unibyteとかmultibyteはまだよく理解してないので勉強します。
ありがとうございました。
自分でメジャーモードとか作ろうと思った時に Infoとか書籍以外にこれは参考にすべきといったパッケージってなにがありますか? 色々眺めてるんですがみんな結構やり方が違っててよくわからなくなってきました。
>>170 Infoによるとtext-modeが最もシンプルだと言うから、text-modeがいいと思うよ。
Emacs22からdefine-derived-modeが使われててより簡単に作れるようになってる。
たった1行でも実行可能なのを今やってみて初めて知った。
(define-derived-mode hoge-mode nil "Hoge")
あとは、キーマップを定義するだけ。
ま、そういうわけでEmacs21と22のtext-modeが参考になる。
>>171 回答ありがとうございます。
見てみましたが雛形に丁度良い感じですね。
text-modeを足掛りにして頑張ってみようと思います。
標準配布されてるパッケージのコードは
基本的に正しいやり方(?)で書かれていると思ってよいんですよね?
#もっとスマートな方法があるのに変なやり方で無駄に処理を増やしてるとか
#メモリを無駄に使ってしまう書き方だったりとか....
>>172 必要なことを必要なだけ書けばいいんですよ。
メジャーモードとして機能するためには最低限何が必要か。
そこに、自分が欲しいものを追加していくだけです。
またそのために、例えばsyntax-tableを独自に定義した方がいいならそうするし。
defcustomなんかはdefvarで済ますこともできるけど、ひとが作ったパッケージを
利用するときはdefcustomの方が分かりやすいと思うので、そう考えるならそうするしとか。
コードを書く上では、自分でこれでいいと思うコードを書けばいいんです。
あとは、慣習に従うと。
コロン付きのキーワードシンボルってあんまり使われてない気がするんですが、 なにか歴史的理由とかバージョン間互換性とかの理由があったりするんでしょうか? alistのcarとかオプショナルな引数が沢山ある関数での&restで引数とる時のラベリングとか 値を取らないことを明示的に示してて便利だと思うんですけど(elispモードで色分けもされるし)、 色々ソース眺めた感じ、使ってるパッケージはガンガン使ってるんですが、 まったく使ってないところはcustomとかtext-property等ぐらいでしか使ってません。
175 :
デフォルトの名無しさん :2009/04/15(水) 16:51:29
よもや返事がくるとは思わなかったw 値が設定出来無い=ラベルとか専用ってことがコンパイラレベルで保証されてて よさげだと思うんですが・・・ とりあえずassocのcarはシンボル、plistと関数のrestはキーワードシンボルで 書き進めちゃってるんですが、いいんだろか・・・
177 :
デフォルトの名無しさん :2009/04/15(水) 20:11:53
コードリードしてるとき、コメントアウトうざいなーと思うことが多々あったので、 こんなコード書いてみました。スマートじゃない部分あるのでまだ改良しますが、 方向性として他に方法ないかアドバイスお願いします。
178 :
デフォルトの名無しさん :2009/04/15(水) 20:13:51
改行多すぎと怒られたのでbase64-encode-region KGRlZnVuIGhpZGUtY29tbWVudC1mYWNlICgpIAogICJmYWNlIGNvbW1lbnQgaGlkZSIgCgkoaW50 ZXJhY3RpdmUpCiAgIDs7JygxIDIgMyAuLi4uIGNvbW1lbnQgZmFjZSBwb2ludCBsaXN0KQoJKHNl dHEgY29tbWVudC13YWxrCgkJCQkobG9vcCBmb3IgeCBmcm9tIDEgdG8gKHBvaW50LW1heCkKCQkJ CQkJCWZvciBsb2ZhY2UgPSAobGlzdCAoZ2V0LXRleHQtcHJvcGVydHkgeCAnZmFjZSkgeCkKCQkJ CQkJCWlmIChvcgoJCQkJCQkJCQkobWVtYmVyICdmb250LWxvY2stY29tbWVudC1kZWxpbWl0ZXIt ZmFjZSBsb2ZhY2UpCgkJCQkJCQkJCShtZW1iZXIgJ2ZvbnQtbG9jay1kb2MtZmFjZSBsb2ZhY2Up CgkJCQkJCQkJCShtZW1iZXIgJ2ZvbnQtbG9jay1jb21tZW50LWZhY2UgbG9mYWNlKQoJCQkJCQkJ CQkpIGNvbGxlY3QgKG50aCAoLSAobGVuZ3RoIGxvZmFjZSkgMSkgbG9mYWNlKSkpCgkoYWRkLXRv LWxpc3QgJ2NvbW1lbnQtd2FsayAnLTEpIDsgYmFkIGNvZGUKCShhZGQtdG8tbGlzdCAnY29tbWVu dC13YWxrICctMiB0KSA7IGJhZCBjb2RlCgogICA7Oycoc3RhcnQgZW5kIHN0YXJ0IGVuZCBzdGFy dCBlbmQgLi4ub3ZlcmxheSByZWdpb24gbGlzdCkKCShzZXRxIGNvbW1lbnQtd2FsawoJCQkJKGxv b3AgZm9yIHJpZ2h0U3RlcCBpbiBjb21tZW50LXdhbGsKCQkJCQkJCWZvciBsZWZ0U3RlcCBpbiAo Y2RyIGNvbW1lbnQtd2FsaykKCQkJCQkJCWlmIChub3QgKGVxICgrIHJpZ2h0U3RlcCAxKSBsZWZ0 U3RlcCkpIGFwcGVuZCAobGlzdCByaWdodFN0ZXAgbGVmdFN0ZXApKSkKCShzZXRxIGNvbW1lbnQt d2FsayAoZGVscSAnLTEgY29tbWVudC13YWxrKSkgOyBiYWQgY29kZQoJKHNldHEgY29tbWVudC13 YWxrIChkZWxxICctMiBjb21tZW50LXdhbGspKTsgYmFkIGNvZGUKCgkoc2V0cSBjb21tZW50LW92 LWxpc3QKCQkJCShsb29wIGZvciBzdGFydCBpbiBjb21tZW50LXdhbGsgYnkgIydjZGRyIAoJCQkJ CQkJZm9yIGVuZCBpbiAoY2RyIGNvbW1lbnQtd2FsaykgYnkgIydjZGRyIGNvbGxlY3QgKG1ha2Ut b3ZlcmxheSAoLSBzdGFydCAxKSBlbmQpKSkKICAgOzsgd2h5IG5lZWQgcmVzPwoJKGxldCAocmVz KQoJCShkb2xpc3QgKG92IGNvbW1lbnQtb3YtbGlzdCByZXMpCgkJCShvdmVybGF5LXB1dCBvdiAn Y2F0ZWdvcnkgJ2hpZGUtY29tbWVudC1mYWNlKQoJCQkJCQkJCQkJCQkJCQkJCQkJCTsJCShvdmVy bGF5LXB1dCBvdiAnY2xlYW51cCB0KQoJCQkob3ZlcmxheS1wdXQgb3YgJ2ludmlzaWJsZSB0KQoJ CQkJCQkJCQkJCQkJCQkJCQkJCTsJCShvdmVybGF5LXB1dCBvdiAnZGlzcGxheSAiIikKCQkJKSkp
179 :
デフォルトの名無しさん :2009/04/15(水) 20:16:39
連投ごめんなさい、コード内容は、 コメントのfaceを見て、overlay作成し不可視にするlispです。
ろくに読まずに発言するけど、 ループのところってnext-property-changeで検索じゃだめなん?
>>175 elisp-manual-21-2.8.tar.gz を見てみたが、
keyword-symbols-constant-flag はすでになかった。
182 :
177 :2009/04/15(水) 20:37:10
>>180 ありがとございます、それ知らなかったので調べてみたら、
自分がやってることは非効率極まりないことまでわかりました。
ちょっと書き換えてみます。
というよりkeyword-symbol自体がそんなに沢山使われてない。
>>182 自分は使ったことないけど、
comment-search-forward と backward なんていう
もっとよさげな関数があったよ。
185 :
デフォルトの名無しさん :2009/04/16(木) 23:21:38
>>176 Emacs19 用 Elisp マニュには keyword で始まる名前自体がなくて : に関する記述もなさげだから
Emacs20 あたりで追加された新機能だと思われ
古い Emacs との互換性が不要なら使ってもいいんでないかな
自分自身を remove-hook するような hook は邪道でしょうか? 具体的にはバッファの内容を別の形式で別ウィンドウに表示するアプリを作っています。 編集中の内容をリアルタイムに反映させるため post-command-hook で監視を行なおうと思っているのですが、 変換後の表示バッファが消されていた場合、自分自身で remove-hook して後始末をしたいなと・・・
自分自身でremove-hook するって、子bufferの有無をずっと監視するってこと? 別ウィンドウで表示しているbufferのkill-buffer-hookに buffer local で post-command-hookのhookをremove するものを 仕掛けておくって思いついたんだけど、どうかな?
>>187 なるほど!
どう考えてもその方がスマートですよね。一々 buffer-live-p しなくて済みますし。
ありがとうございます。
/bin/shとかだと``でコマンドの実行結果をテキストで得られるけど 同じことをelispでしたい場合どうすれば良い? バッククォートはlispでは別な意味なのでアレだが (print `date`)で"Fri Apr 24 01:47:15 JST 2009"のようなことは出来ないかな
>>189 ドゾー
(print (shell-command-to-string "date"))
さんきゅー!
buffer中で使った単語をリストアップするlispを書いてます。(想定する用途は、coding中にtypoした単語がないかチェックする) 単語とその出現回数のAssociationListを作って、新規に作ったbufferにinsertするようにしました。 できないのがありまして、 アルファベット順にsortするのが上手くできないです。(出現回数の方も同様にオプションでsortするようにしたいけど、後回しになってます) (sort (mapcar '(lambda (x) (car x)) word-alist) 'string-lessp) とsortしたら、sort対象のcar部分だけでなく、元のリストがsortされて、値がもどってくるにはどうしたらいいのでしょう? (defun my-list-words () (interactive) (save-excursion (goto-char (point-min)) (let (word word-alist cu-word) (while (re-search-forward "[-_a-zA-Z]+" nil t) (setq word (buffer-substring (match-beginning 0) (match-end 0))) (if (assoc word word-alist) (setcdr (assoc word word-alist) (1+ (cdr (assoc word word-alist)))) (setq word-alist (cons (cons word 1) word-alist)))) ;;;この下のS式が、上手く表現できない (setq word-alist (sort (mapcar '(lambda (x) (car x)) word-alist) 'string-lessp)) (pop-to-buffer "*words list*") (erase-buffer) (mapc '(lambda (x) (insert (format "%s\n" x))) word-alist) ))) 他の点でもアドバイスがあれば、お願いします。
>>192 sort は破壊的関数。元のリストを残して置きたいならリストのコピーを sort する。
でも、この場合には必要ないと思う。
比較関数の例: (lambda (x y) (> x y)) == '>
word を取得するには、match-string が使える。
局所変数を使えば、assoc の呼び出しは1回でいい。
push を使ってもいい。
194 :
192 :2009/05/05(火) 17:54:22
>>193 さん、ありがとうござます。
おかげさまで、想定通りに動くようになりました。
比較関数の書き方もわかりました。
pushについては、後ほど調べて、また書き込みます。
直したところ:
match-string
(setq word (match-string 0))
局所変数、
(let、、に入れて、(setq current-word (assoc word word-alist))
比較関数の書き方を直しました。
(sort word-alist '(lambda (x y) (string-lessp (car x) (car y))))
このようになりました。
(defun my-list-words ()
(interactive)
(save-excursion
(goto-char (point-min))
(let (word word-alist current-word)
(while (re-search-forward "[-_a-zA-Z]+" nil t)
(setq word (match-string 0))
(setq current-word (assoc word word-alist))
(if current-word
(setcdr current-word (1+ (cdr current-word)))
(setq word-alist (cons (cons word 1) word-alist))))
(sort word-alist '(lambda (x y) (string-lessp (car x) (car y))))
(pop-to-buffer "*words list*")
(erase-buffer)
(mapc '(lambda (x) (insert (format "%s\n" x))) word-alist))
))
195 :
192 :2009/05/05(火) 18:22:13
すいません、少し間違えてました。 sortした結果を (setq re-list (sort word-alist '(lambda (x y) (string-lessp (car x) (car y))))) のように受けないといけませんでした。 sort対象のリストは、破壊されてしまうのですね。sortされるように破壊されると思い込んでました。 (setq lst '((banana . 1) (apple . 2) (orange . 1))) (setq r (sort lst '(lambda (x y)(string-lessp (car x) (car y))))) r => ((apple . 2) (banana . 1) (orange . 1)) lst => ((banana . 1) (orange . 1) もう一度、直したものを張っておきます。 (defun my-list-words () (interactive) (save-excursion (goto-char (point-min)) (let (word word-alist current-word) (while (re-search-forward "[-_a-zA-Z]+" nil t) (setq word (match-string 0)) (setq current-word (assoc word word-alist)) (if current-word (setcdr current-word (1+ (cdr current-word))) (setq word-alist (cons (cons word 1) word-alist)))) (setq re-list (sort word-alist '(lambda (x y) (string-lessp (car x) (car y))))) (pop-to-buffer "*words list*") (erase-buffer) (mapc '(lambda (x) (insert (format "%s\n" x))) re-list)) ))
あ、hashあるんだ。
>>197 の方が圧倒的に速いね。
hash って emacs lisp の info にあんまり使うなって書いてあった気がするから なんでも assoc で済まそうって癖がついてしまった。
>>199 infoには、10項目以内なら連想リストの方が速いけど、それ以上の場合は
ハッシュを使ったほうがいいと書いてあるぞ。
elispの&optionalって省略されたときnilが設定されるようだが 使い方はこんな感じで良いのでしょうか? (defun iota (count &optional start step) (or start (setq start 0)) (or step (setq step 1)) (loop for n from start to (+ start (* (1- count) step)) by step collect n))
そんな感じ 省略時にnil以外の値という扱いのときはdocstringに書いておいた方がいいかな
204 :
202 :2009/07/03(金) 00:59:59
>>203 docstringね
ありがとう
それとこの場合はこうか
(setq start (or start 0))
(setq step (or step 1))
205 :
202 :2009/07/03(金) 01:05:03
(setq start (or start 0) step (or step 1))
(eval-when-compile (require 'cl)) (defun* foo (a &optional b (c 5) &key d (e (user-login-name))) (list 'a a 'b b 'c c 'd d 'e e)) (foo 1) (a 1 b nil c 5 d nil e "bar") clだと全部使える。やっぱ、clはいいね。
clにformat*ってのがあるといいんだけどなぁ
作れよ
emacs-lisp 上での common lisp の関数/マクロ名と ピュアな common lisp の関数/マクロ名との マッピングの在処を知っている方いませんか? 例えば、 defun* → defun (cl*/el → cl) とかです。
clモジュールのことか? cl.el を見ればわかるんじゃね? CL と emacs-lisp では根本的に違うところもあるから 必ずしも一対一に対応してるとは限らんが
211 :
デフォルトの名無しさん :2009/08/14(金) 06:09:19
Emacs Lisp が末尾再帰を最適化していない理由って何ですか?
みんな末尾再帰を使わないから
>>212 最適化が成されていないから使う必要がない。
だから末尾再帰を使う人がCLに比べるとかなり少なくなる。
それは最適化していないことの理由ではない。
違いわかるよね?
末尾再帰しててもアドバイス定義したら末尾再帰にならなくなったりするんじゃね? コンパイル時に最適化してしまうと後で困る。 よく誤解している人がいるけど、 cl や emacs-lisp は関数型言語なんかじゃありませんから!!
215 :
デフォルトの名無しさん :2009/08/14(金) 11:58:15
じゃあなんなんだよ。 そんなの「吉野屋やすき屋は牛丼なんかじゃありませんから!」並の理屈だぞ。
勝手に末尾再帰されるようなマクロ書けってスタンスじゃね? マルチパラダイムうんぬんは関係ないかと
>>214 emacs-lisp は "ほぼ" 関数型言語。
cl は関数型言語。
219 :
デフォルトの名無しさん :2009/08/14(金) 21:49:36
吉野屋やすき屋は牛丼じゃない
>>211 実装が面倒くさいから。
ってcompile.elのソースに書いてあったと思ったよ
ソースすら読まない馬鹿は本当にしょうがないな
……何にどう書いてあるって?
\ \ ∧ニユ/ ̄ヽ \ ( ´∀/) i \.\ _(」つ/とl) . | \ ;::;::\i\ 匚レ| .〈/ ) | \ 。::;;:'\.\ (_,)ー' |_,, -'''"! ^人;:'::;゚:;.\l\ _,,, -''"|_,, -''"| ^^从::;;:。':\.\_,, -''"|_,, -''"| . :| へ ^へ;;::';;:'\l_,, -''" . | 从^ 〜 ^ ^ヘ^人从::;;;:| ,ィ人^. | ^ ^へ^^ 〜 ^.へ' ^':レ^从 へ' | 〜 ^ へ ^^ へ 〜人^ ^ へ〜 〜
>>220 最近 emacs スレッドにもいる、前頭葉が未発達で可哀想な方ですよね。
わかります。
$ grep -E '\b(tail|recursion)\b' compile.el | wc -l
0
emacsclient の、標準入力って使えないのかな? こんな感じに % date | emacsclient これとか、 % date | emacsclient - % date | emacsclient --eval '(read)' 試したんだけど、違った。
>>220 > ってcompile.elのソースに書いてあったと思ったよ
byte-opt.elの間違いじゃないの?
>>223 もうちょっと頭使えば正解にたどり着けたのにね
泣きながらgrepしたんだねw でも面倒くさいからなんて書いてないからwww
とgrep厨が申しております
じゃあ私はemacs厨!
キッチンシンクなだけに厨がよく似合います
うまいな
Emacs LispにCommon Lispの merge-pathnames に相当する関数はありますか?
>>234 expand-file-name ですね。
ありがとうございます。期待通りの動作ができました。
236 :
231 :2009/08/22(土) 04:16:29
sudo patch -p0 < 50a2ps.patch でいけました。lispとは関係なかったですか。
>>236 だって、知りたいのはpatchコマンドの使い方だったわけじゃない?
例えば、LinuxカーネルがC言語で書かれてるからって、
C言語のスレでカーネルのコンパイルの仕方とか聞かないでしょ?
diffとpatchは、UNIX系のOSを使う上で知っていると便利だから、
当て方、作り方、読み方は知っておくといいと思う。
ともあれ、無事に当たって良かったね。
Python だと、例えば def foo (*args): ... の関数を L = (1, 2, 3) foo(*L) # foo(1, 2, 3) と同じ意味 と実行することが可能なのですが、emacs lisp でも同様に (defun foo (&rest args) ...) の関数の引数をpre-expandすることは可能ですか? イメージとしでは (setq L '(1 2 3)) (foo *L) のような感じです。
applyを使う 詳しい使い方は(info "elisp")見てくれ (let ((strs '("foo" "bar" "baz"))) (assert (string= (apply 'concat strs) (concat "foo" "bar" "baz"))))
やはりその用途だと apply を使うしかなさそうですか。 ありがとうございました。
度々質問すみません。 `sleep-for' は "without updating display" なので、 (insert foo) (sleep-for n) をしても foo の中の文字列がバッファ上に表示される前に n 秒止まる作用があるのですが、 foo の内容を "表示させた後" に sleep する方法はありますか?
>>241 自己解決しました。 (redisplay t)
mode line と echo area を消す方法はありますか?
しかし、emacsコアのソースコードは綺麗だなー。
Emacsで独自コマンドを定義したいのですが M-x hoge 3 の用に引数を与えるか、もしくは M-x hoge Input number: の用にプロンプトを出したいです。 両方の方法について調べてみたのですが どちらについても解説が見つかりませんでした。 どのようにすれば良いのかご教授ください。
>>245 前者は interactive の引数に N だか p だかを加える。
後者は (defun hoge () (read-number "Input number: "))
ありがとう御座います。 助かりました.
interactive に n ってのがあるよ。
(defun hoge (num) (interactive "nInput number:") (message "%d" num))
interactive は関数型的ではないので嫌い。 便利そうに見せかけて逆にプログラムを汚くするから嫌い。 コードレターが文字列に混ざっていてキモイので嫌い。
どうしたいんだ?文句いうだけ?
>>251 たった今、今年一番のセックルしてきたからこの際素直になるわ。
ごめん、文句言うだけだった。
253 :
デフォルトの名無しさん :2009/09/06(日) 11:39:53
emacs(parentプロセス)が死んだ時に、emacsから立ち上げた 特定のchildプロセスは生き残るようにする方法はありますか?
>>253 daemon化するのと同じような処理をする。
二段forkしたり、ttyやプロセスグループを切り離したり。
>>254 いままでは bash 経由でそれを実現していたのですが、
emacs の関数でそういったオプション指定は可能なのかと思って質問しました。
sense-region.el は使えるんだが、コードがちと orz なんだよな。 emacs 23.* コンパイラーでwarningがでないように、コードクリーンアップ した人いる?
したよ。 rm ./sense-region.el
つまらなくはない。 むしろ本質をついたレスだと思う。 哲学的な嫌いはあるけどね。
うん、つまらないね。
デカルトになぞらえていえば sense-region.elある故に問題あり 一つの正答だろう。
つまらんだろ普通に。
つまらなくない。
\もうね、アボカド/ \バナナかと/ ┌┐ ヽ / / γ⌒^ヽ / / i /:::::::::::::ヽ | (,,゚Д゚) /::::::::(,,゚Д゚) |(ノi |) i:::::(ノDole|) | i i ゙、:::::::::::::ノ \_ヽ_,ゝ U"U U" U
>>261 コードがちと orz 故に問題あり
と思われ
アホな質問すいません。 dired-do-shell-command したところ、 *Shell Command Output* のバッファーが kill-bufferで削除できなくなりました。 emacs -Q で起動して試すと削除出来たので、 自分で入れているelispの設定だと思うのですが、 見当がつきません。 kill-bufferで削除できなくするflagとか有りませんでしょうか? それを単語を元にひっかけようかと思うんですが…
267 :
Zeno ◆5nZQbNmQPs :2009/09/15(火) 17:36:11
>>266 (progn
(setq kill-buffer-hook nil)
(ignore-errors (ad-disable-advice 'kill-buffer 'any ".")))
を実行してみたまえ。
268 :
266 :2009/09/16(水) 00:42:32
>>267 レス、どうもです。
上記、S式を評価しても、削除出来ませんでした。
その後、しばらくイジっても削除できず、
結局、再起動したのちshell-command を使って、
そのbufferを削除すると、出来ました。
そして、おかしくなった前回のsessionでやったようなことを順番に行っては
shell-command -> buffer の削除
と、繰り返してみたのですが、すべて削除できてしまいました。
この事象は、今回だけではなく、少し前にも起きたことなので、
まるっきり偶発的でもないと思っています。
ただ、どのような仕組みで、bufferが削除できないのか良く判らないので、
ご存知の方、教えてください。
; 実害は、ないんですけどね。
; 結果を見た後、C-x k を押して、bufferが残ってると
; ちょっと、イラッとくるぐらいで。
quote や lambda の内部で予め式を評価する方法がわかりません. 例えば (let ((v 10)) (lambda (n) (+ n v))) => (lambda (n) (+ n v)) これを以下のように評価することは可能でしょうか. (lambda (n) (+ n 10)) 初歩的な質問で申しわけありませんが,ご教示願います.
(let ((v 10)) `(lambda (n) (+ n ,v)))
>> 270 ありがとうございます. やはり方法があったんですね,非常に助かりました!!
272 :
Zeno ◆5nZQbNmQPs :2009/09/25(金) 08:16:26
>>269 >>270 その場合は意味合い的に
(lexical-let ((v 10))
(lambda (n) (+ n v)))
とした方が良い。
>>272 しかしこういう場合には
>>270 のやり方の方がいいんではなかろうか。
(setf foo nil)
(lexical-let ((v 10))
(push (lambda (n) (+ n v)) foo)
(incf v)
(push (lambda (n) (+ n v)) foo))
(message (format "%S" (cons (funcall (car foo) 1) (funcall (cadr foo) 1)))) => (12 . 12)
274 :
Zeno ◆5nZQbNmQPs :2009/09/25(金) 09:03:55
>>273 "こういう場合には" とは言うが、そのような
馬鹿げたコードを書く人間は放置されるであろう。
同様のことをしたいのであれば、以下のように書けば良い
(というか、以下のスタイルにするべき)。
(setf foo nil)
(defun bar (v)
(lexical-let ((v v))
(lambda (n) (+ n v))))
(push (bar 10) foo)
(push (bar 11) foo)
(message (format "%S" (cons (funcall (car foo) 1) (funcall (cadr foo) 1))))
=> "(12 . 11)"
lexical-let 使うなら (require 'cl-macs) 書いておくべきだろ
いつからか知らないけど、少し前から autoload ついてるよ。
277 :
デフォルトの名無しさん :2009/09/26(土) 01:26:35
let と let* で二つに分ける理由ってなんですか? ついでにもう一つ、macroexpand-系を使って、 マクロ動作を勉強してるんですが、 *Message*バッファには省略形のリストしか表示されないです。 全部理解するには、edebug-defunでデバッガ起動するしかないのですか?
278 :
Zeno ◆5nZQbNmQPs :2009/09/26(土) 03:08:07
>>277 > let と let* で二つに分ける理由ってなんですか?
(let* ((x 1)
(y x))
(cons x y))
=> (1 . 1)
(let ((x 1)
(y x))
(cons x y))
=> Error ...
let* は (let 変数定義1 (let 変数定義2 (let ...)))
という風にletでネストされていると考えても良い。
分かったら固定ハンドルを付けろ。
いや意味の違いじゃなくて”何故”両方ある必要があるのかって質問でしょ
>>279 > いや意味の違いじゃなくて”何故”両方ある必要があるのかって質問でしょ
| let* は (let 変数定義1 (let 変数定義2 (let ...)))
| という風にletでネスト
するのが面倒だから。
281 :
269 :2009/09/26(土) 04:27:21
>>272-276 回答頂きありがとうございます.
まだ未熟でコードの善し悪しの判別は付きませんが,提示頂いた lexical-let
を使って書くことにしました.
ちなみに quote 内で評価する場合は(回答頂いた中では)
>>270 でしか展開さ
れないみたいですね.
(lexical-let ((s "test"))
(quote s))
=> s
(let ((s "test"))
`(quote ,s))
=> "test"
非常に勉強になりました!!
>>281 > ちなみに quote 内で評価する場合は(回答頂いた中では)
>>270 でしか展開さ
> れないみたいですね.
当たり前だ。 quote は数ある special form の一つで、
その引数は評価されないまま内部に渡される。
根本的に理解できていないようだから、まずは common lisp から
学んでみることを勧める。
わかったらさっさと本屋に直行しろ。
283 :
Zeno ◆5nZQbNmQPs :2009/09/26(土) 04:47:51
私は emacs スレを長らく留守にしていたのだが、 フンバリャーウンコ・ヨーデルは現れなかったかね? フンバリャーウンコ・ヨーデルはいるかね? 見ているなら返事をしたまえ。
>>282 quote については理解しているつもりですが,
今回は引数を渡す前に例外的に評価されるようにしたかったのです.
quote でも渡される前に評価されると思ったのは, lambda が function で内
包して返すマクロだからです.
(macroexpand (lambda () "test"))
=> (function (lambda nil "test"))
しかし,function でも渡される前に評価されるわけではないんですね
(lexical-let ((s "test"))
(function s))
=> s
そもそも help に書いてありました...
>lambdas inside BODY will create lexical closures
lisp を理解できていないのは自覚しているのでアドバイス通り common lisp
から勉強したいと思います.
復刊なった「はじめての人のためのLisp」が発売されたら、 少しは、「少しは本を読め」な質問減るかなぁ。
CommonLispを勉強したら EmacsLispが嫌になっちゃったりして。
そしたらようこそwin&xyzzy Macで使えたらなぁ…
288 :
デフォルトの名無しさん :2009/09/26(土) 11:12:08
ソース公開されてるよ。C++で書かれていたので面倒くさくて読んでないけど。
Common Lisp と Emacs Lisp の関数の対照表みたいなのってある?
290 :
Zeno ◆5nZQbNmQPs :2009/09/26(土) 20:56:17
291 :
Zeno ◆5nZQbNmQPs :2009/10/02(金) 16:10:23
292 :
デフォルトの名無しさん :2009/10/05(月) 22:29:10
Emacs LispとCommon Lispの違いは何でしょうか? 私はUbuntuにclispをインストールし、端末上でClispを起動した後,(format t "Hello World")と打ち込んでEnterを押しました。 実行結果として、端末にHello Worldと表示されました。 しかし、Emacs上で上記を打ち込んでCtrl + jを押しますと、エラーらしき文章が・・・ Emacs Lisp と Common Lispというのは方言の違いを表しているのでしょうか、 実際に、出来ることと出来ないことの差というものもあるのでしょうか?
そりゃ別のものだからね。差もあるだろう。
294 :
デフォルトの名無しさん :2009/10/05(月) 22:43:04
>>293 Emacs lispの使われる用途
Common lispの使われる主な用途
を教えてください。
また、上記両方のlispに関して参考サイトとしての大御所・・・と言えるような海外サイトがあれば教えて頂きたい
Emacs Lisp はそりゃ Emacs を拡張したり開発したりするのに使う。 Common Lisp はもっと計算速度が欲しいとか大規模なものを作る人々が使う。 大御所ねぇ。権威が欲しいならHaskellとかScalaとかピカピカのやつやったほうがいいと思うよ。
296 :
デフォルトの名無しさん :2009/10/05(月) 22:53:29
成る程・・・ わかりました。最初はCommon Lispから始めようと思います。それでは
オイオイ… Emacs Lisp は Emacs の名を冠するだけあって Emacs の拡張・カスタマイズ用に決まっておろうが。 Emacs は本当に基本的なコアを除いて Emacs Lisp で書かれてるんだぜ。 Common Lisp の主な用途って言っても汎用言語の主な用途なんて言ってもしょうがないと思う。 とりあえず Common Lisp スレがあるからそっち行け。
lispは方言が多い言語としても有名なんだったよね。
ruby
301 :
デフォルトの名無しさん :2009/10/07(水) 00:35:00
JavaScript も Lisp in C's Clothing だ
標準ライブラリみたいなもんって lisp だと何?
303 :
デフォルトの名無しさん :2009/10/07(水) 00:42:55
CL なら CLtL2 Scheme なら SRFI
304 :
デフォルトの名無しさん :2009/10/07(水) 17:19:58
Emacs Lisp でウェブアプリって書けないかな? ウェブできればグラマーの幅が広がって共有ノウハウも増えるはずなんだけど。
グラマー?
トランジスタ?
308 :
デフォルトの名無しさん :2009/10/07(水) 22:58:12
>>304 ウェブのソフトウェアなんてシェルスクリプトでも書けるんだぜ。
Emacs のノウハウを心配するより、君自身のノウハウを増やした方が良いと思うぞ。
GNU Emacs 23.1.1 (i386-mingw-nt5.1.2600) of 2009-07-30 on SOFT-MJASON で EmacsWiki から持ってきた anything, anything-config を使っています。 anything-sources に anything-c-source-* 一つずつ足していって試してみているのですが anything-c-source-info-elisp を足したところで progn: Symbol's function definition is void: Info-find-node とエラーを吐いて止ってしまいます。 Enter Debugger on Error を使ってみたところ、*Backtrace*に次のようなメッセージ(次レスに貼ります)が出ました。 どうやら Info-find-node が定義されていないとのことですが どう対処してよいかわかりません。 何かアドバイスをいただけませんでしょうか?
Debugger entered--Lisp error: (void-function Info-find-node) (Info-find-node "elisp" "Index") (progn (Info-find-node "elisp" "Index") (setq anything-c-info-elisp (split-string ... "\n")) (Info-exit)) (unwind-protect (progn (Info-find-node "elisp" "Index") (setq anything-c-info-elisp ...) (Info-exit)) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn ... ... ...) (and ... ...))) (with-current-buffer temp-buffer (unwind-protect (progn ... ... ...) (and ... ...))) (let ((temp-buffer ...)) (with-current-buffer temp-buffer (unwind-protect ... ...))) (with-temp-buffer (Info-find-node "elisp" "Index") (setq anything-c-info-elisp (split-string ... "\n")) (Info-exit)) (if anything-c-info-elisp nil (with-temp-buffer (Info-find-node "elisp" "Index") (setq anything-c-info-elisp ...) (Info-exit))) (unless anything-c-info-elisp (with-temp-buffer (Info-find-node "elisp" "Index") (setq anything-c-info-elisp ...) (Info-exit))) (save-window-excursion (unless anything-c-info-elisp (with-temp-buffer ... ... ...))) (lambda nil (save-window-excursion (unless anything-c-info-elisp ...)))() apply((lambda nil (save-window-excursion (unless anything-c-info-elisp ...))) nil) (let ((anything-source-name ...)) (apply func args)) anything-funcall-with-source(((name . "Info Elisp") (init lambda nil (save-window-excursion ...)) (candidates lambda nil (loop for i in anything-c-info-elisp if ... collect ...)) (ここで改行を挿入) (action lambda (candidate) (Info-find-node "elisp" "Index") (Info-index ...)) (volatile) (requires-pattern . 2)) (lambda nil (save-window-excursion (unless anything-c-info-elisp ...))))
(while --cl-dolist-temp-- (setq func (car --cl-dolist-temp--)) (anything-funcall-with-source source func) (setq --cl-dolist-temp-- (cdr --cl-dolist-temp--))) (let ((--cl-dolist-temp-- ...) func) (while --cl-dolist-temp-- (setq func ...) (anything-funcall-with-source source func) (setq --cl-dolist-temp-- ...)) nil) (catch (quote --cl-block-nil--) (let (... func) (while --cl-dolist-temp-- ... ... ...) nil)) (cl-block-wrapper (catch (quote --cl-block-nil--) (let ... ... nil))) (block nil (let (... func) (while --cl-dolist-temp-- ... ... ...) nil)) (dolist (func (if ... ... it)) (anything-funcall-with-source source func)) (if it (dolist (func ...) (anything-funcall-with-source source func))) (let ((it ...)) (if it (dolist ... ...))) (anything-aif (assoc-default sym source) (dolist (func ...) (anything-funcall-with-source source func))) (while --cl-dolist-temp-- (setq source (car --cl-dolist-temp--)) (when (symbolp source) (setq source ...)) (anything-aif (assoc-default sym source) (dolist ... ...)) (setq --cl-dolist-temp-- (cdr --cl-dolist-temp--))) (let ((--cl-dolist-temp-- ...) source) (while --cl-dolist-temp-- (setq source ...) (when ... ...) (anything-aif ... ...) (setq --cl-dolist-temp-- ...)) nil) (catch (quote --cl-block-nil--) (let (... source) (while --cl-dolist-temp-- ... ... ... ...) nil)) (cl-block-wrapper (catch (quote --cl-block-nil--) (let ... ... nil))) (block nil (let (... source) (while --cl-dolist-temp-- ... ... ... ...) nil)) (dolist (source (anything-get-sources)) (when (symbolp source) (setq source ...)) (anything-aif (assoc-default sym source) (dolist ... ...))) anything-funcall-foreach(init) ad-Orig-anything-initialize() (setq ad-return-value (ad-Orig-anything-initialize)) (let (ad-return-value) (setq anything-c-adaptive-done nil) (setq ad-return-value (ad-Orig-anything-initialize)) ad-return-value) anything-initialize
info.el ロードされてないんだな。anything より前に (require 'info) とでも書いたらどうかな。
Emacs怖い。数十年後もEmacs使ってそう。
選択した語をサーチエンジンで検索してw3mで表示するelispってあります?
どっかで拾った google.el ってのがそんな挙動だな。 内容は region が活性だったら google 用の検索 URL 作って browse-url で デフォルトのブラウザ呼び出すだけのシンプルなのだったけど。
EmacsWikiのdim-google.elっていうのが求めるものでした 探せばすぐに見つかるものでしたね お手数をかけました
孫にEmacsの手ほどきをするのが老後の夢
emacsをp2pで繋ぐのが夢だ
Emacsがmacびいきな名前だからEwinsにするのが俺の夢だ。
321 :
Zeno ◆5nZQbNmQPs :2009/10/15(木) 16:41:39
>>320 自分でソースを引っ張ってきて、ソース内、そしてファイル名に含まれる
[Ee]macs を [Ee]wins に変換すれば良いだろうが。
322 :
Zeno ◆5nZQbNmQPs :2009/10/15(木) 16:45:56
>>320 それと一応教えておくが、MacよりもEmacsの方が先だ。
もしそういうことにしたいのであれば「Emacsがmacびいきな名前」ではなく、
「MacがEmacsびいきな名前」と解釈するのが正しい。
いまどきEmacsなんか使ってたら厨か老人扱いだろ。 なんでそうなったかっていうと、圧倒的大多数を占めるWindowsに インターフェースを合わせなかったからだろうな。 標準をWindowsに合わせて、オプションで旧Emacsを選べるのが 本来の正しい姿。
>>323 君面白いねw
というかWindowsがEmacsにあわせるべき。
Macはもう合わせてる。
325 :
Zeno ◆5nZQbNmQPs :2009/10/15(木) 17:31:04
中身が理解できていない為、デフォルトの見た目について あれこれ文句を言うことしかできない真性の阿呆は放っておけ
xkeymacsでええやん
「窓使いの憂鬱」も忘れないで!
ありゃキーロガーだから死すべきもの
なんでEmacsはwindowsで使えないの? windowsアンチなの?
331 :
デフォルトの名無しさん :2009/10/15(木) 22:28:12
なんでwindowsではEmacs使えないの? Emacsアンチなの?
なんでwindowsでEmacs使えないと思ってるのかが謎だ
meadowもemacsだろ
emacsでパソコンとお友達になれますか?
オフィシャルに Windows のバイナリもあるというに。
いまどきMeadowはないだろ。。。
meadowはemacsenだけどNTEmacsはEmacsだよな
xyzzy も忘れずに
339 :
デフォルトの名無しさん :2009/10/16(金) 19:42:53
Windows マシンを持ってないんだけど、xyzzy って Emacs ユーザから見て実際どうなの? ・これだったら Emacs で十分だぜ ・これなら十分 Emacs の代替になるな ・こ、これは Emacs より断然スゲー!
mgみたいなもの
341 :
デフォルトの名無しさん :2009/10/16(金) 20:10:49
それは elisp が使えなければ Emacs に非ずって事かな?
Emacs 的に見るとまがいもんだけど、 エディタ全般的に見ると xyzzy には xyzzy の良さがある。 着想の元が Emacs だとしても今では別物。 比較するようなもんじゃない。
343 :
デフォルトの名無しさん :2009/10/16(金) 20:26:26
なるほど、別物なのか… ありがと。
Emacsとして見ようとすると違和感があるけど、 Windowsアプリとして見るとEmacsより違和感が無いって感じ(´・ω・`)
メモ帳感覚で使えて、かなりemacsぽくもつかえる
正直、Windowsつこうてる時は、Emacsよりもxyzzy使うことのほうが多い僕は異端児。
ただ細かい部分でEmacsと違うから Emacs好き好きすぎるとかえってストレスたまるかもしれんね。
Emacs好き好きだったら当然Window上でも本物Emacs入れてるでしょ。 今のWindows用EmacsはUSBに入れて持って歩けるしね。
emacsそのものより利用者が作ったライブラリとか付属のelispを使う為ってのが大きい
>>349 大昔にマイコンさわったときの最初のエディタがmince(micro emacs)だったと言うだけでemacs以外さわれない体になった俺みたいなのもいる(普通はwordmasterだった頃)
RPN電卓さわってしまった工学系学生とおなじようなもんだけど
よく「最初にXXXXをさわったからXXXXしか使えなくなった」って言う人がいるけど 単に適応能力が普通の人に比べて足りてない能無しってだけだよね。 価値のある体験談でもないし勿論自慢にはならない。
さわれないっていうよりさわりたくない、ぐらいだろね 必要にせまられればどんなエディタでも結構なんとかなったりする
>>351 もちろん君はQwerty配列でもDvorak配列でも全く同等に使えるんだよね?
>>351 emacsとvi好きに喧嘩売るとはなんという宗教戦争マニア!
>>351 エディタとか割とよく使うもの(鉛筆とノートのように)だと最初の原体験で得た物と次にさわった物の間で入力速度に差があると二度と他に移りたくなくなる物だよ
今の時代のようにしょっちゅう入れ替えができたり物が選べる時代じゃないならなおのことだ(当時はストレージがFDドライブ二個が上限だったしエディタ買うのだってものすごく高価だった)
今でも各種IDEのキーバインドにエディタ名を冠した設定がある事がそれを物語ってるよ
仕事だとそんなふぬけたこと言ってらんないんだけどね。
357 :
デフォルトの名無しさん :2009/10/25(日) 01:51:57
>>353 どっちも十分に経験していれば、当然どっちも十分に使えるだろうね。
普通の人は。
脳に欠陥のある人は、二つ目の経験が一つ目を吹き飛ばしてしまうかも。
359 :
デフォルトの名無しさん :2009/10/25(日) 02:16:32
一時期 RPN 電卓を覚えようとした事があったけど、常にパソコンを 携帯していたので電卓の出番が無くて結局覚えられなかったなあ。 bc って打つ代わりに dc って打てば良いだけだったんだけど、そこは やっぱり人の性、要らん物は覚えないね。
「一事なれば万事成る」っていうじゃないか。 まず一つの事を深く知ることが大事だろ。
>>358 >どっちも十分に経験していれば、当然どっちも十分に使えるだろうね。
ただし、
日本ではQwertyを強制される機会は多くてもDvorakを強制される機会はほとんどないため
普通の人はQwertyしか使えない。
自分で乗りかえようと思い立った人か幸運にも最初がDvorakだった人のみが
Dvorakを使えるというのが現状。
だからどっちも十分に経験していれば、という前提が非常にレアケース。
普通の大部分の人は
「最初にQwertyをさわったからQwertyしか使えない。」
>>361 もっともらしく文章書いてるが結論でいきなり論理が飛躍している上に間違っている。阿呆。
最初にQwertyをさわったからQwertyしか使えない。
ではなく
QwertyしかないからQwertyしか使わない。
程度の事しかおまえさんの文章では結論できない。
>>362 >QwertyしかないからQwertyしか使わない。
そこらじゅうにDvorakに触れる機会はあるよ。
ただみんなそれを選んでないしそうする必要もないだけ。
だから普通は選ばない。
理由は慣れてないから。
なぜ慣れていないかと言うと普通は最初にDvorakを触っていないから。覚えるコストも大きい。
どこか違うの?
そんなことよりいい加減スレ違いなのに気付こうぜ。 最初に触れたのが Common Lisp だから Emacs Lisp が気持ち悪いって話題ならともかく・・・
>>353 もれはASCII配列のQWERTYしか使えない
ANSI配列って言いたいんだろうな
Emacsユーザの場合、「使えない」には3つのパターンがある。 a)操作性が同じじゃないので使えない。 b)XXXというEmacsLispと同等のものを、他のエディタ上で用意できない。 c)作り貯めたマクロを移行するのが大変すぎる。 aは極論すれば慣れればなんとかなるわけだが、Emacs歴20年です、 という人なんかはb, cが大変だと思われ。
368 :
367 :2009/10/25(日) 11:00:48
で、個人的にはもう一つ、 d)クラスプラットフォームでGUIでもターミナルエミュレータでも使えるエディタが極めて限られる。 てのがあって、Emacsを捨てたくてたまらないのに(今のところ)移行先が見当らないという……。
369 :
デフォルトの名無しさん :2009/10/25(日) 11:26:48
自分が使うエディタは好きな物を選べるから、実質上困った事無いなあ。 困ってない事を解決するのは余程の暇人じゃないと難しい。
人によって環境違うしな。 UNIX上での仕事メインならEmacs使うのになんの支障もないだろし 他のOSでもエディタの指定がゆるいならバリアントを入れればいいし 仕事じゃなくて趣味ならおさっしだし。 navi2chしか使ってないくせにEmacsしかもう使えない!なんていってるやつは 死ねばいい
>navi2chしか使ってないくせにEmacsしかもう使えない!なんていってるやつは >死ねばいい 流石にネタだと思いたい
あーいそうだそういうのw UbuntuインストールしただけでLinuxマスター(笑)になっちゃって わけしり顔でWindows批判はじめだすような人種だな
仮想敵かよ
♪見えない敵にマシンガンを〜
見えない敵ではなく、見える雑魚だろう。
deffaceはどうやらdefvarと同じく上書きがされないみたいなんだけど このdeffaceの引数と同じ書式で上書き可能な関数ってあります? (set-face-* ...)もあるけど、できればまとめて定義したいので
>>376 set-face-attribute とか?
こんなのってない? 【プログラミング万歩計】 ファイルの拡張子ごと、日付ごとに自分が何回タイプしたか統計を取る。 健康増進的なノリでプログラミング力を鍛える励みにする。
みたいなのっていうかそのものっぽいな。 拡張子毎ってあたりは適当に細工しなきゃいけないだろうけど。
382 :
379 :2009/12/01(火) 22:05:16
elispでチャット作ったけど使ってくれる人がいない
全emacsenが泣いた
emacs 上で現在動いている timer の一覧を得る、なんてことはできませんか?
10年くらい前に書いた関数だけど、まだ動きそう。 (defun describe-timer () (interactive) (let ((tl timer-list) timer) (pop-to-buffer (get-buffer-create "*timer*")) (erase-buffer) (insert "TIME FUNCTION\n" "-------------- --------------------------\n") (while tl (setq timer (car tl)) (insert (concat (format-time-string "%m/%d %T" (list (aref timer 1)(aref timer 2)(aref timer 3))) " " (symbol-name (aref timer 5)) "\n")) (setq tl (cdr tl)))))
timer-list に保管されてるのか。 すばらしい。ありがとう!!
388 :
デフォルトの名無しさん :2009/12/09(水) 04:58:04
スレ違いですが、教えてください。 さっきMeadowを使っている人は少なくて本家のgnu emacs winバイナリを使っている人が主流みたいに書いてあったのですが、みなさん日本語入力はどうしてます?
skk
390 :
デフォルトの名無しさん :2009/12/09(水) 08:43:22
なるほどSKKですか、MS-IMEやATOKを使っている方はいらっしゃらないでしょうか。 そもそも使う方法はないのでしょうか。
>>388 なぜ、このスレで質問してるのか、よくわからないが、MS-IMEでMeadowに入力できたと思うけどなあ。
で、Meadowで何をしたいんだ?
emacsを使いたいなら、マウスを持たずにCUIで作業するのが理想だと思うなあ。
>>391 いきなりマウスの話題が出てきた理由って何なの?
>>391 ん?
Meadow じゃなく gnu emacs win バイナリで日本語入力はどうしてるの?
って質問じゃないかと。
395 :
デフォルトの名無しさん :2009/12/09(水) 20:05:24
>>391 elispスレなので、本家のgnu emacsを好む方が多いかなと思って質問させていただきました。
>>394 23baseがあれば嬉しいですが、すみません、わがまま言いすぎですよね。
396 :
デフォルトの名無しさん :2009/12/09(水) 20:10:24
>>394 すみません。リンク先をよく見ていませんでした!
emacs23のIMEパッチをしてくださったんですね。早とちりしてNTemacsのことだと思っていました。すみません。
さっそく試してみます。ありがとうございました!
y-or-n-p関数についてなんですが * 端末から利用するとQuit(\C-g)が効く * Xから利用するとQuitが効かない てのは、正しい動作なんでしょうか?
今、X上のemacsで (y-or-n-p "hoge") とやってみたけど C-g でquitできたよ。
>>398 てことは、ウチの環境だけみたいですかね。。
正しくはXじゃなくてGTK@Ubuntuなんですけど
sql-mode をつかってるんだけど、"REM" をコメント風に認識させられない? remark 文の中の '09/12/20 みたいな ' 文字がでる度に string だと認識されて困る
来年は elisp がネイティブコンパイルできる様になります様に ナムナム
402 :
デフォルトの名無しさん :2010/01/18(月) 17:31:37
message 関数の様に使えてC言語の fprintf のようにファイル(バッファでもいいけど)に 出力する関数ってありますか?
>>400 よくわからんが mmm-mode とか使えないの?
format って sprintf ですよね。string とか変数作って いちいち concat して set-buffer して insert しないといけないんでしょうか。 質問ばかりですみません。
(defun insert-to-buffer (buf fmt &rest args) (with-current-buffer buf (insert (apply #'format fmt args)))) みたいな関数を自分で作っちゃえばいいんじゃない? 標準にありそうな匂いがプンプンするけど
>>406 とりあえずありがとう。やりたい事がやっとできました。
>>402 sprintfのようにフォーマットの指定まではできないが
文字列の出力先を指定する関数はいくつかある。print/prin1/princなんかがそう
(princ (format "Hello %s.\n" "Emacs") (find-buffer "*scratch*"))
(info "(elisp) Output Streams") も参照
emacsの場合はファイルよりもバッファをやりくりするのが基本かな。
リージョン内の数字にカンマを打とうと思って、 (defun ins-comma (start end) "insert comma to digits in region." (interactive "r") (let ((res t)) (while res (save-excursion (goto-char start) (if (setq res (re-search-forward "\\([0-9]+\\)\\([0-9]\\{3\\}\\)" end t)) (replace-match "\\1,\\2" nil nil)))))) とすると、リージョンの尻にある数字にマッチしません。 どこが間違ってるでしょうか。 re-search-forwardの第二引数をnilにすればマッチするんですが。
・endがマーカーじゃない ・replace-matchにより該当部分の長さが変わる ・前から順に書き換えている から。
わかりました。ありがとうございます。
先生、質問があります。以下のように defvar で定義されたリストを関数の一 部として使っているような場合に、edebug してトレースしたいときは、どう すれば良いのでしょうか? (以下の場合では、anything-c-source-recentf の 中をトレースしたい。 ) (defvar anything-c-source-recentf '((name . "Recentf") (candidates . recentf-list) (match . (anything-c-match-on-file-name anything-c-match-on-directory-name)) (type . file)) "See (info \"(emacs)File Conveniences\").") (anything 'anything-c-source-recentf)
質問の前提が間違ってます。
>>413 前提というのは、「defvar で定義されたリストを関数の一部」かなと思うから
anything コードを見てみたら、必要に応じてリストから部分的に取り出して
使ってるように見えるから前提があってない。 そういうこと?
だから edebug でトレースは無理ということで終了?
そう。edebugするなら対象はanythingの中の > anything コードを見てみたら、必要に応じてリストから部分的に取り出して > 使ってる この部分になるでしょう。
416 :
デフォルトの名無しさん :2010/01/27(水) 03:38:30
テスト
こんにちは。hash について質問させてください。 (defun case-fold-string= (a b) (compare-strings a nil nil b nil nil t)) (defun case-fold-string-hash (a) (sxhash (upcase a))) (define-hash-table-test 'case-fold 'case-fold-string= 'case-fold-string-hash) (setq lang-hash (make-hash-table :test 'case-fold)) elisp info にあるように上記のようにして、ハッシュを作成してみましたが、 キーによっては、以下のようにハッシュ値が同じになってしまい、うまくいき ません。こういう場合は、どうするんでしょうか? (case-fold-string-hash "RU")1397 (case-fold-string-hash "SE")1397
>>418 ハッシュ値は関係ないと思う
完全ハッシュ関数を作らないかぎり、ハッシュ値はふつう重複する
Wikipedia のハッシュテーブルとかハッシュ関数の頁を参照
で、問題は compare-strings は文字列が一致しないときに数値を返すこと
(defun case-fold-string= (a b)
(string-equal (upcase x) (upcase y)))
ならうまく動いた
>>419 ありがとうございます。同じハッシュ値をもつキーでもバリュー値を上書きす
るわけじゃないんですね。
Emacs Lisp で書かれたものってソフトウェア?
そう。
すくなくともハードウェアでないことは確か。
OK
java-mode でインデントを2にしたいのですが、 下のlispを.emacsに書いても反映されません。 C-x C-e でも同様でした。 .emacsに書いてる他の部分は反映されています。 (add-hook 'java-mode-hook '(lambda () (setq default-tab-width 2) (setq tab-width 2))) 何がおかしいのか調べるにはどうすべきでしょうか? Emacsの単なる使用にあたるのか、 Lispになるのかわからなかったのでこちらに書き込ませて頂きました。
(setq c-basic-offset 2)
>>425 フック書かなくてもできる。
(c-add-style "java2" '("java" (c-basic-offset . 2)))
(setq c-default-style
'((java-mode . "java2")
(other ."k&r")))
429 :
デフォルトの名無しさん :2010/03/11(木) 00:38:15
>>400 syntaxテーブルにREM追加すりゃよいかも。
-- で検索すれば雰囲気つかめるんじゃない。
430 :
デフォルトの名無しさん :2010/03/11(木) 00:41:58
(defun a (arg) (+ 1 arg)) をさ、 + 1 じゃなくて、 + 2にしたいときってどうすればlispっぽくかけます?
(defun a (arg n) (if (< n 2) (+ 1 arg) (a (arg (+1 n)))) (a num 0)
(defun a (arg n) (if (< n 2) (+ 1 arg) (a arg (+1 n))) (a 12 0)
>>430 質問の意味がまるでわからないけど
(defun a (arg &optional n)
(+ arg (or n 1)))
ということ?
>>432 n >= 2 のとき停止しないような
あと、 Emacs Lisp は末尾再帰の最適化が効かないから
適当にループを使った方がいい
434 :
430 :2010/03/11(木) 23:25:22
あぁぁごめんなさい、すでに a って定義されてるけど、 + 1 じゃなくて + 2 にしたいなー っていう時です。 複雑で便利な関数がすでに定義されてあるけど、 なんでこの部分だけこうなんだ!コピペするのはなんだかなぁ・・・ ってときに、リストってのを利用して良い方法はないものかと。
435 :
430 :2010/03/11(木) 23:27:04
連投さーせん。 さらに、a はすでに定義されてていろんなパッケージで使われてるから、 aの使い方は崩したくない。 そして、aにパッチも送りたくないから、aの定義があるソースコードは 変更しない。って感じ。
436 :
430 :2010/03/11(木) 23:31:32
自分のイメージをかいとくと、 処理が(別な言語で表現すると array( +, 1, arg ) ってあるんだから、 newfunc = [ array[0], 2, array[2] ] みたいなノリで、新しい関数作れないのかな?ってのを 試行錯誤してる感じです。
諦めろ
>>436 それってclosureやCLOSの抽象関数などに向かう話だと思われ。
つまりCommon Lisp方面。
>>435 defadvice が使えることがある。例えば
>>430 の例なら
(defadvice + (after foo)
(setq ad-return-value (- ad-return-value -1)))
ってするとか。
ただし、 + みたいな基本関数にこんな advice をつけて大丈夫かは知らない。
たぶん大丈夫じゃない。
ある程度用途が限定されている関数なら defadvice で少し動作を変えるというのはたまにやる。
>>436 evalで出来なくはないだろうけど、手間が掛かるだけで全然便利じゃない。
あとは、ダイナミックスコープを利用した+の再定義とかもできるだろうけど、
これもバグの元でオススメできない。
>>439 の言うdefadviceもあるけど、
あれも限定的にしか使えない。
Lispでのそういう場合のセオリーは、関数を渡せるようにしておいて、
行いたい処理はその中で実行して、適宜切り替えられるようにするんだけど、
そういう風に設計されてなきゃそれまでだしなー。
その関数を書いたやつを内心で罵りながら書き直すに一票。
動的スコープを利用するとこんな感じかな。 (defvar plus (symbol-function '+)) (defun a (n) (+ n 1)) (flet ((+ (&rest args) (apply plus 1 args))) (a 2)) ただし、この方法ももとの関数の実体をうまく退避しないと 簡単に無限再帰になってスタックオーバーフローするのでまったくオススメしない。 ;; これを書いてるときも何度かスタックオーバーフローさせた Common Lisp だったら function-lambda-expression をごにょごにょして eval もできるかもしれないけど、 Emacs Lisp じゃできないし、何よりも不毛。 もとの関数をちょっと書き換えていいなら、変数の動的束縛をはさんで (defvar *b* 1) (defun a (n) (+ a *b*)) (let ((*b* 2)) (a 2)) ; => 4 とかも。 defadvice でどうにかできないか検討して、それで無理だったら諦めるのが無難かなあ。
そこはコールバックにしとけよ、みたいなの結構あるよね。 url.el とかそんなんばっかり。
このあたりって各lispの方言に悩むよね といってもemacs lisp,CL,schemeの3種くらいか、今悩むのは
444 :
430 :2010/03/13(土) 00:10:38
皆さんどうもありがとうございます!
アドバイスは知っていましたが、引数に気をつけないと後遺症が怖いんですよね。
もーちょい皆さんの意見参考にしつつ、粘ります。
>>442 > そこはコールバックにしとけよ、みたいなの結構あるよね。
ありますよねー。でも作った人には利用の仕方が無数に思いつくから、
面倒なんだと思います。
すべてがリスト、っていうプログラムの表現の仕方にあこがれてるので、がんばります、
みなさんありがとー
emacs HEADにコミットしたいのですが、コミット権限は誰にどうすれば貰えるのでしょうか?
大卒の新卒が大量に入ったけど、elispに興味持ってる人ほとんどいないね…時代の流れかな iphoneアプリの人気がすごかった。
昔は elisp に興味がある新卒が沢山居たの? こういうのは研究室で身に付けてくるか、入社してから師匠に叩き込まれる物かと思ってた。
研究室で身に付ける人が少なくなったってことだろ
elisp 書く時間あったら javascript 書くだろうなぁ。
俺も最近elispよりchrome拡張をJavascriptで書く方が多い。 mewじゃなくてgmailだし。
今ある elisp でわりと事足りてるってのもあるな。 あとなんでもかんでも emacs 中でやろうと思うのは結構時間の無駄なんじゃ?って思うようになった。 一つの端末をずっと使い続けられない職場だからなのかもしれないけど。
テキスト編集はこれからもEmacs。 Elispアプリでは、mewは使わなくなったけど、 navi2chやlookupは使ってる。 HTML/CSSの世界ではFirefox + Javascriptを、 Emacs + elispのように使うようになるのかと想像していたが、 そんなことは全くなかった。 HTML/CSS界のEmacsが現れて欲しい。 XMLで七面倒くさいXULは使わなかったが、 chrome拡張ならなんとかなるかもなあ。 Lispならいいのになあ。
別に lisp である必要性は全然無いと思う。 javascript がベストな言語だとは思えないけどねえ。 つか「HTML/CSS界のEmacs」()笑っていったいどんなの想像してんのよwww
最近はnavi2chぐらいかなぁ。 仕事だとJavaのコードばっかり書いてるからeclipseメインだわ。
>>()笑 >って書く人初めて見たwww 漏れも時々そうなる ()を先に入力してから カーソルを()の中に入れて笑を書くと 一部のIMEでいつのまにか()の外に笑が移動するんだよ 気付いたら治すけど
ついでにもうちょっと補足しておくと >()を先に入力してから の理由は()が全角になるのを嫌って半角にするんだが 半角( 笑 半角) の順で入力すると切替が面倒なので 先に()を書いてしまう習慣がある 単語登録しろとかいう突っ込みは野暮というもの
つ boiled-egg
(笑)自体入力することなくなったなぁ 草生やしちゃわない?
「スイーツ(笑)」とかのお陰で語尾以外では再興してきた気もするけどな。
"()笑"が面白いと思うのはlisp使いだからじゃね? Tシャツとnilシャツ ウエイトレス:食後は珈琲でよろしいですか? 客:T とか言うのと同じ楽屋落ちネタつーか
質問文の最後に p 付けるとかな。
Schme使いはどうしたら?
h の後に e 付けるとかかな。
h の後は賢者だろ
「()笑」でC-tだろ常考
minibuffer 用に Abbrev Table をセットするにはどうすればよいですか? local-abbrev-table をセットしても使えませんでした。
(global-set-key "\C-z" 'foo) により \C-z がマップする関数が定義してあると仮定して、その場合、 「\C-z がマップする関数に \C-x もマップする」 という意味の関数を書きたいのですが、どうすれば良いですか? イメージとしては (map-same-keyfunc "\C-x" "\C-z") により、'foo が \C-x がマップされるといったものです。
ここいら辺の関数を使えば出きるんじゃん? * (elisp) Active Keymaps (key-binding "\C-x\C-f") => find-file とか * (elisp) Functions for Key Lookup (lookup-key (current-global-map) "\C-x\C-f") => find-file
>>468 > C-z がマップする関数に C-x もマップする
とはちょっと異なりますが、C-z に C-x をマップするってのが
global-set-key じゃなくて define-key を使えばできます。(キーボードマクロの登録)
これでどうでしょうか。具体的には以下の通りです。
(define-key global-map "\C-x" "\C-z")
>>467 ミニバッファーで展開されるのはfundamental-mode-abbrev-tableと
global-abbrev-tableみたい。
>>397 y-or-n-p関数の挙動について少し分かったので自己カキコ
Gnome側で「CapsLockをCtrlとして扱う」に設定した擬似Ctrl-gだと
Emacs側ではC-S-gとして扱われるみたい
C-g (translated from C-S-g) runs the command keyboard-quit
# もちろん通常のCtrlキー使用なら変換なしにC-gになる
y-or-n-pのソース(fns.c)を見てみると、生のC-g以外は入力やり直しに
なるのでEmacsの動作としては問題なし。
…と、ここまで書いたはいいが結局解決策は見つかりませんでした。。
>>472 > Gnome側で「CapsLockをCtrlとして扱う」に設定した擬似Ctrl-gだと
Gnomeのコントロールパネルで変えると、
keysym自体が置き換わるんじゃない?
問題はadd Control = Caps_Lockした時なんじゃないのかな?
これはどの規定だったか忘れたけど、違反する使い方。
昔のXEmacsはこの状態見つけるとログ吐いていたと思う。
>>473 反応が遅くてスマン
nocapsとswapcapsではkeysym?の挙動が違うみたい。
自分が使ってるのはnocapsの方。
swapcapsだと単純にCapsLockがControlに置き換わるけど
nocapsだと"translated from C-S-g"となるらしい
X11のキーコードの話は今までよく分かってなかったので
現在ググって調べ中…そろそろスレ違いになってきたぞ
475 :
デフォルトの名無しさん :2010/05/05(水) 22:56:01
かつて無いほどに過疎ってるな… 流石にもうelispの時代は終わってしまったのかのう
う、うん……(´・ω・`)
Lispって言うほど魅力ないなあ、って勉強しててオモタ。 言語を作れるっていう宣伝が巷に溢れているが、 マクロのことであって、特に一般的に想像するような言語を作れるってのとは違う、 どちらかというとXMLで言う言語を作ってという感じに近い、 プログラミング言語の出来方でいえば、ある構造を別の原始的構造に翻訳する、というものだ。 あと抽象的とは言うが、オブジェクト指向的な意味での抽象性がない。 たとえば、リストがIterableだからリストじゃないものもIterableに振舞えば リストのように扱えるというか、そういうものが無いように見える。 まあそれはともかくとして、Elispは秀丸マクロよりマシだと思うよ。
scalaにハマった友人がLispを研究する意味が無くなったと言ってた
エディタのマクロの中じゃ一番細かい事から大物まで書ける部類だと思うぞ 他のエディタで此処までかけるのってVisualStudioのVBマクロだろうけど、あれは細かいことするのがちょっと大変過ぎるし Briefも割と良くできてたけど大物書くのはイヤになるっていう感じだし Eclipseのプラグインがもっと柔軟になる以外elisp環境に対抗できるのってSmalltalk位じゃないの?
マクロで簡単なレポートを作ったりもできて楽しいけどなあ
>>477 > 言語を作れるっていう宣伝が巷に溢れているが、
Paul Graham 氏がそれを流行らせたのではなかろうか。
>>480 elispは楽しいよ。ただ、pythonとかに比べるとコーディングが
かなり遅くなっちゃう。名前空間がないから、同じ
関数を再コーディングするハメになったり、lispがlispである故、
「綺麗に書かなきゃな」ってのがあって、綺麗に書くこと自体が
割と面倒だったりする。
関数呼び出しと、スペシャルフォーム・マクロのインデントのルールみなさん守ってますか? defunとかは勝手にインデントされるけど、 defmacroしたのはdefunとかと同じようなインデントルールにしてますか? 正直インデントは構文にかかわらないわりに面倒。 まあ、視覚的に関数の構造を見られるのはいいけれども。
君がlisp-indent-functionを知らんだけでは?
自分でdefmacroしたやつもスペース2つのインデントにできる?
>>477 入門本とかだと、表面的なことしかやってないから、全然面白くないよね。
Lispでの抽象っていうのは、OOP的な手法じゃなくって、
関数的な手法を使ってることが多い。つまり、クロージャを渡して、
それを内部で呼び出すことで、柔軟性を確保するとかそういうの。
OOPでもMOPとかどぎついのがあるけど。
On Lisp辺りは、邦訳がネットで無料で公開されてるから、読んでみたら良いよ。
言語を作るというのがどういうことなのか、関数的な抽象化とは何なのか、
具体的な例が乗ってるから。他の言語でも参考になる考え方だと思う。
>>477 忘れてた。
> たとえば、リストがIterableだからリストじゃないものもIterableに振舞えば
> リストのように扱えるというか、そういうものが無いように見える。
これは流石に誤解。CLならGray Stream、Schemeならポートがまさにそれだし、
動的型付けを利用した手法は、日常的にみんな使ってる。Emacs Lispでも。
関数型言語面白そうだし Lisp でもやってみるかねとか言ってた層は Scala あたりに移っちゃったのかな
Haskellじゃないかなー。 関数型スキーはHaskell、S式スキーはCommon LispやScheme、 Java資産を活かしたい実用派がScalaやClojure、 並列処理スキーがErlangみたいな気がする。
Scheme使ってる人ですら最初はHaskellとか勧めるぐらいだしな 関数型を学ぶなら今はHaskellがいいんだろうな多分 個人的にはCoqのGallinaもいいんだけど、依存型はまだ難しすぎるから…
Lispはあっちこっち手続きだし。
でもなんつーか、Haskellはやってもしょうがないとは思うよ。 Lispだって、社会人になってからは、ハードコアなEmacs使いが いじり倒したいから趣味で学ぶぐらいでしょ。 そうやって関数型には適度に慣れておくぐらいで十分。 Haskell学んだからって使える場所がないし後にも残らん。 どうせならElispに近いCommon Lisp学んで、CLのコードをポートしたりするのが良い。
elisp やってたら Common Lisp も馴染みやすいかと思い始めたら、 format の辺りなど色々な部分が elisp と違っていて微妙だった。 elisp は C 言語系列をやってきた人に取っ付きやすいよう作られてるなと感じた.
たしかに Haskell を実務で・・・なんて普通のやつらの上を行くぐらいの人じゃないと無理だろな そういう意味じゃ Scala はまだ現実的な線だし elisp も emacs 使い続けるなら悪くないよね。
>>493 > たしかに Haskell を実務で・・・なんて普通のやつらの上を行くぐらいの人じゃないと無理だろな
言っている意味がわからない。
「普通のやつらの上を行くぐらいの人」だと Haskell を実務で使わせてもらえると言っているの?
>>492 > format の辺りなど色々な部分が elisp と違っていて微妙だった。
底が浅いなー。 format なんてほとんど表面上のみの違いでしょ。
そんな関数1つより、もっと言語の中を突つかなきゃ。
底が浅いというのは自分でも重々承知している所だが、表面も結構重要だと感じる。 例えば C を書く時と elisp を書く時では自分の中で切り替えが上手く出来るが、 elisp と Common Lisp ではどうしても似た気分で書いてしまう。 それゆえに細かなところが違っていると、ストレスになる。 まあ、書いていて思ったがこれは自分の問題だな。
>>494 Paul Graham の「普通のやつらの上を行け」で Lisp を業務に使った話になぞらえたんだけど・・・
497 :
Zeno ◆5nZQbNmQPs :2010/05/09(日) 14:22:14
まあ Haskell はプロジェクトには使わせてもらえんだろうな。 VCS で管理もされない個人用のツール程度だったら自由に Haskell を使っても問題はない。 というより、その用途であれば何の言語を使っても良い。
単純に技術者の数の問題じゃない? あと自社製品とかWebサービスみたいなのだったらHaskell使ったって良いとは思うけど。 請負いで納品するようなのだと運用・保守がかわいそうだなぁ。
EIEIOが標準入りすることでCL packageのdefstructがobsolateになるとかありますか?
最近誰かも書いてたが「俺のチームならよそでできないその仕事をやれます。」って 状況じゃないと雇われの身としては主流以外の言語使えないよな。
lisp(とかHaskellとか)だと他の言語とくらべて開発効率/保守性/性能がこれだけ良いんですってのを 客観的に説明出来るなら良いんだけど、実際業務アプリ作るとかの場合 C#とかJavaあたりで書いた方が楽なんだよねえ。
業務系だとやるべきことのパターンがかなり決まってるってのはあると思う。 フレームワークに従った方がうまくいく領域なら自由すぎる Lisp 系言語はかえってつらいってのはわかる。 Lisp が DSL 構築できるったって、わざわざ構築せずに済む言語環境があるならそっち使った方がそりゃ楽だ。 それはそれでいいんじゃないの。 ものごとはトレードオフだ。 Lisp がある条件で活躍するためには切り捨てざるを得なかったものだってあるだろうさ。
今のところ、関数型言語が業務向けで役に立つであろうシチュエーションって 並列化しやすいからスケールアウト時のコストが低いですよ!ぐらいなのかなぁ。
当たり前だけどクライアントのリクエスト単位では、 すでに並列化されてるんだよね。 リクエストごとにスレッド割り当ててるから。 リクエスト内部の処理を別スレッドにぶった切ったからといって そこまで早くなるとは考えづらい気がする。
どっちにしろ普通のアプリで恩恵こうむるのは難しそう・・・
macOSXのターミナルからEmacsでC#のプログラムを行おうとしている初心者です 見やすさのためにEmacsにcsharp-modeというのを取り入れようとしていますがうまくいきません 取りあえずsite_lispに拾いもののcsharp-mode.elを入れホームディレクトリで.emacsの設定を軽く追加しました Emacsを--debug-initから.csファイルを開くと以下のように出ます。 Debugger entered--Lisp error: (file-error "Cannot open load file" "csharp-mode") require(csharp-mode) eval-buffer(#<buffer *load*> nil "/Users/host名/.emacs" nil t) ; Reading at buffer position 13 load-with-code-conversion("/Users/host名/.emacs" t t) load("-/.emacs" t t) #[nil "・・・・$ command-line() normal-top-level() .csファイルを新規に作成してもcsharp-modeに認識されずに通常のmodeで開いてしまいます 解決法などご教授頂けたら幸いです
>>506 そのエラーメッセージが全てだと思うんだけど。
Cannot open load fileって書いてあるじゃない。
ちゃんとsite-lispにファイルはあるの?
あと、こういう場合に一番大事な、
* どう「入れ」たのか
* どのような「設定を軽く追加」したのか
といったことを全略されると、まともな回答貰いづらいよ。
ついでに言えば、多分スレ違い。
全てのシンボルのリストを返す関数ってなんだっけ?
そんな関数はない! (lexical-let (x) (mapatoms (lambda (y) (push y x))) x)
obarray 見ればいいんじゃない (append obarray nil)
>>510 そう、それどぁ。
elisp manual読んでぃて便利だと思ってとぉあ。
アリャガトネ
512 :
デフォルトの名無しさん :2010/06/24(木) 21:31:27
auto-completeで日本語入力をしようと無謀なことやってる者です 内容がemacs自体とは関係なくなってきたような気がしたのでここで質問します。 2バイト文字のあとに1バイト文字が来たらそこを単語の区切りにしたいのですが、 どうしたらいいのでしょうか? 何をword-separating-categoriesに入れていいものかわかりません。 category-tableを使えばいいのはわかったのですが、 2バイト文字すべてを要素に持つようなcategory-tableの作り方がわかりません どうにかヒントだけでも教えていただければと思います。
M-x describe-categories (re-search-forward "\\cj")
あ、
(add-to-list 'word-separating-categories (cons ?j ?a))
でよかったのか。
ありがとうございます。
が、駄目orz
auto-completeはsyntaxがwordの文字が並んでるとすべてcompletionの餌にするのかー、、、
どこでその処理やってるのかわかんない…
全角のあとに半角が着たら半角だけ餌にしたいんだけどなー
もうちょっとがんばってみます。
>>513 なんというか申し訳なかったです
ありがとうございました
LISPの仏様こと竹内育男が参加するイベント。
--
国産LISPマシンELISの設計者である、JAIST副学長日比野先生が、この夏、ELISの復活祭を企画されています。
復活祭には、竹内先生をはじめ、TAO/ELISに関わった方々に多数ご講演いただきます。
会場が石川県とちょっと遠いですが、小旅行気分で、ぜひぜひ多くのLISPファンのみなさまにご参加いただきたいと思います。(yshigeru)
日時:8/7(土)〜8/9(月)
場所:JAIST(石川県美濃市)
詳細と参加申し込みは、ELIS復活祭ページをご参照下さい
http://www.jaist.ac.jp/elis-revival/home.html
>>514 skkじゃだめ?誤入力を考えるとskkちょー便利だと思うけど。
517 :
デフォルトの名無しさん :2010/07/06(火) 19:01:35
EmacsLispプログラミング入門の12・3の関数forward-sentenceで 引数を1以上にして M-x で動作させるとエラーになってしまいます。 デバッガー?を使ってもいかんせんよくわかりません sentence-endを評価した値が nil なのが原因? Debugger entered--Lisp error: (wrong-type-argument stringp nil) re-search-forward(nil 592 t) (if (re-search-forward sentence-end par-end t) (skip-chars-backward " \n") (goto-char par-end)) (let ((par-end ...)) (if (re-search-forward sentence-end par-end t) (skip-chars-backward " \n") (goto-char par-end))) (while (> arg 0) (let (...) (if ... ... ...)) (setq arg (1- arg))) forward-sentence1(1) call-interactively(forward-sentence1 t nil) execute-extended-command(1) call-interactively(execute-extended-command nil nil) 追記:M-eはきちんと動作しています
>>516 skkも考えたんですが、そもそもこれ作ろうと思った発端は、
入力方式の切換えが面倒だった事なのですよ。
須く日本語入力ソフトは切換えが必要なので、
どうにか良い方法はないかと思って辿り着いたのがauto-completeなんです。
自動的に候補が出る形です。
取り敢えず一応完成させました。
入力方式の切換えが必要無いのは便利ですね。
日本語と英語の入り乱れたリストとか
テンプレートがあってそれを編集するような場合は使える気がします。
あと、skk だと日本語と英語で配列が違う場合設定が面倒だっていうのもあります。
今打っているのもそれなのですが、これなら配列が違う方が良いというか、むしろ同じだと駄目というか。
>>517 re-search-forwardの第一引数にnilが渡ってるのが原因だと思う。
想像の通り、sentence-endがnilだから。本来、正規表現を文字列で渡す所。
(wrong-type-argument stringp nil)
(間違った型の引数 文字列かどうかを判別する関数 nil)
って意味。その下にずらずら出てるのは、バックトレース。
どこから呼ばれたコードがエラーになったのか、それで判断できる。
下に行くほど上位の関数。forward-sentence1とかも出てるでしょ?
Emacs Lisp プログラミング入門のその部分が変化に追いついてないみたい。 sentence-end を参照している部分は (sentence-end) に変えてください。 sentence-end はnilでデフォルト値を使うことを意味するようになったので、 正規表現そのものが欲しい場合は関数sentence-endを使うようになりました。 C-h v sentence-end とすれば説明の中に次の記述があります。 > The value nil means to use the default value defined by the > function `sentence-end'. You should always use this function > to obtain the value of this variable.
Emacsのソースコードのtarballの中に入ってるemacs-lisp-introでは ちゃんと反映されているようなので↓は取り消します。 > Emacs Lisp プログラミング入門のその部分が変化に追いついてないみたい。 なんかおかしいなと思ったらお使いのEmacsのバージョンにあったものを 参照してくださいってことで。
skk のオンデマンドで再帰的な辞書登録をなんで他のIMEでも採用しないのか不思議でならん。 特に Google IME・・・
523 :
517 :2010/07/07(水) 20:58:59
(sentence-end)に変更したところ無事動かすことが出来ました。 ちゃんとヘルプ読んでるつもりだったんですが全然できてなかったみたいで・・・ 今後はちゃんと読みまくるよう頑張って先に進んでいきます。 レスくださった方々ありがとうございました
エラーが出るかどうか
>>525 つまりコピーできるのは間違ってないのね…
Emacs Lisp覚えたいんだけど、参考にするには何がいい?
他人の.emacs
530 :
527 :2010/09/15(水) 04:43:42
>528 >529 ありがと。
531 :
デフォルトの名無しさん :2010/09/25(土) 23:48:03
ntemacs 23.2 に menu-tree.el 0.96 を導入すると、一部(「オプション」→「行の折り返し」等)文字化けします。 どうすれば、文字化けしないように出来ますか?
max-specpdl-sizeとmax-lisp-eval-depthが数値が足りないと時々文句を言われるんだが 数値を増やす以外で上手い解決策ってないのかね。
文句がでるところをループに書き換える
>>533 文句を言われるのはdefadviceなんでそれを使うなってことになるのか。。
535 :
Zeno ◆5nZQbNmQPs :2010/10/16(土) 17:02:04
>>534 やり方はいろいろあるが、
(setq debug-on-quit t)
にして、問題のsexpを実行しろ。
途中で \C-g を押せば問題箇所までのトレースができる。
それでわからなければdefadvice中で使用されるであろう自分で関数を調べろ。
debug-on-error で関数本体をデバッグすることも可能だ。
\C-x dの代替に開いてるdired探すの書いてます。 見つからなかったとき普通のdiredコマンド開きたいけど(dired nil)だとミニバッファで止まらない。 インタラクティブなコマンドはどう呼べばいいのでしょう?
>>536 あ、自分で書いた日本語が答えになってたw
インタラクティブに呼ぶつう関数みつけた。落ち着け、おれwww
自然数をリスト化する関数はありますか? 例えば (foo 12345) => '(1 2 3 4 5) みたいな。
知らないけど、 12345を1234と5に分ける、 1234を123と4に分ける、 ……ってやれば作れるよ。 っていうのでは意味がないんでしょうか。 (defun nat-to-list (n &optional lst) (cond ((< n 1) lst) (t (nat-to-list (/ n 10) (cons (mod n 10) lst))))) (require 'cl) (defun nat-to-list-2 (n0) (do ((n n0 (/ n 10)) (lst nil (cons (mod n 10) lst))) ((< n 1) lst))) ふだんLispを使わないので変なところあったら教えてほしかったりする。
負数は考えなくていいなら ELISP> (mapcar (lambda (c) (- c 48)) (string-to-list (format "%d" 12345))) (1 2 3 4 5)
回りくどいけど (mapcar #'(lambda (c) (string-to-number (char-to-string c))) (append (format "%d" 12345) nil)) ;=> (1 2 3 4 5)
mapcarは直接stringをとれるよ。 (mapcar (lambda (c) (- c ?0)) (number-to-string 12345)) => (1 2 3 4 5)
なるほどw (mapcar #'identity "hello") => (104 101 108 108 111)
>>539 の弱点発見。0 → nil。バナナは自然数に……。
>mapcarは直接stringをとれるよ。 スレチ気味だがCommon Lispではmapcar関数はリストのみ扱えるはず 文字列を引数に与えるのはおススメできない(互換性的な意味で)
じゃあ互換性的な意味でCommon Lispでもlexical scopeを前提としたプログラムは書くのはおススメできないね。 ...馬鹿馬鹿しい。
型のきびしい処理系にもってけばはじかれるだけだから、 注意はした方がいいけど、使わない方がいいとまでは言えないかな。 Emacs Lispとかじゃなくてもっと新しい言語なら「将来使えなくなるかも」みたいな 見方もあるかもしれないけどw
(let ((element (list 1 2))) (add-to-list 'element 3)) ;;=> (3 . 3)w ◇ ミ ◇ ◇◇ / ̄| ◇◇ ◇◇ \ |__| ◇◇ 彡 O(,,゚Д゚) / ( P `O /彡#_|ミ\ </」_|凵_ゝ 【ラッキーAA】 このAAを見た人はコピペでもいいので 10分以内に3つのスレへ貼り付けてください そうすれば14日後好きな人から告白されるわ宝くじは当たるわ 出世しまくるわ体の悪い所全部治るわでえらい事です
>>550 これ、解決策が思いつかないw
仮引数に使われる記号が隠されちゃうっていう
環境そのものを引き渡せない限りきちんとした解決は無理でしょう。 本来マクロで書くべきものだと思う。
マクロでもできなくない? 引数を一度しか評価しないという点を守ると……
Cのプリプロセッサじゃあるまいし
そうか、defmacroとmake-symbolで解決できるのか……
556 :
デフォルトの名無しさん :2010/12/20(月) 12:35:06
emacs初心者でpythonを勉強しようと思っているのですが、windowsのemacs上でipythonを実行する方法はないでしょうか?
あります。
558 :
デフォルトの名無しさん :2010/12/20(月) 13:41:38
ご教授お願いします
560 :
デフォルトの名無しさん :2010/12/20(月) 14:08:21
C:\Python26\Scriptsにipythonがあるのですが (setq ipython-command "/some-path/ipython") (require 'ipython) のsome-pathはどのように指定すればいいのでしょうか?
ipython が有るパス
562 :
デフォルトの名無しさん :2010/12/20(月) 15:10:10
(require 'python-mode) (setq ipython-command "C:/Python26/Scripts/ipython") (require 'ipython) と.emacsに書いてemacs起動してM-x py-shellと打ってみたら Process Python exited abnormally with code 1 と出てうまくいきません...
"C:/Python26/python.exe C:/Python26/Scripts/ipython"
564 :
デフォルトの名無しさん :2010/12/20(月) 15:32:29
>>563 (setq ipython-command "C:/Python26/python.exe C:/Python26/Scripts/ipython")
これでやってみたんですが、普通のpythonシェルが起動しました...
そうか。
おめでとぉ
全てのchildrenに
569 :
デフォルトの名無しさん :2011/01/07(金) 10:37:11
Emacsの歴史について知りたい この年にこういうことがあったとか
20年くらい何も起きてないような気がする
2年に1度はメジャーバージョンアップしてるだろ
>>570 一番の思い出は uucp 経由で fj.sources に、Emacs 日本語化パッチα版が流れたときだったな。
まだまだHDDは高価で、テープもぽつぽつ残っていた。
その次が Emacs 20.2 から 20.3 のバージョンアップ。
(length "漢") が、3から1になった。あれで劇的にプログラムが作り易くなった。
あのとき議論(flame)の中心だった Erik Naggum 氏もとっくに鬼籍に入られて...
Mule の統合とかは
NEmacsからMuleに
MuleからEmacsに
>>573 uucpすらできない貧乏機関は FSF に頼めばEmacsのソースコードを実費で
磁気テープに入れて送ってもらえた。
そういう時代だった。
まあuuxですけどね。
>>578 あんたら、じじいの集団かよ
とか、いいながらfjの回覧テープのコピーが会社の倉庫に残ってるような記憶が…
581 :
デフォルトの名無しさん :2011/01/15(土) 23:36:56
資材管理室^H^H^H^H^Hリストラ待機室で 代々「大切に保管汁」と申し送りされてるのな
フロッピーで回覧してたなあ
>>582 FD何枚になるった? <fj回覧テープ
50枚くらい
マウススクロールでの移動幅を変える設定ってありますか? ぐぐったら上の方に出てくるのはあるんだけどなんか高々移動幅変えるのに あんな大層な設定がいるのか疑問に思い質問しました。もし他に 簡潔な設定がありましたら教えていただきたいです。
>>585 私は 3 にしてる。
(define-key global-map (kbd "<mouse-4>") (lambda () (interactive) (scroll-down 3)))
(define-key global-map (kbd "<mouse-5>") (lambda () (interactive) (scroll-up 3)))
こんにちは。ここでよいか分かりませんが、質問させてください。 lookupで、4GBを超えるHONMONファイルを扱うことは可能でしょうか? 今、lookup 1.99.95を使用しているのですが、Wikipediaデータをダンプして 作成したHONMONファイル(9GB強)が認識されません。 アドバイスいただけると嬉しいです。
588 :
587 :2011/02/14(月) 13:10:47
すみません、自己解決しました。 eblookをver 1.4から1.6.1にアップデートしたところ、問題なく検索できました。 ご迷惑おかけいたしました。
elisp って emacs だけかと思ったら guile にも実装されてるのね guile をインスコするより emacs をインスコする方が簡単なのがアレだけど・・・
591 :
デフォルトの名無しさん :2011/04/21(木) 11:29:01.15
質問です。文字列の中に特定の文字が何個あるかを数える関数ありますか? 例 (foo "abaca" "a") => 3 みたいな。m/(_ _)\m
バッファ(リージョン)中の文字の数を数えるにはhow-manyがあるけど、 ソースを見ると簡単に数える関数は無いみたいだね。
(require 'cl) して count じゃダメ?
>>592 これは?
(defun how-many-regexp-in-str (str regexp)
(with-temp-buffer
(insert str)
(goto-char (point-min))
(how-many regexp)))
(how-many-regexp-in-str "abaca" "a")
3
ふむ
みなさん、あざっす。count で完璧です。 (count ?a "abaca") => 3
∩___∩ ∩___∩ ♪ | ノ ⌒ ⌒ヽハッ __ _,, -ー ,, ハッ / ⌒ ⌒ 丶| / (●) (●) ハッ (/ "つ`..,: ハッ (●) (●) 丶 | ( _●_) ミ :/ :::::i:. ミ (_●_ ) | ___ 彡 |∪| ミ :i ─::!,, ミ、 |∪| 、彡____ ヽ___ ヽノ、`\ ヽ.....::::::::: ::::ij(_::● / ヽノ ___/ / /ヽ < r " .r ミノ~. 〉 /\ 丶 / /  ̄ :|::| ::::| :::i ゚。  ̄♪ \ 丶 / / ♪ :|::| ::::| :::|: \ 丶 (_ ⌒丶... :` | ::::| :::|_: /⌒_) | /ヽ }. :.,' ::( :::} } ヘ / し )). ::i `.-‐" J´(( ソ トントン ソ トントン
ほしゅ
リージョンの末尾判定はどう書けばよいですか? リージョンの各行を引数としたコマンドを実行するプログラムを書いたんですが 動的に行数がかわるためeolpで判定してみたものの 空行があるとそこでとまってしまいます (defun mapr (b e f) (save-excursion (save-restriction (narrow-to-region b e) (goto-char (point-min)) (while (not (eolp)) (let* ((end (progn (end-of-line) (point))) (start (progn (beginning-of-line) (point))) ) (if (not (= start end)) (funcall f start end)) (forward-line 1)))))) (defun mapl (b e str) "" (interactive "r\nsInputShellCommand:") (mapr b e `(lambda (b e) (narrow-to-region b e) (let* ((text (buffer-string)) (command (concat str " " text)) ) (call-process-region b e "/bin/bash" t t t "-c" command))))) 利用例:範囲選択して、M-x maplしてlsと打つ /home /usr
自己レス、変なやり方かもしれない (= (point) (progn (forward-char) (point)))
>>601 eolp の代わりに、eobp を使ったらどう?
せっかく narrow-to-region してるんだしねえ
>>603 ありがとう、後で試してみます
ところで、全然関係ないけど、Ctrl+hをBSに割り当ててたせいで
C-h a/C-h v/C-h f等便利なキーが使えなかったことに最近気づきました
Webによく落ちてる色んな.emacsに長らく騙されてきた気がする
<f1> a / <f1> v / <f1> f
607 :
603 :2011/06/18(土) 05:25:24.46
>>605 (tty-run-terminal-initialization (selected-frame) "bobcat")
(define-key mode-specific-map (kbd "h") 'help-command)
(define-key help-map (kbd "<DEL>") 'help-for-help)
自分はこれで、C-c h に help を設定してる。
>>605 DeleteとC-hを交換したら、元々C-hと打ちたい時にはDeleteを打てばいい。
>>607 eobpで動きました、ありがとう
設定参考になります。
皆それぞれのやり方ですね
keyboard-translateだと一発で全交換になる。
>>605 伝統的に多くの人がやってる割り当てなのは事実。
Windows だと f1 が C-h のかわりに使えるけど、
これって他の環境では違ったりすんの?
Mac OS X でも f1 は C-h と一緒だった 初めて知った...
bobcatは相当前からあるし、 同様の設定FAQはずっと前からある。
etc/ONEWSには19.29での変更点として載ってるな 文書化の微妙な食い違い
19.28と19.29のAntinewsだから、 19.28→19.30の変更が(逆向きの表現で)書かれてるんでしょ。 だから食い違いはない。Antinewsの方が大雑把なだけ。
19.28と19.29の区別が不十分なのが微妙ってこと。 アウトかと言えばアウトかと。
食い違いじゃないね
Ctrl+;を自作関数起動用の2ストロークキーに割り当てようとしたらば 単に;が入力されるだけだったでござる
Emacs 19.28 から 19.29 は メジャーバージョンアップなみに変更あったはず 19.29 から 19.30 はそれほどではないはず なので 19.28->19.29 の差分だろうという感じはする
質問です。 1. 現在リージョンの選択中であるか否かの判別はどのようにすればよいのでしょうか? 2. Shift-クリックでカーソル位置からクリック位置までの選択を行いたいのですが、どのようにすればよいのでしょうか? よろしくお願い致します。
626 :
625 :2011/08/11(木) 22:46:27.24
すみません、1. は (region-active-p) で自己解決しました。
627 :
625 :2011/08/12(金) 03:38:36.76
down-mouse-1 で mouse-appearance-menu が出てこないようにしたらいけました。 ありがとうございました。
labelsと (require 'cl)について教えてください。 1. Emacs Lispにはlabels相当の命令はありますか? 2. (require 'cl)をちょっとぐぐったところ Emacs 付属lispには使うな的な事が書いてあって賛否両論で云々〜 とあったのですが、これはなんででしょう? 以上よろしくです。
>>628 1. あります。
2. ググった先で喧々諤々やってたでしょうに。
簡単に説明すると、Emacs LispはCのように、名前空間がひとつしかないのです。
そのため、ライブラリの関数などには接頭辞を付けるのがマナーになっています。
(fooというライブラリなら、foo-funcみたいな名前を付けます)
ですが、clライブラリではCommon Lispの関数やマクロと名前を合わせるため、
その接頭辞を付けていません。そのため、(require 'cl)でライブラリを読み込むと、
一般的な名前のマクロや関数が大量に定義され、それらの名前が使われることで、
プログラマが好きに付けられる名前が減ってしまいます。これを許せない人と、
許容して便利さを採る人がいて、議論の争点になります。
こういう構図です。理解できなかったら勉強するとじきに分かるようになると思います。
自分で書いたプログラムを配布するのでもなければ、気にすることはありません。
補足。正確に言うと、labelsは標準の機能としては提供されていませんが、 Emacsに付属のclライブラリで提供されています。
631 :
628 :2011/08/15(月) 05:50:20.73
>>629 > 簡単に説明すると、Emacs LispはCのように、名前空間がひとつしかないのです。
> そのため、ライブラリの関数などには接頭辞を付けるのがマナーになっています。
> (fooというライブラリなら、foo-funcみたいな名前を付けます)
>
> ですが、clライブラリではCommon Lispの関数やマクロと名前を合わせるため、
> その接頭辞を付けていません。そのため、(require 'cl)でライブラリを読み込むと、
> 一般的な名前のマクロや関数が大量に定義され、それらの名前が使われることで、
> プログラマが好きに付けられる名前が減ってしまいます。これを許せない人と、
> 許容して便利さを採る人がいて、議論の争点になります。
めっちゃ的確な解説ありがとう。
グローバルな名前空間汚すな云々ってことだったのですね。
C/C++使ってるので解説はとてもわかりやすかったです。
>補足。正確に言うと、labelsは標準の機能としては提供されていませんが、
>Emacsに付属のclライブラリで提供されています。
はい、こちらは(require 'cl)後にlabelsが使えることは確認してますー。
なのでclを使わない別の方法が標準で提供されてるのかな?とおもってますた。
629じゃないけど横から補足しておくと、clのうちマクロで提供されている部分は バイトコンパイルすると実行時にはclを必要としない(ものが多い)ので、 そういうのは使っても問題ない。labelsもその一つ。 それを前提とした使い方の場合は (eval-when-compile (require 'cl)) とする。こういう使い方はEmacs標準のelispでも多用されている。
ポイント位置が最上行か最下行かを判定するのはどうすればいいでしょうか?
634 :
デフォルトの名無しさん :2011/08/22(月) 06:51:10.47
>>633 (= (point-at-bol) (point-min)) ; ポイントがバッファ表示の最初の行にあるか?
(= (point-at-eol) (point-max)) ; ポイントがバッファ表示の最後の行にあるか?
バッファの可視領域が制限(ナローイング)されている場合、上記はその制
限された「見た目上の」先頭行・最終行を判定します。
ナローイングの有無に関らず「実際の」先頭行・最終行を判定したい場合
は次のようにします:
(= (point-at-bol) 1)) ; ポイントが実際のバッファ内容の最初の行にあるか?
(= (point-at-eol) (1+ (buffer-size))) ; ポイントが実際のバッファ内容の最後の行にあるか?
635 :
デフォルトの名無しさん :2011/09/02(金) 02:44:23.27
frame-title-formatについて質問です。 buffer-file-nameがnilでなければ"a"を、nil だったら"b"を表示したくて (setq frame-title-format '(if buffer-file-name "a" "b")) のようにしてみたのですが、条件の判別がうまくいかないようです。 どうしたらうまくいきますか? お願いします。
'(:eval (if buffer-file-name "a" "b")) なんかこうこんな感じだったはず 確かめてないけど
>>636 ありがとうございます。
助かりました。
前に、市の図書館の新刊にこの本あったわ。最近新装版でたのか この本は自腹で買わないと身に入らないだろw
いやこの本とか意味不明だなw広瀬本
そういや出てたな。買わなかったけど。
641 :
デフォルトの名無しさん :2011/09/24(土) 12:19:32.59
タブ幅が tab-width の2倍になってしまいます。 (setq tab-width 8) とするとタブ幅が半角16文字分になり、 これを8文字分にするには (setq tab-width 4) としなければなりません。 何故でしょうか? よろしくお願いします。
>>641 とりあえず C-h v (describe-variableだっけ?) あたりで、ちゃんと8になってるか見てみれば?
>>642 ありがとうございます。
確認してみましたが、設定した通りになっているようです。
しかし実際のタブ幅はその値の2倍になってしまっています。
フォントによってそうなるような気が。
645 :
デフォルトの名無しさん :2011/09/26(月) 01:51:59.22
646 :
デフォルトの名無しさん :2011/10/07(金) 15:26:12.43
(eq 'abc 'abc)は何故tで、 (eq "abc" "abc")は何故nilなんでしょうか。
eq での比較は同値性ではなく同一性を判定する。 つまり、同じ値であってもそれそのものでなれば nil になる。 シンボルは登場と同時にシンボルテーブルに登録 (intern) されるので字面が同じシンボルは常に同一と判定される。
>>647 とてもわかりやすい説明ありがとうございます。
info の記述とは違う気がするけど、こんなものなのか? (let ((s "\241")) (list (string-match "[[:ascii:]]" s) (string-match "[[:nonascii:]]" s) (string-match "[[:unibyte:]]" s) (string-match "[[:multibyte:]]" s) (string-match "[[:print:]]" s) (string-match "[[:punct:]]" s) (string-match "[[:graph:]]" s) (string-match "[[:word:]]" s))) (nil nil nil nil nil nil nil nil)
インタプリタはないの?
M-x ielm
LISP 言語と A.I. の父 John McCarthy 博士死去 2011年10月26日 Stanford Engineering はコンピューターサイエンティストで A.I. 分野の草分け的存在だった John McCarthy 博士が2011年10月24日、同氏のカリフォルニア州スタンフォードの自宅で 亡くなったと伝えた。84歳だった。 McCarthy 博士が世間の注目を集めたのは、1966年にロシア国内のライバルと コンピューターチェスの対戦を主催したときのことだった。4試合同時に行われたこの 対戦は数か 月に及び、結果は McCarthy 博士側の2敗2引き分け。McCarthy 博士は後に 「完敗だった」と語っていた。 McCarthy 博士は、21世紀を迎えた現在やっと現実のものとなりつつある「人工知能 (Artificail Inteligence:A.I.)」という概念を50年以上も前から唱えていた A.I. 界の巨人。 同氏は1956年に英国の Dartmouth 大学で開催された人工知能に関する会議「ダートマス 会議」に提案書を提出し、「A.I.」という言葉をその提案書の中で歴史上初めて使用した。 1958年、McCarthy 博士はコンピューター言語 LISP を開発。これは、FORTRAN に次いで 2番目に古いプログラミング言語で、A.I. プログラムを記述する言語として現在も使用されている。 また、あまり知られていないことだが、「ガーベージコレクション(ゴミ収集)」と呼ばれる 技術を開発したのも McCarthy 博士。これは、プログラムが予約したメモリ領域のうち不要に なった領域を自動解放する技術で、LISP 言語の機能強化の一環として開発された。。 1960年代の初頭には、McCarthy 博士はタイムシェアリングによるコンピューターの効率的な 利用というコンセプトをすでに発表しており、このコンセプトはその後の分散処理やクラウドへと 発展するコンピューティング技術の基礎となった。
今さら感があるけど、Emacs Lispで書かれたライブラリとかプログラムのことを 単に「Emacs Lisp」と呼ぶ習慣はそろそろみんなに考え直してもらいたい
> poj-mode.el is an emacs lisp for POJ 小文字で書けばいいのかと問いたい
>>656 「elispアプリ」とか「elispライブラリ」とか言えっての?
公式な呼び名は無いの? 概念的に近いのはブラウザの拡張とかかなぁ。 歴史的経緯を無視するならエクステンションとかプラグインとか呼ぶのが妥当だと思う。 使われている言語が Emacs Lisp なのは、 たまたま Emacs がそういうものだという実装に立ち入る話なので、 ユーザーに見せるべき筋合いのもではない。
Emacsスクリプトでよくね?
マニュアルを読みなよ
>>660 > 使われている言語が Emacs Lisp なのは、
> たまたま Emacs がそういうものだという実装に立ち入る話なので、
> ユーザーに見せるべき筋合いのもではない。
むしろユーザーが容易にみれる、弄れる、スクリプトを組めるという仕様で人をスクリーニング
しているのがemacsの良さなんじゃないの。Firefoxのエクステンション的使い方で敷居は低い
けど、emacs lispの書き方を覚えたら自分の使いやすいように弄りたいという野心がユーザーの
大多数の中にあるんじゃないかな。
自分はそういう野心を持ってFirefoxを使っていないなあ。
ブラウザだとgreasemonkeyが近いな お手軽で重宝してる
スクリプトには違和感ありまくり elispプログラムかパッケージで
マニュアルでは大体libraryかpackage(かfile)だけど、別に厳密な定義はない 明確な機構で管理されてないこととも多少関係あるかも
xyzzyというEmacs風エディタの界隈で「拡張lisp」という言葉を見て ちょっと混乱した
magit という一個の package があったとして、 その中核となるファイル群の集合を指して library その集合の中の .el ファイルそれぞれが program とかそんな感じでは
locate-libraryは一つのファイルをライブラリって表現してるってことだよな
APEL の README だと Emacs Library や モジュール や ユーティリティー といった言葉が使われてる。 MULE プログラム や CCL プログラム って言葉も出てくる。
マクロでいいじゃん
>>672 defmacro以外で書いてある部分はどう呼ぶんだ?
それもマクロでいいじゃん
よくねえよwww
Emacs lispの他にマクロが装備されてるじゃん
elispはemacs自体を作るための言語だしなw
>>662 正解
EmacsはelispとCで出来てるので、Cの用語と調和できる表現が理想かと。
なのでマクロは…
>>672 defmacro で定義するマクロはなんて呼べば良いの?
Editor MACroS
>>680 Editing MACroS は TECO のマクロパッケージだ
emacsがたまたまlispで云々とか笑うなw gosmacsとmock lispに切れたlisperのストールマンが 作った最強のlisp環境兼エディタなのにw
>>682 Unipressの売り物になったから切れただけだろ
そういやそうだったかも でもMockじゃなくて ちゃんとしたlisp使いたくて 弄ろうとしたんじゃなかたっけ ある意味gosmacsはGNUの生みの親だなw
最初gosmacsベースでGNU Emacs作っていて、 そんときは別に切れてない。 そのあとGoslingがgosmacsの権利売ったから切れた。
Emacsのアプリだからeアプリ これでいいよ. iアプリと似てるから世間で流行るかも知れん. e電と同じく廃れるかも知れんけど.
だいたいeはすぐ終わるな なぜかiは長生きする
アンビバレンツなIE
大衆向けGUI付きのインストールシステムが無いからこれといった名前もないんだろうな そういうシステムの用語としてはパッケージってだいたい言うんじゃね? Emacs NetInstaller Packageということでどうか
基本的にはlibraryなんだよ。ほぼ関数の塊で、 キーの割り当ては個人設定まかせだったりするでしょ。
emacsのevernote-mode.elで質問です。 69行目にdefmacroで enh-command-with-authというマクロを宣言しているのですが 最初のローカル宣言で `(let (error-code (try-func (lambda () ,@body))) 上のようになっています。 letといったら (let ((変数宣言)) 式) と言った形になると思うのですが、このマクロでは、 突然、宣言も何もやっていないerror-codeが出てきています。この部分では何をやっているのか知りたいです。 また、try-funcも上のlisp 後に(funcall try-func)という記述がありますので、普通の関数なのかと思い調べたのですが、見つかりません。try-funcとはなんなのかも分からなくて困っております。 どうか教えていただけますでしょうか、よろしくお願い致します。
>>692 > let is a special form in `C source code'.
>
> (let VARLIST BODY...)
>
> Bind variables according to VARLIST then eval BODY.
> The value of the last form in BODY is returned.
> Each element of VARLIST is a symbol (which is bound to nil)
> or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
> All the VALUEFORMs are evalled before any symbols are bound.
だからerror-codeにはnilが束縛されて、
try-funcに(lambda () ...)が束縛される。
普通の関数は(funcall try-func)として実行できない。
try-funcが評価されて返ってきた関数を実行する。
>>693 お早い回答ありがとうございます!!
探しても載ってないletの取扱い方があるのかと思っていたのですが
そのままの文法にしたがって解読すればよかったということですね。
また、funcallの使い方も勘違いしておりました。
try-funcの定義部分を探して読めば問題ないということですね!
大変助かりました。
ありがとうございました!
探してというかマクロの引数。 command実行をauthでラップしてるんでしょ、どうせ。
WEB+DBの最新号、関数型言語入門を山本和彦が書いてるのを立ち読みして来た けど、LISPに関する文章が悲しくて泣けた Mewの開発者があれではなあ
>>696 「リスト遊び」のときからわかってることを今更マルチで書き込んでやるなよ
かずさんはHaskell厨だからな
700 :
デフォルトの名無しさん :2012/03/09(金) 07:48:01.98
Meadowでget-buffer-createしたバッファに while回しながら見つけたファイルの名前と中身を insertしようと (if (file-exists-p filename) (progn (insert filename) (insert-file-contents filename)) ) と書きましたが、書き込みがバッファされているようで、先にファイルの中身が 全部インサートされて後から(insert file)の結果がまとめてインサートされているようです。 (insert filename) (sit-for 0) (insert-file-contents filename)) とかやれば、そこでフラッシュされるかなと思ったのですが、 それもダメでした。何かいい方法はないでしょうか。
>>700 バッファされてるんじゃなくてpointがダメな気がする。
insertとinsert-file-contentsはpointからデータを挿入するけど、
insert-file-contentsの方は挿入した後pointを動かさないから、
(goto-char (point-max))とかしてみたらどうかね。
強制描画させるのなら、sit-forではなくて redisplay, redraw-frame, redraw-display とかは?
実践Emacs入門読んだ。 elispを関数型言語って言ってるんだけど 誤記たよね?
単に初期のLispじゃなくて、マッカーシー先生が論文中で示した、 理論的なモデルのことを指してるんじゃないかなそれは。
706 :
704 :2012/03/09(金) 16:37:17.52
そうなんだ
で、実装しちゃったのがスティーブ・ラッセル氏
るびきちの「Emacs Lispテクニックバイブル」ってこのスレの人的には 評価どうなん?
Emacsテクニックバイブルとは別の本だということを知らなかった
>>701 遅くなりましたが、そのとおりでした。ありがとうございます。
>>702 何かのときのために覚えて起きます。
るびきちって、るびーきち○いだった人?
> るびきちの「Emacs Lispテクニックバイブル」 内容以前に文章が稚拙すぎると思った。
いいじゃない。頑張って書いてるんだから。何処かの翻訳本とかの何書いてるか分からないよりはまし。 本書いたことがないとどれだけ大変か分からない。 それとも、お前サバンナでも同じ事言えんの?
>>713 サバンナ?わからない。
上の本に関してはどこか作者の心の乱れみたいなのを感じちゃって
正視に耐えなかった。
,,ト、,, ,,ィ ,ィ _,,-;" '' ゛''" ゛';__ ヽ/""゛゛''`';, ノr´) ,;'゛/__ _ "iヽ;ミ お前ってアレだよな… ,,'"|( d /oノ ド゛ `ミ サバンナじゃ真っ先に死ぬタイプだよな r ";,| ▼ ド゛ `ミ (`ヽ';ヽ_人__ノ / ,,ミ゛、 ヽ、 '';,i⌒⌒ / リ ヽ、 /` ィ'r`''''""´ ,,ミ゛ | / | ゛r、ノ,,トリ'" i | / | | |  ̄ ̄ ̄ ̄ ̄i ノ ̄ ̄ ̄ ̄ ̄ ̄/ ノ ̄ ̄ ̄ ̄ `ー ´ / / ,-ー´ / ((_(_(_ノ
savannah.gnu.org
Emacsはサバンナやったんや
, -――- 、 / ヽ | ノ ー | それっておかしくねぇ? |(・) (・) | だって、ここ2chじゃん | ( | ヽ O 人 >ー-― ´  ̄ ̄\ ⊂ニニ ̄ ̄ ̄ヽ / | くメ) _ノ | | | | | (/ | | / | | | | |/ /| | | | ト / | | | ヽ__/ | | |
氏の文章は論理的でなく読んでいて苦痛ですらある Emacs Lispテクニックバイブルp. 82から引用してみよう > 2-11-1 Lispファイルの置いているディレクトリを指定する > > ロードする方法を解説する前に、elispの置いてあるディレクトリを > 指定しなければなりません。それを指定することで、ロードするときに > Lispファイルのディレクトリ名を指定する必要がなくなります。 解説するのは誰か、ディレクトリを指定するのは誰か 本当に「しなければならない」のか こういった論理の乱れが作用し読者はいつしか電波を発するようになるのである
分かりにくいかもね。後半の文は要らんかったかもね。 どんな表現だったら良かったんだろうね 編集さん大変だったろうなあ
その人の本は読んだことは無いがそこをさっと目で流した限り、 一般的に言うところの”パスを通す”と似た様な事をするんだろうなと読め、そんなに引っかかりは感じなかった。 精読や多読していくと違和感を感じるんだろうか。
俺文書くのうまいぜっていう人ほど客観的になれなくて、 負けず嫌いだったりすると周りの言う事聞かなくなるからなあ。 小説の読み方の教科書とか
>719の文章は、「ロードする方法をさっと解説してからパス通すことを
教えた方が必要性が分かりやすくていいんじゃね」とか突っ込まれたときに
受け入れることも無視することもできなかった結果の産物っぽく感じる
だから、単に言うこと聞かずに我が道をゆく方がマシだったんじゃね
従わないけど聞かずにはいられないってタイプがもっとも支離滅裂な結果になる
>>721 基本的に著者の書きたいことを分かってる場合は(著者と同じく)おかしさを感じにくいからな
そういう脳内変換は2chやネットの文章あさるには必須の技能でもあるし
725 :
デフォルトの名無しさん :2012/03/10(土) 17:24:55.22
elispの置いてあるディレクトリを指定することで、ロードするときにLispファイルの ディレクトリ名を指定する必要がなくなります。 ロードディレクトリの指定は必須ではありませんが、 以降はロードディレクトリを指定した前提でロードする方法を解説します。 どう?
「るびきちは文章が下手で読むに耐えない」 2ちゃんでは珍しくはっきりした結論がでたな 「理科系の作文技術」でも読んで寝るわ
ちょっと前まではこの手の話題になると ねたみ酷いって書き込みが入ったものだが
その時もあんな酷い文例貼られてた?
>解説するのは誰か、ディレクトリを指定するのは誰か 解説は本の役目で指定するのは自分、これ以外どう解釈するんだ?
> ロードする方法を私が解説する前に、elispの置いてあるディレクトリを > あなたは指定しなければなりません。それをあなたが指定することで、ロードするときに > Lispファイルのディレクトリ名をあなたが指定する必要がなくなります。 はっきりさせるとむしろおかしくね?w
>>730 本人乙。そう解釈せざるをえないのだが、
| (本が)ロードする方法を解説する前に、(あなたは)elispの置いてある
| ディレクトリを指定しなければなりません。
一つの文で主語が切り替わるからイラつく。
>>730 複文かつねじれた文ってやつだよ
大卒ならみんな知ってる
>大卒ならみんな知ってる あほすぎ。なんか Emacs スレみたいな感じになってきたね。 あっちスレの誰かがやってきたのかな?
大卒じゃなくても…とか大卒でも…とかマジレスしようと思ったけど もしかしてその著者が大卒じゃないとかそういう流れでのレス?
るびきちは一応大卒だったと思うが >【著者紹介】 るびきち >早稲田大学大学院理工学研究科修士課程修了。
なんか臭い。
じゃあべつにジョークでもなかったか 素直に735の意に従うべきだったな
何かを作ったことが無い人は「これくらいなら自分でも本気出せば作れる」と思ってる
この程度なら、と思わせる文章の酷さ。
>>740 あるあるすぎて困るけど作品の批評とはまた別の話
743 :
デフォルトの名無しさん :2012/03/17(土) 14:27:29.00
質問です。2つのOCRした文章に、大きな違いが無いことを確認するために *ediff control panel*で (defun my-ediff-make-fine-diffs-all () (interactive) (let ((i 0)) (while (< i ediff-number-of-differences ) (ediff-make-fine-diffs i) (setq i (1+ i)) ))) として overlay で違いを強調するところまではやったのですが、 overlayのままでは、enriched-mode で保存も出来ないので、 overlay を text-property に変換して enriched-mode で保存できたら いいなと思ってるんですが、どうすればいいでしょうか。 文章が長いのとOCRのノイズが多いので、手ではやりたくありません。 よろしくお願いします。
next-overlay-changeとかでバッファの先頭からループして テキストプロパティに変換して削除して回るだけっぽい
746 :
デフォルトの名無しさん :2012/03/21(水) 23:49:54.13
deを含まないabcを探索したいのですが、以下でうまくいきません。 もしかして、emacs lispで「?!」は使えないのでしょうか? (re-search-forward ”abc(?!de)” nil t)
Infoぐらい読もう。 (info "(elisp)Syntax of Regexps")
748 :
746 :2012/03/22(木) 01:07:53.55
>>747 special charactersに「!」が含まれていないので、
使えないという理解でいいんですよね?
うーん、書くのが面倒くさくなるなあ。
>>750 すまん。Emacsに先読みが無いことに今気がついた。
普通は後続の正規表現を指定するか、単語境界いれるからあんまり使わないんだよね
elispは拡張正規表現をサポートしていない。 代替するとこんな感じか?わっかりにっきーな (re-search-forward "abc[^d]\\|abcd[^e]\\|abc$\\|abcd$")
言いたいことあるなら中身まで言えば良いのに
>>750 emacsの正規表現でグループ化するには(をエスケープして\(としてやらないといけない
しかし単に"\("と書いてはいけない。
"\("が文字列として評価され(になり、その(が正規表現に渡されてとして評価される
正規表現に\(を渡したい時は文字列"\\("としないといけない
>>755 エスケープはわかったからさ。
>>746 の
> deを含まないabcを探索したいのですが
これをemacsの正規表現で書いてくれや。
サーセン
? emacsの正規表現って定義あるよね?
Perl/Ruby/Python/TclとかにあるNegative lookahead (?!re)はemacs lispには無いはず。
emacs24とかは知らんが。
abc(?!de)は、"abcxxxx" の最初の "abc" とマッチするんだよね。
>>752 のは "abcx"とマッチすることになるから微妙に違ってくる。
emacs lispでは、ひとつの正規表現だけでは、これと同じことはできないんじゃないの?
vim なら abc\(de\)\@! でできる。 Emacs の正規表現の貧弱さにはいつもイライラする。
鬼車導入と新たな正規表現リテラルの導入かねやっぱり
今更エンジン変更とか新しくPEG導入するよかコストかかりそう
正規表現をPCREに変えろという話が本家で出ては消え、出ては消え・・・ 本気で変えたいんならレキシカルスコープ変数やった人みたいに、 専用ブランチ作ってマージして、互換性の問題などを検証してみんなを納得させないといけない。 PEGはもういくつか実装あるような希ガス
ELisp の場合、正規表現を特別扱いするような文法はないから、単に新しい関数群を導入すれば互換性は壊さずに済むよ。 pcre-search-forward や pcre-match-string みたいな。
766 :
デフォルトの名無しさん :2012/03/24(土) 19:29:57.02
以下の設定で、open -gとしてバックグランドで開きたいのですが、どのように書けば"-g"オプションを渡せますか? (setq browse-url-generic-program "/usr/bin/open")
browse-url-generic-args ってそれ指定するための変数じゃねーの?しらんけど
>>767 (setq browse-url-generic-args (list "-g")))
でうまく行きました。ありがとうございます。
769 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/03/29(木) 21:59:31.62
The Emacs Widget Libraryを使おうとしているのですが、引数の渡しかたが分からず困っています。
http://www.dina.kvl.dk/~abraham/custom/widget.html (setq anyItem '(item "a")) ;;OK
上のように決めうちにすると、値が"a"のanyItemを取得できるのですが、
(setq itemName "b") ;;←この値を設定したい
(setq anyItem '(item itemName)) ;;NG
このようにすると、anyItemの値が"b"ではなくitemNameとなってしまいます。
itemの値として変数を与えるにはどう書けばよいですか?
(setq anyItem `(item ,itemName)) とか (setq anyItem (list 'item itemName)) とかかな。
772 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/03/30(金) 23:40:21.62
呼び出した関数処理の途中でユーザーにウィジェットによる選択画面を出したいのですが、 入力終了まで次の処理を待たせる方法はないですか? widget.elを使って書いたのですが、(widget-do-something)を呼び出した後、 すぐ次の処理に進んでしまいます。 (widget-do-something);;ユーザーからの入力が受け付ける何らかのウィジェットを出す ;;←ここでwidget-do-something終了まで待ちたい。 ;;入力パラメータによって処理を変える
widgetはそういういわゆるモーダルダイアログのようなものではないので普通には無理 widget使うならコールバックで頑張るとか、イベントハンドラの連鎖で処理をつなげて自分で状態管理する必要がある モーダルにしたいのなら、ミニバッファ使う関数か、orgmodeのようにread-char-exclusiveとかで1文字づつ読むしかない
774 :
772 :2012/03/31(土) 21:42:37.45
>>773 やっぱりちょっと難しいですか。ありがとうございます。
775 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/03/31(土) 21:49:43.85
(1)のように値を直接入れるとリストにデータを追加できますが、(2)のようにするとエラーとなります。 変数として代入したいのですが、(2)をどのように書けば良いですか? (setq pair '("aaa" . ()));;(1) OK (setq label "aaa") (setq pair '(label . ()));;(2) Error (setq listdata (cons pair listdata)) ;;リストに追加
>>775 お前がエラーと書いてるところではエラーにならず (LABEL) が返ってくるはずだぞ。
言いたいことがよくわからんがこういうことを言ってんのか?
(setq pair `(,label . ()))
777 :
775 :2012/03/31(土) 22:53:33.10
>>776 >(setq pair `(,label . ()))
求めていたのはまさにそれです。ありがとうございました。
>お前がエラーと書いてるところではエラーにならず (LABEL) が返ってくるはずだぞ。
エラーとなるのは、
(setf (cdr (assoc label listdata)) (cons "aa" (cdr (assoc label listdata))))
のように値を放り込もうとしたタイミングでした。
>let*: Wrong type argument: consp, nil
不正確な質問の仕方をしてすみません。
バージョンが違うだけです。 ;;そのサイト、ライセンスをちゃんと明記してあるかな?
>>779 原文のライセンスを継承します
とは書いてありますが、明記となるとよく分かりません。
本の内容はサイトとほとんど変わらないということですね
むしろ、最新のサイトを参照したほうが良さそうですね。
ありがとうございます。
なんで明記しないのかな? しかし元のASCIIの版もftp.ascii.co.jpが到達不能でライセンス違反だなw 一応関係者に連絡しておくかな。
782 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/04(水) 20:38:23.66
すみません。 (func 1)で呼び出している場合など、 'で呼び出す関数funcに引数を与えるにはどのように書けば良いでしょうか? (define-key global-map [(meta t)] 'func)
(lambda () (interactive) (func 1))
784 :
782 :2012/04/04(水) 21:15:30.44
全然良くなかったよ ELispは扱ってないし、説明もわかりにくいし 著者のおすすめ設定・拡張機能の紹介だけしか読むところはないけど、 こんなブログで済むような内容で2500円は高すぎる Matzの紹介文や絶賛ばかりの書評に騙されたわ Emacs付属のチュートリアルを読んで、Webで情報を補えば事足りるかと
ココの人が褒めるような内容だと濃すぎて余計売れなくなりそうだな
それは確実だな ただ、初心者向けなら今更感溢れるEmacsのノーマルな紹介じゃなくて キャッチーな話題作りに基づく本が必要、つまり話題が先に必要だろうな RubyでいうRailsとかそんな感じの、コアな話題に見せかけて初心者向けな
初心者か、emacsもっと普及して欲しい 普通の人っていちいち矢印キーでカーソル移動して操作してんだろ? マウスやshift+カーソル移動で行を削除したり、 それがどれほど効率の悪いことか疑わず気づかずに過ごしている
コンソール互換の冴えないというか原始時代な画面レイアウトと マウススクロール対応がしょぼいのをどうにかしないと流行らないだろうな でもそのあたりをどうにか(今風に)してしまったらもはやEmacsじゃない
emacs の C-n/p/f/b が至高のカーソル移動とは思えんけどな。 n/p/f はまだいいけど b はなによ b は。 別に emacs これ以上普及する必要もないと思うけどなあ。
頭文字より操作性考えて選べよって話だよ
n next p previous f forward b backword
「頭文字D」のDVDを借りに行ったら 「か」行の欄探しても見つからなくて 「あ」行探したら見つかった って話を思い出した
C-bだけは擁護しようないわな。
M-bが押しにくい。押しにくいのもあってかあまり使ってない。 HHKのスペースバーの左のキーをMにしてるんだけど。 M全般押しにくい。皆さんどうしてるの?
>>797 同じくスペースの左(うちは無変換)にMを振ってる
M-bはシェルでよく使うからそのうち慣れるよ
でもS式の編集みたいにプレフィクスがM-C-だとさすがに萎えるよ
そんなの矢印キーでいいじゃん。 個人的には C-b は別に普通に押せるけど、M-v が駄目だ。 ……ここって Lisp のスレじゃなかったの?
800 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/08(日) 16:45:55.02
以下のlist1から「list2にマッチしないリスト」listUniqFromList2と、「list2とのマッチを先頭に移動させたリスト」listSortByList2 をそれぞれ作りたいのですが、以下のようにループでいちいち要素を判定するよりもっと簡単な書きかたはできますか? (while (< i (length list1)) <中略> (setq i (+ i 1))) (setq list1 '("1" "2" "3" "4")) (setq list2 '("2" "3")) ;;(setq listUniqFromList2 '("1" "4")) ;;作りたいリスト ;;(setq listSortByList2 '("2" "3" "1" "4")) ;;作りたいリスト
>>800 java っぽい。Lisp の集合を扱う関数は順序は思ったようにならないことが多
いので自前で while 書いた方が楽だと思うな。
関係ありそうな関数は (require 'cl) して union とか intersection,
set-difference あたりかなぁ。
802 :
800 :2012/04/09(月) 02:09:51.23
>801 ありがとうございました たしかにときどき順序が逆順になってて あれって思いました
範囲選択後に文字を入力すると選択が解除されて後部に文字が入力されます これを普通のエディタのように選択中のテキストを削除してそこに文字を入力するにはどいうLispを書けばよいのでしょうか?
(delete-selection-mode t)
805 :
デフォルトの名無しさん :2012/04/12(木) 21:22:14.05
現在の全てのバッファのファイルパスを取得したいのですが、どのように書けば良いでしょうか? (buffer-list)を使おうとしたのですがよく分かりませんでした。 (setq myBufferList (buffer-list)) (setq i 0) (while (< i (length myBufferList)) (message (nth i myBufferList));;エラー ;;メッセージバッファなどを除いた存在している各ファイルパスを取得したい (setq i (+ i 1)) )
lisp/buffer-menu.elを見てつくってみた (let ((f-list nil)) (dolist (buffer (buffer-list)) (with-current-buffer buffer (let ((f buffer-file-name)) (if f (setq f-list (cons f f-list)))))) f-list)
・関数messageの正しい使い方 ・関数buffer-file-name でいいかと
clを使っていいのなら (remove-if-not 'identity (mapcar 'buffer-file-name (buffer-list)))
809 :
805 :2012/04/13(金) 04:47:32.46
810 :
デフォルトの名無しさん :2012/04/13(金) 05:46:02.67
以下のように、string-matchを使うとminiバッファにmarc setと表示されてしまうのですが、 これを表示させないようにする方法はないでしょうか。 (setq sample-string "12:") (if (string-match "^[0-9]+\\:" sample-string) (message (match-string 1 sample-string)) )
>>810 > (setq sample-string "12:")
> (if (string-match "^[0-9]+\\:" sample-string)
> (message (match-string 1 sample-string)) )
どうして string-match が Mark set を出してると判断したの?
出ないんだけど。前後のコードも出してみたら?
812 :
810 :2012/04/13(金) 17:43:11.27
>>811 その前にgoto-lineを使っているのが原因でした。うっかりしていてすみません。
>>804 出来ました!
あ、でもEmac-Lisp-modeだと問題無いのにShell-Script-modeだとシングルクオートやダブルクオートを入力すると選択解除追加されてしまいまう…
<や>を入力しても解除される…
むぅ…
814 :
デフォルトの名無しさん :2012/04/17(火) 18:21:12.39
初歩的な質問で申し訳ありません。 (setq list1 (list 1 2 3 4)) を、(1 2 5 3 4)となるように途中に要素を途中に挟み込むにはどう書けばよいですか? 以下のようにconsだと先頭に追加されてしまいます。 ;;(setq list1 (cons 5 list1));; -> (5 1 2 3 4)
cl 使っていいなら (setq list1 '(1 2 3 4)) (push 5 (nthcdr 2 list1))
(defun nth-insert (x n list) (if (or (= n 0) (null list)) (cons x list) ; 0オリジン (cons (car list) (nth-insert x (1- n) (cdr list))))) (nth-insert 5 2 '(1 2 3 4)) -> (1 2 5 3 4) (nth-insert 5 10 '(1 2 3 4)) -> (1 2 3 4 5)
817 :
デフォルトの名無しさん :2012/04/17(火) 23:34:43.50
バッファのあるポイントからあるポイントを、 目立つよう反転表示か色づけするにはどうやればいいですか?
818 :
814 :2012/04/17(火) 23:36:42.03
>>815-816 ありがとうございます。
>>815 >(push 5 (nthcdr 2 list1))
(5 3 4)になってしまったのですが。
>>816 これは便利ですね。nth-insert使わせてもらいます。
>>818 (push 5 (nthcdr 2 list1)) の評価結果は (5 3 4) だけど
list1 を評価すればちゃんと(1 2 5 3 4)になってるよ。
> nth-insert これ、リストがでかいときはどうなるの?
821 :
814 :2012/04/18(水) 00:24:38.76
>>819 >list1 を評価すればちゃんと(1 2 5 3 4)になってるよ。
あ、早合点で失礼しました。m(__)m
>>817 リージョンに対して
facemenu-set-background とか
facemenu-set-foreground とか使えばできる。
824 :
817 :2012/04/18(水) 01:50:47.69
>>822 できました。ありがとう御座います。
色づけすると、バッファが更新されたものとして扱われてしまうので、
今のところ(revert-buffer t t)として元に戻しています。
readOnlyとしてファイルを扱いたいなら、表示用に一時的なバッファを作るのが順当なやり方でしょうか?
825 :
デフォルトの名無しさん :2012/04/18(水) 02:05:25.85
すみません。edebugの使いかたで2点教えてください。 (1)gdbのdisplayコマンドのように、ブレークポイントで停止するたびに自動的に式の評価をすることはできますか? (2)C-u M-C-xでデバッグ対象に登録した関数を解除するにはどのコマンドを使えばよいでしょうか?
>>823 Elisp で末尾再帰したくなるやつは馬鹿です。
こういう例でいいのかな。でかいといっても 2000 程度。 (nth-insert 'x 2000 (number-sequence 0 2000))
そこでリスト使うなw
>>825 (2) eval-defun かな。edebug-defun で再評価でも良いけど。
830 :
825 :2012/04/21(土) 14:10:54.27
全てのモードで保存前にuntabifyを実行したいのですがどのように書けば良いのでしょうか?
832 :
デフォルトの名無しさん :2012/04/21(土) 18:32:10.77
before-save-hook に untabify を add-hook すればいいんじゃない?
出来ますた(`・ω・´)
>>824 set-buffer-modified-pで無理やり戻すという方法もあるけど、
overlayならそもそも変更フラグ変わらないよ。
835 :
デフォルトの名無しさん :2012/04/23(月) 00:50:25.50
:evalでひとつのシンボル。evalとは名前以外なんの関係もない。
837 :
835 :2012/04/23(月) 01:35:49.05
>>836 なるほど。
mode-line-formatのdoc見たら、それらしき記述があった。
特殊な文法なのかと思ってたから、docを見ることに気付かなかった。
もうちょっと、よくdoc読んでみます。
ありがとう。
838 :
824 :2012/04/24(火) 21:28:17.40
>>834 ありがとうございます。
overlayを試してみているのですが、使いかたが分からなくて困っています。
色づけをするのに(facemenu-set-background "red" line-begin-point line-end-point)の代わりに、
(move-overlay mouse-secondary-overlay line-begin-point line-end-point (current-buffer))
としてみたのですが、これはどうやって色を消せば良いのでしょうか?
>>838 自前のoverlayならdelete-overlayで消すのがいいと思うけど、
mouse-secondary-overlayみたいに他の人が作ったものは勝手に消すとまずいので、とりあえずmouse.elでも覗いてみれば参考になるんじゃないかな。
840 :
838 :2012/04/25(水) 19:22:37.42
>>839 自前でoverlayを作成してdelete-overlayで消すのでうまく行きました。ありがとうございます。
841 :
デフォルトの名無しさん :2012/04/26(木) 15:53:58.98
リストを関数の戻り値として渡すにはどのようにすればよいですか? たとえば以下の関数get-array-from-stringでarray1を戻り値にしたいのですが、一般的なやり方が分からなくて、 現状とりあえず(setq array2 array1)としています。 (defun* get-array-from-string(string1);;文字列から配列を作成する関数 (setq array1 (split-string string1 "\n")) ;;なんらかの加工処理(略) (setq array2 array1) ))
>>841 > リストを関数の戻り値として渡すにはどのようにすればよいですか?
> たとえば以下の関数get-array-from-stringでarray1を戻り値にしたい
いまいち意味がわからない。
関数の戻り値にしたいのか外部変数の array1 に設定したいのか。
(defun* get-array-from-string(string1)
(setq array1 (split-string string1 "\n"))
;;なんらかの加工処理(略)
array1)
関数定義の最後の式が戻り値になるんだが。
もうちょっと正確に言うと最後に評価された式が戻り値になる、だな
そういうのをbodyの暗黙のprognと言います。
defun* ってなんだかよくわからないけど let 使ったほうがいいんじゃないかしら
846 :
841 :2012/04/26(木) 19:56:40.66
>>842 >array1)
ありがとうございます。array1単独で式として成立すると分かってませんでした。
>>845 そうですね。letつけ忘れていました。
letをつけ忘れを検出してくれるツールでもあればいいんですが。。
setqとletじゃ構文も意味も全然違うしelispには暗黙の変数宣言なんてのはないから 付け忘れってのはありえないと思うんだけど
>>847 cの癖が抜けず、使う変数をプログラムの頭でletでまとめて宣言とかやってしまっているので、
必要のない変数宣言が残っていたり、setqしている変数がローカル変数ではなく大域変数になっていたりということが結構あります。
組み方がまずいのですけど。
たぶんおまえが思ってる以上に根本的なとこから間違ってる
>>849 すみません。
lispの変数は必要な範囲で括弧でくくって使用するものなのに、
>>848 のようなコメントが出ること自体、考え方として間違っている
というニュアンスの理解でだいたい合っていますか?
>>848 未使用なローカル変数が残る事はどの言語でもある事だけど、ローカル変数と思っていたものが
グローバル変数になっていたというのは有り得ないと思うよ。
elispは、hoge.elだったらhoge-hensuuとプリフィックスを付ける事が必須のマナーになってる。
ローカル変数はiとかarray1にすれば、うっかり(?)グローバル変数を書き換える事は無くなる。
>>853 あと、emacsはそれ自体のソースを見る事が超簡単なんで、既存のソースをざっと見るのも
いいと思うよ。
Lispっぽいプログラムにしたいなら、
setqは必要な時意外は使わない方がいいとかかね?
>>841 とかは、setqまったく使う必要が無いし。
emacsに標準添付されてるelisp群もあんまりlispっぽい書き方してないの多いっていうけどね。
lispっぽいにも色々あると思うけど、whileとかsetq使わないっていうのは 俺には無理だな。 mapcとか使ってれば、とりあえずlispっぽいと思ってる。
859 :
848 :2012/04/28(土) 01:23:18.20
>>852 ありがとうございます。
>elispは、hoge.elだったらhoge-hensuuとプリフィックスを付ける事が必須のマナーになってる。
ちゃんと命名規則を調べずに書いてました。lispのルールに合わせます。
>>856 >setqは必要な時意外は使わない方がいいとかかね?
参考になりました。以後気をつけます。
>>858 再帰的な書き方をループで使えないから、そのへんではsetqつかわんとだねelispは
861 :
デフォルトの名無しさん :2012/04/28(土) 17:03:38.53
正規表現にマッチしたカウント数を取得するのって↓よりいい方法ってないですかね? (defun string-match-count (regexp strings) (let ((begin 0) (count 0)) (while (setq begin (string-match regexp strings begin)) (incf begin) (incf count) ) count ) )
バッファを使う。 (defun string-match-count (regexp strings) (with-temp-buffer (insert strings) (loop for count = 0 then (1+ count) while (re-search-backward regexp nil 'noerror) finally return count)))
>>861 whileの条件式を(string-match ...)だけにして
(incf begin)を(setq begin (match-end 0))に変更するとか。
これくらいのループ処理なら好みの間題かなあ
例えば、doマクロだとこんな感じ
(defun fn (regexp strings)
(save-match-data
(do ((begin 0 (match-end 0))
(count 0 (1+ count)))
((not (string-match regexp strings begin)) count))))
with-temp-buffer でバッファ作っちゃうんなら count-matches あるね。 strings って複数形なのが気になった。
865 :
863 :2012/04/28(土) 23:57:10.72
あー、これREGEXPが""だと停止しないので注意
866 :
デフォルトの名無しさん :2012/04/30(月) 14:49:40.12
基礎的なことかも知れませんが一つ質問させてください。 S式をバッファに文字列として記入するときはどのようにやるのが一般的なのですか? 色々検索しているうちに (insert (format "%s" sexp)) というやり方は見つけたのですが、 これだと、 sexp が例えば ("hoge" "hage") の時だと、 バッファには (hoge hage) と書き込まれて引用符が抜けちゃうんですよね……。
prin1-to-string
868 :
866 :2012/04/30(月) 15:09:10.39
>>867 ありがとうございます! 確かに思ったとおりのことが出来ました。
この辺に関してはもうちょっと勉強しておきます。
ググってもよく分からなかったんだけど、emacs lispって チューリング完全ですか?lispはチューリング完全との事でしたけど。
チューリング完全かどうかを判断するのにググっとるようでは、 それを知ったところで意味がない。
知らないなら無理して答えてくださらなくても結構です。
チューリング完全とはいかなることか分かっていれば、そんなブザマな質問を する必要はありませんから。
チューリング完全ですん
ほとんどのプログラム言語はチューリング完全なのにわざわざ聞くなよ。
チューリング完全でないものをプログラム言語と呼んでよいものか
むしろ、チューリング完全でないプログラム言語って何がある?
論理記述言語ゲーデル
>>877 あれか、対角線上にコードを記述するやつか?
879 :
デフォルトの名無しさん :2012/06/01(金) 18:33:09.85
クリップボード(kill-ring-save)の値を取得するにはどのようにしたらよいですか? キーボードマクロany-keyboard-macro実行後に入っているクリップボードの値を、 以下のようになんらかの判定に使いたいのですが ('any-keyboard-macro) (if(string= "any-judge-string" <クリップボードの値の取得>) <処理> )
馬鹿には無理
>>879 (current-kill 0 t)でok
882 :
879 :2012/06/01(金) 21:46:55.78
884 :
879 :2012/06/01(金) 22:40:29.41
すいません。これで解決したかと思いきや、 (fset 'hoge "\C-a") (defun test() (interactive) ('hoge) ) 実行すると、test: Invalid function: (quote hoge)とエラーが出ます。 修正の仕方を教えてください。
馬鹿には無理
>>884 ・fset は関数定義を束縛する関数であってキーバインドを設定は出来ない
・関数hogeを呼び出したい場合は ('hoge) じゃなく (hoge)
そもそも何をしたいのか書いたほうがよさそうね。
>>886 >そもそも何をしたいのか書いたほうがよさそうね。
はい。すみません。
insert-kbd-macroで取得したhoge1, hoge2, hoge3のfset定義があるとして、
hoge1の実行結果によって、hoge2またはhoge3に処理を分岐させて、
(define-key global-map [f8] 'test) とラッパー関数を定義したかったのですが。
(define-key global-map [f8] 'hoge)だと実行できるのですけど、
hogeを関数のなかから呼び出すのは無理でしょうか?
>>888 ありがとうございます。
(execute-kbd-macro (symbol-function 'hoge))でうまく行きました
>>885 とりあえず自己紹介乙。
>>889 こういう頓珍漢なこと考えてるのに偉そうなやつむかつくよな。
馬鹿と言われるだけの理由が
>>884 にはある。
自己紹介乙
最初の頃は定石が分からず暗がりを手探りしながら書くから 経験者から見ると変なことやってるように見えるもんだ。 人を育てた経験がないんだろうな。
うるさい死ね
馬鹿には無理っていうのはまあそうだろうけど、 雑な人にも色々難しいと思う
馬鹿なことや頓珍漢なことよりは偉そうなことを問題にしたい。
馬鹿だから俺には無理です とかだと納得するんかな この馬鹿は
まったく問題はないが馬鹿なのは確定
899 :
デフォルトの名無しさん :2012/06/15(金) 09:49:04.02
一つ質問させてください。 temp-bufferを、window分割せずに使用しようとして以下のコードを書きました。 (let ((temp-buffer-show-function 'switch-to-buffer)) (with-output-to-temp-buffer "*test*" (princ "foobar\n"))) これだとwindow分割せずに*test*といバッファができますが、"foobar"が表示できません。 どうすれば、window分割せずに"foobar"を表示できるのでしょうか?
display-buffer すりゃいいんでないの?
>>899 普通にbuffer作って表示じゃだめなの?
(with-current-buffer (get-buffer-create "*test*")
(insert "foobar\n")
(switch-to-buffer (current-buffer)))
そもそも表示されるというか、挿入されてるだろ。
903 :
899 :2012/06/16(土) 01:38:19.01
>>900-902 ご回答ありがとうございます。
大変申し訳ありませんが、本件、私の早とちりでした。
実際にはfoobarは挿入されており、挿入された行が
表示領域の上に隠れてしまったので
見えていないだけでした。
#スクロールすることで上から出てきました。
誠にお恥ずかしい限りです。
今後気をつけますので、どうかお許しくださいますようお願いします。
2chであまりに丁寧に謝られると逆にむかつく法則。
_____ /_ | /. \ ̄ ̄ ̄ ̄| / / ― ― | | / - - | ||| (6 > | | | | ┏━┓| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | | | ┃─┃| < 正直、スマンカッタ。 || | | | \ ┃ ┃/ \________ | || | |  ̄  ̄|
よくできたAAは健介と蝶野の区別がつかない
クズなやつほどエディタごときに時間費やすからな
エディタで人生の大半を浪費する。それも人生
ゴミみたいな人生だな
人生の大半を2ちゃんで過ごしている俺は勝ち組。
コードたくさん書いて色々意見言い合って充実感を感じたい
以下はjavaの関数名を抽出するelispです。 望んでいる実行結果はこうです: ("privateMethod1" "protectedMethod1" "publicMethod1") 実際はこうなってしまいます: (#("privateMethod1" 0 14 (fontified t)) #("protectedMethod1" 0 16 (fontified t)) #("publicMethod1" 0 13 (fontified t))) #で始まるこのリスト#("privateMethod1" 0 14 (fontified t))は何者ですか? carをためしてみるとwrong-typeと言われ、type-of関数でチェックするとstringと言われました。しかしstringには見えません。 望んでいる実行結果を得るにはどうすれば良いのでしょうか。お教え下さい。 ; Test.javaバッファ public class Test { private privateMethod1() { } protected protectedMethod1() { } public publicMethod1() { } } (require 'cl) (save-excursion (set-buffer "Test.java") (goto-char (point-min)) (let ((case-fold-search nil) (regexp "\\(private\\|protected\\|public\\) +\\([a-zA-Z0-9_]+\\)(") methods) (while (re-search-forward regexp nil t) (push (match-string 2) methods)) (nreverse methods)))
それは propertize された文字列って奴です。 色つけたり編集不可にしたりとかの属性付き文字列ってやつね。 font-lock した状態の文字を切り取るとそんなふうになったりする。 そのまま挿入したりするんでも無ければ特に問題なく文字列としても扱えるよ。 なお、propertize されてない文字列を扱いたい場合は *-no-properties ってのを探すといい。 この場合は match-string => match-string-no-properties で OK なはず。
>>913 即レスありがとうございます。
propertiesと言うのですね。#()で検索してもうまく情報を見つけられなくて。
match-string-no-propertiesでうまくいきました。
916 :
デフォルトの名無しさん :2012/07/08(日) 21:17:34.50
eval関数で質問です。 通常の (eval arg〜) で呼び出すのはわかるんですが (:eval arg〜) というのはどういう意味を持つのでしょうか? (eval はみつかるのですが : がつくのが見つからないです。
:evalなんて呼び出しできるの? うちのemacsでやったらエラーになったぞ
>>916 もしかして文脈は mode-line-format ?
:eval に関しては特殊な書式と思っておけばいいんじゃないかな。
訂正 :eval に関しては mode-line-format だけで通用する特殊な書式と思っておけ ばいいんじゃないかな。
920 :
916 :2012/07/08(日) 23:11:58.33
>>919 はい、まさにそのmode-line-formatでした。
powerline.elを使おうとして、
いじっていたところ、
(:eval とかが出てきて、どういう解釈なのかよくわからなかったので聞いてみました。
上で話題になっているpropertizeに渡す引数評価もどうしようか、悩んでまして・・。
mode-line-format初期値にあるmode-line-modesを渡したいのですが、
mode-line-modesは全部評価されないと文字列にならない?みたいで・・。
あと初期値にはいっている
#( で始まる記述はpropertize独自のものですか?
#(はテキストプロパティ付きの文字列を評価した時に出てくるだけで そういう構文があるわけではなかったかと。
先生! C-[に何かを割り当てたいのですがESCになってしまいます (global-set-key (kbd "C-[") 'my-func) どうすればいいんですか!?
local-function-key-map をいじればできるんじゃなかったっけ。
>>924 その魔法(Escを削除してる?)の後に
(global-set-key (kbd "C-[") 'my-func)
を入れたけど駄目ですた(´・ω・`)
あ、なんかkey-intercept.elを使ったらでけた でもこれ、、起動時に読み込まれるファイルに(key-intercept 1)と書いても有効にならないなー 起動後に評価するといけるんだけど… ふーむ
C-[にコマンドの割り当てって出来るの?
古典的な端末ではCtrl-[はESCです。 Window system版のEmacsでは全てのキーストロークに別の割り当てが可能です。 (ただしOSの許すキーストロークだけですが) つまりCtrl-[とESCの区別が可能です。 過去の経緯からEmacsでは起動時にはCtrl-[とEscを同一視してます。
ん?Windowsでない端末上でESCに割り当てればCtrl-[で呼び出せるん? それってどうやるのかしらん
Windows?
Window System != Windows X とか Mac の非コンソールも Window System版だよ
X-Window のことを dis るときに X-Windows って書いたりするよね。 最近の Windows はよくできてるから dis りになってないような気もするけど伝統なので。
dis る程 X 自体が話題に上がることもなくなったよね
外部elファイルでこのような内容があった時、 (defvar my-func '((name . "funcname"))) 外部elファイルを弄らずにこの(name . "funcname")を(name . "abcdef")に変更するにはどうすれば良いのでしょうか?
(setcdr (assoc 'name my-func) "abcdef")
これは凄い… lispってこんな簡単にoverride出来るんだ… ありがとう
overrideっていうより単に連想配列の値を変更したってだけだと思うが・・・
調子にのってpure space壊さないようにな
カーソルのあるfaceの色を取得するにはどうすればいいのでしょうか? (message "%s" (get-char-property (point) '????))
(face-foreground (face-at-point))
ありがとう
942 :
デフォルトの名無しさん :2012/07/18(水) 20:11:00.96
rubyで書いたものを一発でコンパイルする設定がどうしても出来ませーん
意味がわからない smart-compile とか quickrun でも導入したら?
944 :
デフォルトの名無しさん :2012/07/19(木) 18:27:25.56
>>943 説明不足でした。
「smart-compile」を導入しようと思い、
usr/.emacs.d/elisp/ smart-compile.el をいれて、
usr/.emacs.d/init.el に
(require 'smart-compile)
(define-key ruby-mode-map (kbd "C-c c") 'smart-compile)
(define-key ruby-mode-map (kbd "C-c C-c") (kbd "C-c c C-m"))
を書き込んだんですけど。
この設定では、ダメなんですかね〜。
゙'. '.;`i i、 ノ .、″ ゙'. ,ト `i、 `i、 .、″ | .,.:/"" ゙‐,. ` / ` .,-''ヽ"` ヽ,,,、 ! 、,、‐'゙l‐、 .丿 : ':、 、/ヽヽ‐ヽ、;,,,,,,,,,-.ッ:''` .,"-、 ,r"ツぃ丶 `````` ../ `i、 ,.イ:、ヽ/ー`-、-ヽヽヽ、−´ .l゙`-、 _,,l゙-:ヽ,;、、 、、丶 ゙i、,,、 ,<_ l_ヽ冫`'`-、;,,,、、、、.............,,,,、.-`": │ `i、 、、::|、、、ヽ,、、. ```: : : ``` 、.、'` .|丶、 .l","ヽ、,"、,"'、ぃ、、,、、、、.、、、.、、、_、.,,.ヽ´ l゙ ゙).._ ,、':゙l:、、`:ヽ、`:、 : `"```¬――'''"`゙^` : ..、丶 .l゙ `ヽ ,i´.、ヽ".、".、"'ヽヽ;,:、........、 、、...,,,、−‘` 、‐ |゙゙:‐, ,.-l,i´.、".`ヽ,,,.".` `゙゙'"`'-ー"``"``r-ー`'": _.‐′ 丿 ,! j".、'ヽ,".、".、"`''`ー、._、、、 、._,、..-‐:'''′ .、,:" 丿 ゙l,"`"`''ヽヽ"`"` ```゙'''"ヽ∠、、、、ぃ-`''''": ` 、._./` ._/` `'i`ヽヽヽ`''ーi、、、: : 、.,-‐'` 、/` ``ヽン'`"` : `~``―ヽ::,,,,,,,,,,.....................,,,,.ー'``^ ,、‐'"` `"'゙―-、,,,,..、、 : ..,、ー'"'` : `‘"`―---------‐ヽ``"''''''""
ここはelispパッケージの使い方のスレッドではありません。
>>944 またちょっとわからんのだけど、
C-c c を押したら smart-compile が呼び出される
C-c C-c を押したら確認なしで smart-compile が実行される、を実装したいってことかね?
普通に動くけど。動かないってのはどういうふうに動かないわけ?
ruby のパスとかちゃんととおってるのかね。
948 :
デフォルトの名無しさん :2012/07/26(木) 02:25:27.85
elispパッケージのパッケージの話題はここでいいのかな。
mcomplete.elというパッケージの作者です。
しばらくelispから離れていたんですが、昨日あたりからemacs24.1をWindows7にインストールして復帰をもくろんでいます。
mcomplete.elは以前は多少は使ってくれている人がいたんですが、最近の様子はどうなんでしょう。
すでに機能的にobsoleteなpackageになってしまったのか他のpackageがとって替わったとか、
そこらへんの状況を教えていただけないでしょうか。
もし需要があるようならelispのリハビリもかねて何かアップデートしようかなと思っています。
http://homepage1.nifty.com/bmonkey/emacs/index.html
23あたりで補完絡みが色々かわってて、 completion-styles に自分で使いたい補完の種類をいれるみたいになったみたい。 completion-styles-alist に設定出来るスタイルを説明付きでいれるんだけど、 partial-completion-mode みたいなのはここで設定するようになったってのと、 lch ->> list-command-history なんて補完も出来るようになったのが違いか。 kogikuはここらへんの変更についていけなくなってて追加された機能を一部殺さないと使えなくなった。 mcompleteも更新するんであればここら辺の仕様に則って更新してくれると嬉しいなぁ
>>949 レスありがとうございます。とりあえずEmacsのcompletion周りの変更を勉強してみます。
gnu.emacs.helpにも似たような質問を投稿したんですが、Emacs24にバンドルされているidoが
mcompleteと機能的にかぶっているということと。helm、iciclesっていう補完パッケージがあるってことが
分かりました。いまのところあっちではいまでもmcomplete使っているって人はいませんでした。
helmことanythingはmcompleteとは趣が結構ことなるものだよね 個人的にはiciclesとかmcompleteみたいなemacsの元々の性質生かしてるようなのが好きだなあ
952 :
デフォルトの名無しさん :2012/07/29(日) 21:56:48.72
/sshx:remotehost:filepathでリモートホストにアクセスしているときに、 リモート環境ではなく、ローカル環境のパスを参照することはできますか? たとえば(shell-command-to-string "ls")を実行すると、リモートシェルが使われて、 リモートのファイルリストが取得されてしまいます。 リモートファイルをEmacsで編集している最中に、 ローカルファイルから動的にキーワードを読み込んで貼り付けたいのですが。
>>952 cd 関数を使うか default-directory 変数を直接いじるかして
ローカルディレクトリを指し示しておけばいいよ。
954 :
952 :2012/07/29(日) 23:11:59.36
>>953 あ、なるほど。ラッパーを被せてうまく行きました。ありがとうございます。
(defun shell-local-command-to-string (command-string local-path)
(interactive)
(let ((temp-dir default-directory) result)
(setq default-directory local-path)
(setq result (shell-command-to-string command-string))
(setq default-directory temp-dir)
result))
>>954 let で直接 default-directory を設定しちゃっても問題ないよ。
スコープ抜ければ元の値に元通りだから。
(defun shell-local-command-to-string (command-string local-path)
(interactive)
(let ((default-directory local-path))
(shell-command-to-string command-string)))
emacsからjsonファイルの整形を行おうとしてつまずいたので教えてください。 やりたい事は、バッファに読み込まれたjsonファイルをコマンド一つで整形して、現在のバッファ内のデータと置き換えることです。 とりあえず (defun reformat-buffer () (interactive) (let ( (original-src (buffer-substring-no-properties (point-min) (point-max))) ) (delete-region (point-min) (point-max)) (shell-command (format "echo \'%s\' | python -m json.tool&" original-src) (current-buffer)))) ↑で目的のことはできたのですが、*Message*バッファにコマンドが出力されるのがうざいので消したいのです。 いい方法はないでしょうか? ちなみに shell-command-on-region というのだとマークを設定しないといけないのでやめました。 代わりにcall-process-regionを利用できないかと、 まず、↓でテストししたところ (call-process "python" nil t nil "--help") するとエラーになりバックトレース表示になってしまいました。 ちなみに (shell-command "python --help") は動いて↓も動きます。 (call-process "python2.6" nil t nil "--help") 関係ありそうなのが、バイナリ直接指定ではなく シェル上でリンクが張られているバイナリの場合、 call-processでリンクを指定するとだめらしいということぐらいです。 どうしたらいいですかね・・。
shell-command-on-regionは範囲を引数で指定できるが
>>958 あ、それはわかってます。
ただ、引数で(point-min) (point-max)だけを渡しても、
markがセットされていないと、
"The mark is not set now, so there is no region"
ていわれてすぐ帰ってきちゃいます。
リージョンハイライト設定してる状態でマーク等をセットすると、ハイライトされちゃいますよね?おそらく。
それがいやなのでマーク自体をセットしないで、上記の方法をとっていました。
少なくともemacs-23.4.1ではマークがセットされてなくてもエラーにならない。
call-process系使えればこれでパツイチのはず プログラムがエラーで死ぬ場合とか考慮してないけど (defun reformat-buffer () (interactive) (call-process-region (point-min) (point-max) "python" t t nil "-m" "json.tool")) > シェル上でリンクが張られているバイナリ って意味わからんのだけどシンボリックリンクなら普通に動くはずだし もしbashrcとかでalias張ってるって意味ならcall-processはシェル通さないから動かなくて当たり前 そうだとしたらPROGRAMをシェルへのパスにしてARGSを"-c" "python -m json.tool"にするとか? > というのだとマークを設定しないといけないのでやめました。 > リージョンハイライト設定してる状態でマーク等をセットすると、ハイライトされちゃいますよね? save-excursionっていう便利なフォームがあってね
同じくemacs-23.4.1では↓もエラーにならない。 (call-process "python" nil t nil "--help")
シンボリックリンクの場合ですね。 たとえば la /bin/python で lrwxrwxrwx 1 usr-name None 13 Apr 25 20:04 /bin/python -> python2.6.exe* となっているものはことごとくcall-processではダメでした。 gcc, g++ なども。 ようはリンク先を直指定するとおkみたいな。
>>961 > call-process系使えればこれでパツイチのはず
> プログラムがエラーで死ぬ場合とか考慮してないけど
> (defun reformat-buffer ()
> (interactive)
> (call-process-region (point-min) (point-max) "python" t t nil "-m" "json.tool"))
>
うちもこうやるつもりだったのですが、やっぱりだめですね。
*message*には
reformat-buffer: Searching for program: no such file or directory, python
になってます。
> > シェル上でリンクが張られているバイナリ
> って意味わからんのだけどシンボリックリンクなら普通に動くはずだし
> もしbashrcとかでalias張ってるって意味ならcall-processはシェル通さないから動かなくて当たり前
> そうだとしたらPROGRAMをシェルへのパスにしてARGSを"-c" "python -m json.tool"にするとか?
そもそも shell-command内部ではcall-processしてるはずだから動かないはずないと思うのですが、どうしてだろう・・
シンボリックリンクを有効化するような何かが行われている?
> > リージョンハイライト設定してる状態でマーク等をセットすると、ハイライトされちゃいますよね?
> save-excursionっていう便利なフォームがあってね
あー、それしらないです、見てみます。
cygwin? 使ったことないけど、インチキシンボリックリンクなのか?
ああ、cygwinか……
exec-pathに/binが入ってないとかかとも思ったけど同じ/binにあるpython2.6を直接指定だと動くってんならたぶん違うしな
もしcygwin特有の事情が原因なら俺にはお手上げだわ
>>964 > そもそも shell-command内部ではcall-processしてるはずだから動かないはずないと思うのですが、どうしてだろう・・
(shell-command "python --help") としたときに内部でcall-processを使って実行されるのは
sh -c 'python --help' とかだからpythonの場所は実行されたシェルが環境変数PATHを見て探すことになる
一方call-processで python --help を直に叩く場合は実行する前にまずemacsが変数exec-pathを見てpythonを探すのだが今回はそこで何かシクってるらしいというわけ
だからshell-commandだと動くというのなら
(call-process-region (point-min) (point-max) shell-file-name t t nil shell-command-switch "python -m json.tool"))
json.tool'
でとりあえず動くはずではある
cygwinだと外部コマンドは鬼門 ptyとか
fakecygpty かませないとちゃんと動かないのも多いよね。
俺はcygwinも使ってるけど、EmacsはWin版使ってる。
NTEmacs と cygwin だと fakecygpty ないと話にならないよね シェル絡みは。
>>967 記載のとおりで解決しました。
ありがとうございました。
973 :
デフォルトの名無しさん :2012/08/04(土) 01:29:34.87
kill-buffer でもし編集されていても、何も聞かずに バッファをkillするってのは、どうすれば出来ます? (while (buffer-modified-p) (undo (current-buffer))) とかやってからkillとしてみたのですが、 undo出来ないと怒られることが多くて 他の方法を探しています。
つ (set-buffer-modified-p nil)
>>974 ちょっと工夫が必要ですねー。やってみます。
なるほどー。でもカレントバッファ対象じゃないんで
976 :
975 :2012/08/04(土) 01:43:22.07
なぜか1行目と2行目が入れ替わってました。 変な日本語ですみません
つ with-current-buffer
978 :
デフォルトの名無しさん :2012/09/02(日) 16:06:33.23
#("aaaa" 0 4 (symbol "d")) の内容のstringからaaaaだけを抽出するにはどの関数を使えば出来ますか?
substring-no-properties でok -no-properties で apropos するといろいろバリエーションが見つかるかと