5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Emacs Lisp 3

1 :デフォルトの名無しさん:2007/10/09(火) 05:39:53
Emacs Lisp の専用スレ。
少数派による互助を中心に、初心者の相談も気が向けば受け付けます。
単なる Emacs ユーザーは別板の Emacs 関連スレにどうぞ。

過去スレ
Emacs Lisp
http://pc2.2ch.net/test/read.cgi/tech/1004551074/
Emacs Lisp 2
http://pc11.2ch.net/test/read.cgi/tech/1068467385/

関連スレ
Emacs part 22
http://pc11.2ch.net/test/read.cgi/unix/1180828013/
【叩かれて】Emacs Lisp道場【強くなれ】
http://pc11.2ch.net/test/read.cgi/unix/1063880951/
Lisp Scheme Part18
http://pc11.2ch.net/test/read.cgi/tech/1186922295/

2 :デフォルトの名無しさん:2007/10/09(火) 15:42:41
(message ">>1 乙")

3 :デフォルトの名無しさん:2007/10/10(水) 01:16:09
(setq >>1 "乙")

4 :デフォルトの名無しさん:2007/10/13(土) 00:14:53
System.out.println(">>1 乙");


5 :デフォルトの名無しさん:2007/10/13(土) 00:17:01
スパイがいるぞ

6 :デフォルトの名無しさん:2007/10/13(土) 22:02:03
ここまでバレバレだとスパイというより罠だな

そんなことよりコンスセルの話をしようぜ

7 :デフォルトの名無しさん:2007/10/13(土) 22:37:42
いやでゴンス

8 :デフォルトの名無しさん:2007/10/14(日) 18:51:50
ところで、lexbindはもうtrunkにマージされた?

9 :デフォルトの名無しさん:2007/10/14(日) 19:43:25
elisp で perl みたいなテキスト処理をしたいんだけど、
ファイルから一行読み込む、ってどうやるの?
ファイルは馬鹿でかいから、バッファに全部は読み込めない。

10 :デフォルトの名無しさん:2007/10/14(日) 20:13:06
insert-file-contents かな

11 :デフォルトの名無しさん:2007/10/29(月) 23:54:17
リージョン内の文字列を対象に、ファイルサイズを知りたいです。

リージョンを指定して M-| wc -c だと、改行コードなどがバッファのものと違う、
string-width だと TAB が 8 にカウントされる、改行がカウントされない、
length だとマルチバイト文字も 1 文字とカウントする、
など、どれもちょっと期待と違います。

ちなみに、最終的には mode-line に表示させたいので、
外部プロセスなどは使わずにすませたいところです。

何かいい方法ないでしょうか?


12 :デフォルトの名無しさん:2007/10/30(火) 02:23:12
buffer-file-coding-system に encode-coding-string して length 取る、とか…

13 :デフォルトの名無しさん:2007/10/30(火) 11:33:17
毎回やるのか、それ。遅そう……。

14 :デフォルトの名無しさん:2007/10/31(水) 00:20:40
>>11です。
>>12 を参考にコードを書いてみましたが、
1MBくらいのファイルになるとスクロールに影響がありました。
私の組み方も悪かったのかも知れませんね。
バッファ全体を substring して temp-buffer に insert して encode して length… だったので。

きっと、もちょっと効率良くできるのでしょう。

で、mode-line の表示をどうしたものかと xdisp.c を眺めていたのですが、
mode-line-format に %i や %I が使えることが分かったので、
もうこれでいいコトにします。

ありがとうございました。


15 :デフォルトの名無しさん:2007/10/31(水) 23:46:14
> 1MBくらいのファイルになるとスクロールに影響がありました。

変更がなければ再計算する必要ないと思うが。

16 :デフォルトの名無しさん:2007/11/02(金) 01:15:53
バッファに変更がないことを知るのは難しいよね?

undo-list はアテにならないから使えないと思うんだけど、
バッファに変更があったことをどうやって知ればいい?


17 :デフォルトの名無しさん:2007/11/02(金) 03:27:25
buffer-modified-tickとか。

buffer-undo-listじゃどうアテにならないのかおせーて。

18 :デフォルトの名無しさん:2007/11/02(金) 23:30:07
buffer-undo-list って、メジャーモードによっては消えたりするじゃない、
…と思ったけど、変化したら再計算するんだから、十分アテになるね。


19 :デフォルトの名無しさん:2007/11/04(日) 10:58:58
after-change-functions

20 :デフォルトの名無しさん:2007/11/06(火) 23:59:32
>>19
おお、これなら…、と思ってやってみましたが、
少し速くタイプすると描画がついてきませんでした。これは CPU の性能のせいかな?
もちろん、スクロールには影響なかったですよ。ありがとうございます。

after-change-functions 自体は便利そうなので、別の何かに使います。


21 :デフォルトの名無しさん:2007/11/25(日) 23:44:53
昨日から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の設定の方を優先順序を上にするにはどうすればいいですか?

22 :デフォルトの名無しさん:2007/11/25(日) 23:54:29
>>21
ライブラリの場所は M-x locate-library でわかるよ

23 :デフォルトの名無しさん:2007/11/26(月) 00:02:34
ありがとうございます。

無理やりですが
locate yatexで調べました。

/usr/share/emacs/site-lisp

とかにそれらしきパッケージが入っていますね。

しかしどうやって読み込んでるのかとか
どうやってyatexを使用した場合でも.emacsに書いたeuc-jpを使いなさい
という命令を優先させる事が出来るのかが分かりません・・・

24 :デフォルトの名無しさん:2007/11/26(月) 03:19:52
yatexが入っているならそのinfoも入っているはずなので、
C-h iでyatexを探して読んでみるといい。
文字エンコーディングの設定方法はそこに書いてある。

25 :デフォルトの名無しさん:2007/11/26(月) 13:07:15
このスレはEmacs設定スレじゃないと思うんだが……

26 :デフォルトの名無しさん:2007/12/09(日) 06:15:49
Emacs Lispの成分解析結果 :

Emacs Lispの55%は陰謀で出来ています。
Emacs Lispの39%は祝福で出来ています。
Emacs Lispの6%は成功の鍵で出来ています。

27 :デフォルトの名無しさん:2007/12/11(火) 23:00:49
リストの 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))
みたいになってしまうのです。


28 :デフォルトの名無しさん:2007/12/12(水) 01:45:09
;; 破壊的挿入
(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。あとは詳しい人が降臨するのを待とう。
おれもここは苦手なんだ。


29 :デフォルトの名無しさん:2007/12/12(水) 09:05:50
>>27
仕様バグ。使い方は
(setq test (func test 3 x t))
でないとダメ。
なぜなら0番目に挿入がありえるから。

30 :デフォルトの名無しさん:2007/12/13(木) 04:04:57
>>29
???

そういうこともあるから値返してんじゃないの?
どのへんがバグなのか分からないオレははんぶん素人です。


31 :デフォルトの名無しさん:2007/12/13(木) 13:25:22
変更箇所を色分けする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)

32 :デフォルトの名無しさん:2007/12/13(木) 14:07:35
じっと目を凝らしても君には見えないんだろうな。

33 :デフォルトの名無しさん:2007/12/13(木) 19:21:51
>>31
Emacsが日本語でやさしく教えてくれるようになるまで別のもの使っときw

34 :デフォルトの名無しさん:2007/12/13(木) 19:35:30
>>31
setqのgの後ろに幽霊が居るぞ


35 :デフォルトの名無しさん:2007/12/13(木) 20:41:01
develockで赤くしました。

36 :デフォルトの名無しさん:2008/01/27(日) 15:44:35
develockって一度有効にしちゃったらoffにできないよね……

37 :デフォルトの名無しさん:2008/01/28(月) 19:23:27
バージョンが古いんじゃないの?

38 :デフォルトの名無しさん:2008/01/28(月) 19:30:05
と思ったら、なんか変だね…

39 :デフォルトの名無しさん:2008/02/10(日) 17:03:58
関数内で、自身の関数名を取得する方法はありますか?

40 :デフォルトの名無しさん:2008/02/10(日) 18:17:53
backtrace-frame()

41 :デフォルトの名無しさん:2008/02/10(日) 20:18:00
>>40
(defun hoge()
(interactive)
(setq self (second (backtrace-frame 3)))
(message "%s" self)
)

お、できた。
サンクス

42 :デフォルトの名無しさん:2008/02/13(水) 17:30:07
let使えよ
selfが汚染されるだろ

43 :デフォルトの名無しさん:2008/02/17(日) 23:27:54
変数 arg が string で空ではない事を判定するのは
こんな感じだと思うんですが

(and (stringp arg) (not (string= arg "")))

これに相当する標準のコマンドってありますか?

44 :デフォルトの名無しさん:2008/02/17(日) 23:34:22
(equal arg "")じゃダメなん?

45 :デフォルトの名無しさん:2008/02/17(日) 23:37:09
ああnonempty stringで真にしたいのか。ない、そんなの。

46 :デフォルトの名無しさん:2008/02/21(木) 02:30:34
lisp のファイル内に時々 ^L (Control-L) だけの行があるけど
あれ何のためにあるの?

47 :デフォルトの名無しさん:2008/02/21(木) 04:11:13
改ページ

48 :デフォルトの名無しさん:2008/02/21(木) 10:15:45
Lispに限らず見かけるけど。

a2ps-j とかはそれを認識して改ページしてくれるので、
見やすくするために入れる。

49 :デフォルトの名無しさん:2008/02/21(木) 13:19:31
EmacsのCソースコードにも入ってるよ。
一つのソースファイルをいくつかのセクションに分けたいときに使ってるね。
Emacsではbackword-page (C-x [), forward-page (C-x ])でページ単位で移動できる。

50 :デフォルトの名無しさん:2008/02/22(金) 00:51:29
>>47-49
なるほど。勉強になりました。


51 :デフォルトの名無しさん:2008/03/28(金) 02:29:22
文字列を N 回結合する関数ってありますか?

(defun foo (str num)
(let (i result)
(dotimes (i num result)
(setq result (concat result str)))))

こんなのを作るしかないんですかね?

52 :デフォルトの名無しさん:2008/03/28(金) 02:48:27
ないんじゃないかな、こんなのやってみたけど
(defun X (s n) (apply 'concat (make-list n s)))

53 :デフォルトの名無しさん:2008/03/28(金) 03:10:46
>>52
おお、素晴らしい。
そっちの方が色々応用できそうですね。


54 :デフォルトの名無しさん:2008/03/28(金) 03:21:42
>> 53
カキコしたあと思い出したんだけど、前スレで同じ質問あったな。いくつかレスがついてる。
http://pc11.2ch.net/test/read.cgi/tech/1068467385/936
> perl の x 演算子みたいな関数って無い?
> make-string の文字列版というか、
> (hogefunc 3 "abc")
> => "abcabcabc"
> みたいなやつ。


55 :デフォルトの名無しさん:2008/03/28(金) 03:31:06
>>53
mapconcat の方がいろいろ対応できるよ

56 :デフォルトの名無しさん:2008/03/28(金) 03:36:39
>>54
確認しました。 ありがとうございます。

941 :デフォルトの名無しさん:2007/09/08(土) 00:20:18
ということは、まとめると
(mapconcat 'identity (make-vector 3 "abc") nil)
が一番速いのかね

>>55
みたいですね。
こういうコードをさらっと書けるように修行します。

57 :デフォルトの名無しさん:2008/03/28(金) 08:20:28
(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


59 :デフォルトの名無しさん:2008/03/28(金) 10:29:12
>>58
さっさと本スレで初心者にやさしく答えてあげてください。

60 :デフォルトの名無しさん:2008/03/28(金) 22:07:36
こっちの方が速かった。
(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)))


61 :デフォルトの名無しさん:2008/03/28(金) 22:50:02
>>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をどう使っていいのか分かりません

64 :デフォルトの名無しさん:2008/04/19(土) 06:58:41
>>63
replace-regexp-in-string

65 :デフォルトの名無しさん:2008/04/19(土) 06:58:49
>>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"

66 :デフォルトの名無しさん:2008/04/19(土) 07:09:01
>>65
あー s/abc/def/gでいいんです。すいません
とりあえずreplace-regexp-in-stringとstring-matchの使い方を覚えます
どうもありがとうございました

67 :デフォルトの名無しさん:2008/04/27(日) 07:34:32
ヘルプで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
>>70
貢献できて嬉しいよ。


72 :デフォルトの名無しさん:2008/04/30(水) 03:42:36
関数のカリー化はできないのでしょうか?

73 :デフォルトの名無しさん:2008/04/30(水) 03:52:54
プ

74 :デフォルトの名無しさん:2008/04/30(水) 20:39:14
emacs lisp からcommon lispのcl-whoなどのパッケージを使う方法ないでしょうか?

75 :デフォルトの名無しさん:2008/05/05(月) 15:16:22

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)



76 :デフォルトの名無しさん:2008/05/05(月) 19:21:47
(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 じゃないって怒られた。だめみたいです。

78 :デフォルトの名無しさん:2008/05/08(木) 13:15:07
それくらい自分で型変換しようぜ…

79 :デフォルトの名無しさん:2008/05/08(木) 14:11:31
>(concat second " / 65535")
65535 じゃなくて 65536 じゃないか?


80 :デフォルトの名無しさん:2008/05/08(木) 16:53:42
emacs21 --batch --eval "(hoge ...) "
の出力が日本語を含むリストのはずなのですが
\222 が連続して並んでます
nkfでも変換できないみたいです
どうすれば普通の日本語にできるのでしょうか?


81 :デフォルトの名無しさん:2008/05/08(木) 17:05:32
>>80
--batch の出力は必ず iso-2022 になるはず。

82 :デフォルトの名無しさん:2008/05/11(日) 18:02:06
emacsで.emacs.elファイルが開かれている場合、閉じるときにeval(してエラーがあれば警告し)たいのですが、良い方法をお分かりの方、教えてくださると幸いです。

ちなみに、
http://www.jaist.ac.jp/~n-yoshi/tips/junk_elisp.html#bytecompile
の、保存時に自動バイトコンパイルするよう設定を参考に、(byte-compile-file "~/.emacs.el")を(eval-current-buffer)に書き換えたりしてみたのですが、それだと、Emacsが重くなってダメでした。
高林哲氏のauto-save-buffersを使っているせいもあるんでしょうが。

83 :デフォルトの名無しさん:2008/05/11(日) 22:45:10
>>82
その真上にある終了時に byte-compile ってやつはダメなの?

84 :デフォルトの名無しさん:2008/05/12(月) 02:51:56
>>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するようなことって、できますでしょうか?

たびたびすいませんです。これで最後の質問にいたします。

86 :デフォルトの名無しさん:2008/05/12(月) 08:28:30
>>85
eval-bufferして本来の動作をするようなelispを定義して
C-xC-s のコマンドに上書きすればいいだけじゃないか。

87 :デフォルトの名無しさん:2008/05/12(月) 08:28:31
そういうコマンド書いて C-x C-s に割り当てればいいんじゃないかな。

88 :デフォルトの名無しさん:2008/05/12(月) 08:58:59
>>85
interactive-p で auto-save かどうかを判定できるかも。


89 :デフォルトの名無しさん:2008/05/12(月) 09:30:03
選択範囲内のすべての行の先頭にタブを入れたいのですが,
どうすればいいですか?

わかる方がいましたら教えてください。

90 :デフォルトの名無しさん:2008/05/12(月) 09:43:01
>>89
マークして C-x r t C-q TAB RET
基本的な操作は本スレで質問しような。

91 :デフォルトの名無しさん:2008/05/12(月) 15:52:28
>>81
なぜかうちの環境ではならない
ubuntu7.10


92 :デフォルトの名無しさん:2008/05/13(火) 12:03:29
>>90
そんな長いコマンドがちょっといやで,
C-c C-tあたりでできるようにしたいです




93 :デフォルトの名無しさん:2008/05/13(火) 13:28:35
>>92
じゃあチラシの裏に書く前にさっさとそうしてください。

94 :デフォルトの名無しさん:2008/06/20(金) 07:24:04
opensuse11 初心者だけど、manページが文字化けする。。。。

95 :デフォルトの名無しさん:2008/07/04(金) 09:18:57
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))))

ちなみに、コピー後のカーソル位置は任意です。(カラムが移動するのはイヤン)


97 :デフォルトの名無しさん:2008/09/28(日) 08:05:33
;; エレガントかどうか知らんけど、最終行でも動作が変わらないようにしてみました
(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)))))

98 :デフォルトの名無しさん:2008/09/28(日) 10:44:45
(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")))

どっちでもいいけどな。


102 :デフォルトの名無しさん:2008/11/22(土) 13:26:48
質問です。

grep-find で、あちこちの .svnディレクトリ以下を無視したいのですが、
参考:.svnを除外してfindする
http://snak.tdiary.net/20081008.html#p02

今は毎回、-name .svn -prune -o を手で付け加えていて面倒なのです。

そこで、デフォルトでこのオプションが追加されるようにしたいのですが、で
きたらgrep.elはそのままで、.emacs.el で設定したいのです。どうしたら良い
でしょうか?


103 :デフォルトの名無しさん:2008/11/22(土) 13:35:06
なんか自己解決しました。grep-findじゃなくてrgrepだと.svnディレクトリを
デフォルトで無視してくれてるみたいです。
もっと調べてから質問するべきでした。すみません。


104 :デフォルトの名無しさん:2008/11/22(土) 14:24:45
すみません、>>102-103です。
Emacs本スレに書いたつもりの誤投稿でした。本当にごめんなさい。

105 :デフォルトの名無しさん:2008/12/03(水) 11:27:34
Emacs Lispでwgetみたいなことはできますか?

106 :デフォルトの名無しさん:2008/12/03(水) 15:34:26
質問です。
x と lst が与えられたとき、x を lst から取りだす CAR と CDR の適用列を返す
関数 co を定義しなさい。 coは、そのような適用列が存在しない場合は NIL を
返すものとする。

107 :デフォルトの名無しさん:2008/12/03(水) 15:43:05
>>106
> x と lst が与えられたとき、x を lst から取りだす CAR と CDR の適用列を返す
> 関数 co を定義しなさい。
この文章は 命令 とか 指示 とかいった文章で
> coは、そのような適用列が存在しない場合は NIL を返すものとする。
この文章は 補足 とか 追加説明 とかいった文章だな。

で質問は何?

108 :デフォルトの名無しさん:2008/12/03(水) 17:02:51
;; >>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)))

109 :デフォルトの名無しさん:2008/12/03(水) 17:04:03
(mapc 'require '(cl el-expectations))



110 :デフォルトの名無しさん:2008/12/03(水) 18:41:44
>>106
どこの学校の宿題 ?

111 :デフォルトの名無しさん:2008/12/03(水) 21:04:29
戸塚ヨットスクール

112 :デフォルトの名無しさん:2008/12/03(水) 21:40:53
;; とりあえず質問者からの動作報告求む
(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を定義しなさいという問題でした。

みなさんのおかげできました。
ありがとうございました。



114 :デフォルトの名無しさん:2008/12/05(金) 16:07:00
質問をさせてください。
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式が逆でした

116 :デフォルトの名無しさん:2008/12/17(水) 23:20:41
すみません、
>>106>>108>>112
より簡単に書けませんか?
よく分かりません

117 :デフォルトの名無しさん:2008/12/17(水) 23:50:38
宿題をここで教えてもらうような人間が提出するには
コードが綺麗すぎて困っているのですね、わかります。

118 :デフォルトの名無しさん:2008/12/18(木) 15:56:12
(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.


120 :デフォルトの名無しさん:2008/12/24(水) 22:25:20
eval-when-compile

121 :デフォルトの名無しさん:2008/12/25(木) 00:44:53
eval-when-compile は eval-buffer でも eval される.

質問の仕方を変えると, byte compiling 中のみ Non-NIL に
なる変数はどうすれば定義できるか?

(defvar hoge-byte-compiling-p ...)



122 :デフォルトの名無しさん:2008/12/25(木) 09:15:49
>>119>>121じゃ問題が全然違うだろ。

123 :デフォルトの名無しさん:2008/12/25(木) 12:25:52
質問がへたでごめんなさい.
eval-when-compile は eval-buffer のときも byte-compile のときも eval されるが,
今どちらなのかを区別したいです.


124 :デフォルトの名無しさん:2008/12/25(木) 16:32:59
>>121
backtrace/backtrace-frame を使って byte-compile-form あたりの有無で判定
できると思う.


125 :デフォルトの名無しさん:2009/02/07(土) 11:11:43
大学2年です
春休みを使って、emacs lispを勉強して、より快適な環境を作り、雑多な手間を省きたいんですが
どのくらいのレベルに行けば、emacs lispを扱えるレベルと言えるんでしょうか?
現在、自分はレベル1でしょうか

実は、Pythonのほうが興味があって、Pythonのほうがメインの勉強だったりします
Pythonでも下記のリンクのようなことは、できそうですよね?
Lisp(emacs lispとの違いがまだよくわかっていませんが)のほうがスマートなんでしようか

古いネタですが、叩き台のネタに

Scheme:Schemeプログラマのレベル10
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3aScheme%a5%d7%a5%ed%a5%b0%a5%e9%a5%de%a4%ce%a5%ec%a5%d9%a5%eb10


126 :デフォルトの名無しさん:2009/02/07(土) 23:23:43
新しいmajor-modeを書いたり、標準のelispとか誰かが作ったelispのバグを取ったり拡張を書いたり
できるようになれば十分扱えてるといっていい状態だろうね
それ以外の項目については何が言いたいのかよくわからない

127 :デフォルトの名無しさん:2009/02/08(日) 00:28:15
Lispの方がスマートに解ける問題もあればPythonの方が良い場合もあるでそ。
なんとなく思いだしたのでこれ貼っとく。
ttp://www.aoky.net/articles/steve_yegge/tour_de_babel.htm

128 :デフォルトの名無しさん:2009/02/08(日) 06:58:22
>>127
リンク、サンクスです
この人の寸評だと、このころはRubyのほうが優れた言語とされていたんだね

elispで何ができるかというのは、漠然とだけど、掴めるんだけど
Schemeでなにができるかがよく掴めない(どういう用途に優れているとか)
単なる教養としての言語なのかな
言語仕様として一貫性があるとか、そんな感じなのかな

Scheme関連のチュートリアルを読んでみます

129 :デフォルトの名無しさん:2009/02/08(日) 11:50:11
一応言っておくけど、Lispを学びたいからEmacs Lispをやるっていうのなら、
括弧になれるとか入口程度に思っておいた方がいいよ。
Emacs Lispは、見た目、Lispなだけだから。
末尾再帰を最適化できないから、再帰で書くことが事実上できなかったり、色々とLispらしくないから。

130 :デフォルトの名無しさん:2009/02/08(日) 12:40:51
Emacs Lispはテキストエディタのマクロとは思えないほど多機能だけど
>>129に書かれてるような問題があるよということを>>127の人の最近のポストで書いてるね。
ttp://steve-yegge.blogspot.com/2008/11/ejacs-javascript-interpreter-for-emacs.html
Emacs LispでJavascriptを実装しちゃうってのも凄い話だけど。
あとLispの方言の説明がおもろい。

>Lisp is a whole family of languages, and can be broken down approximately as follows:
> * Scheme is an exotic sports car. Fast. Manual transmission. No radio.
> * Emacs Lisp is a 1984 Subaru GL 4WD: "the car that's always in front of you."
> * Common Lisp is Howl's Moving Castle.

131 :デフォルトの名無しさん:2009/02/08(日) 13:02:07
>>130
コメント欄みてみるとハウルネタがやたらウケてるな。このアニオタどもめ!

132 :デフォルトの名無しさん:2009/02/08(日) 13:11:50
言語仕様に問題のあるEmacs Lispだけどlispの総合環境としてはソースレベルデバッガあり、トレーサあり、
プロファイラあり勿論ディスアセンブラもありと割と至れり尽せりだったりする

133 :デフォルトの名無しさん:2009/02/08(日) 13:43:30
>>130
ハウル、みていないんだがw
Emacs Lisp の"the car that's always in front of you."をYahooに訳させたら、
いつもあなたの正面にある車。と訳したんだけど、どういう意味だ
1984 Subaru GLは
ttp://farm1.static.flickr.com/65/208717197_bde1198885.jpg
らしいけど、古い4WDって話か
>>132
そういう通常利用の一個上を行く使い方ってどういうのがあるんですかね
潜在能力が高いなら、もっと踏み込んで勉強したいところなんですが
ちょっとEmacs Lispをかじっただけですが、けっこうのことをEmacs1つでできそうだなと想像するんですが


Lisp関連であと2日ぐらいググって、今後のカリキュラムを組もうかな
言語仕様50ページだったSchmeは、ちょっとやりたくなるね
Schmeをやってから、Emacs Lispをやったほうが言語仕様も理解しやすいかな

関数名が長いのってEmacs Lispだけじゃなくて、Schmeもそうなんだね
略記もあるみたいだけど
個人的に長いほうが好きかも
保守しやすそうだし

チラシの裏
年齢(生まれ)比較
Lispは1958年生まれの51歳
Schmeは1970年代生まれの30代
Comon Lispは1984生まれの25歳
Emacs本体(Emacs Lisp)は約1976年生まれ, 32〜33歳
Pythonは1991生まれの18歳
C言語は1972年生まれの37歳

134 :デフォルトの名無しさん:2009/02/08(日) 16:19:28
>>133
"the car that's always in front of you."
は、俺だったら
「いつもそこにある車」 って訳すかな
(=古くてダサくて定番中の定番で面白くないけど、結局乗るのはこの車なんだよね、
的な意味で)

あと、「Scheme」 だぞ。typoかと思ったけど全部Schmeって書いてるってことは
本気で勘違いしてる?

135 :デフォルトの名無しさん:2009/02/08(日) 16:27:08
schemeやelispはhogeライブラリのfoo関数ってのをhoge-fooみたいに定義せにゃならんからね
この規則を使って階層になったライブラリの関数、hogeライブラリの中にあるfooライブラリの関数fの名前を付けると
hoge-foo-fのようになってしまう
長くなるのは仕方ないけど、この規則ででかいアプリケーションは書きたくないよね

136 :デフォルトの名無しさん:2009/02/08(日) 16:31:26
the car that's always in front of you というネタの原型はフォードT型。
あまりに売れすぎて、「どんなレーシングカーもフォードTの前に出ることはできない。どれだけ抜いてもまだ前にもう1台いる」というジョークが生まれたので。
スーパーカーとの対比で、性能はプアだけどみんなが使ってる普及版っていうニュアンスだろうな。

elispはよくも悪くもEmacsと切り離せないものなので、本当に言語の勉強をしたいならcommon lispかschemeのほうがいいよ。
逆にEmacsいじって遊びたいならelisp使うしかないし。

137 :デフォルトの名無しさん:2009/02/08(日) 16:39:45
>>136
134だが勉強になった。トン

138 :デフォルトの名無しさん:2009/02/08(日) 18:12:24
>>136
> elispはよくも悪くもEmacsと切り離せないものなので、本当に言語の勉強をしたいならcommon lispかschemeのほうがいいよ。
言語の勉強したいまでは、まだ至っていません
Emacsを使いこなせるようになりたいだけで

Schemeは、知っていて損はなさそうですね
チュートリアルの語彙も特徴的で好奇心をそそられる
英語・日本語の資料も豊富そうで資料には、困らないだろうし
プログラマとしての幅が広がるなら、なおうれしいかな

139 :デフォルトの名無しさん:2009/02/14(土) 00:26:28
俺はバッファ、リージョン、選択範囲なんか用の
map関数を書いてよく使ってるんだがこれ便利よ
色々関数を別途定義しといて
関数を行に対して呼び出す

2chに書き込むときによくやるのは
タブ→スペース変換と
半角スペース→nbsp変換
こうするとプログラムはインデントされて見やすい

ところで、久しぶりにここきたんだが
xyzzyスレってどこいったの?
見つからないんだけど

140 :デフォルトの名無しさん:2009/02/14(土) 00:34:37
ソフトウェア板とWindows板に1つずつあるよ。

141 :デフォルトの名無しさん:2009/02/14(土) 00:45:02
あったあった、さんきゅー

142 :デフォルトの名無しさん:2009/02/19(木) 18:25:06
行の(半角相当で)80文字目の位置をを色づけしたいとおもったんですが,
とりあえず思いついた
'(("^......................................................\
.........................\\(.\\)" 1 highlight-long-line-face append))
というのをfont-lock-add-keywordsして加えたところ、
当然ながら全角文字をいれると後ろにずれました

半角で80文字目の位置をを色づけする方法について、
なにかお知恵を拝借できませんでしょうか?

143 :デフォルトの名無しさん:2009/02/19(木) 19:21:13
http://www.emacswiki.org/emacs/ColumnMarker

144 :デフォルトの名無しさん:2009/02/19(木) 22:19:43
質問者じゃないけど
めちゃめちゃ重いなそれw

145 :デフォルトの名無しさん:2009/02/20(金) 15:29:29
>>143
ありがとうございます
そんなものが作られてたんですね、試してみます

146 :デフォルトの名無しさん:2009/02/23(月) 22:05:35
>>144
うまい工夫をしないと速くならないだろうからなぁ。常に80文字目を数えるって
いうことだしね。

147 :デフォルトの名無しさん:2009/02/23(月) 23:00:47
cygwin環境下でgaucheをリッチに使いたくて
行ごとに色を変えたいんですが教えてください

まさに自分がやりたいことがこれ
ttp://pitecan.com/codeblog/2006/01/emacs.html

上のプログラムをざっと読んだ感じ、
色の変更に関するプリミティブな部分ってのは
「put-text-propertyに背景色を設定したfaceを設定する」
というように感じたのですがあってますか?

それらしきコードを書いてみたのですがうまくいかず・・

(setq symbol (make-symbol "test"))
(setq face (make-face symbol))
(set-face-background face "DarkSeaGreen1")
(point)
134 ←評価結果
(point)
146 ←評価結果
(put-text-property 134 146 'face face)

148 :デフォルトの名無しさん:2009/02/23(月) 23:02:07
あ、補則。このコードは行は意識してなくて、とりあえず指定箇所の背景色を変えたいだけです

149 :デフォルトの名無しさん:2009/02/24(火) 00:19:05
とりあえずfont-lock-faceにしたら動いたけど
(put-text-property 1 20 'font-lock-face 'highlight)

150 :デフォルトの名無しさん:2009/02/24(火) 00:39:13
ありがとうございます。
それを実行したときはtが返るんですよね?
M-x list-faces-displayで書いてあるフェイスをいくつかうちこんでは見ましたが
自分の環境ではnilが返ってきて色が変わらないです

↓動作はよくわかってませんが、これを切り替えた場合はちゃんと色が変わります
(global-font-lock-mode t)
(global-font-lock-mode nil)

今日は寝て、また明日調べてみますわ

151 :デフォルトの名無しさん:2009/02/25(水) 12:19:45
ver22で拡張された \,(function \1) みたいなのが
replace-match では使えない(不正な\エラーになる)のは何で?

こんな感じ↓
(re-search-forward "\\(.+\\)" nil t)
(replace-match "\\,(my-func \\1)" nil nil)
=> Invalid use of `\' in replacement text


152 :デフォルトの名無しさん:2009/02/25(水) 15:06:59
est

153 :デフォルトの名無しさん:2009/02/25(水) 17:08:20
>>151
君の頭が腐っているというのを疑った方がいいよ

154 :デフォルトの名無しさん:2009/02/27(金) 00:26:35
>>151
プログラマブル正規表現だっけ?
よくわからん

155 :デフォルトの名無しさん:2009/02/27(金) 01:11:40
プログラマブルなのが使えるのは、インタラクティブに実行した場合だけでしょ。

NEWS
*** When used interactively, the commands `query-replace-regexp' and
`replace-regexp' allow \,expr to be used in a replacement string,

ちなみに replace-regexp を実行したら次のように展開された(repeat-complex-command)。

(replace-regexp "\\(.+\\)"
(quote
(replace-eval-replacement replace-quote
(my-func (match-string 1))))
nil
(if (and transient-mark-mode mark-active)
(region-beginning))
(if (and transient-mark-mode mark-active)
(region-end)))

で、replace-regexp をプログラムの中で使うのはbadなので、

(while (re-search-forward "\\(.+\\)" nil t)
(replace-match (my-func "\\1") nil nil))


156 :151:2009/02/28(土) 01:47:45
>> 154
そんな名前があるとは知らなんだ。
google先生は記号の検索には弱いしね・・・

>> 155
サンクス。インタラクティブ専用だったんだ。
よく使う置換の組を「お気に入り」みたいに登録して一発で呼び出せるlispを作ってたんだけど、
仕組み上、正規表現は自由に指定可能だから関数決めうち実行ができなくて。
プログラマブル正規表現は非対応とあきらめるしかないか。

157 :デフォルトの名無しさん:2009/02/28(土) 03:23:53
>> と数字の間は開けないで

158 :デフォルトの名無しさん:2009/02/28(土) 22:18:39
起動時にインタラクティブな関数を自動的に呼び出すにはどうしたらいい?
2画面で起動して、片方にSchemeインタプリタを起動したい
2画面の分割は、.emacsに(split-window-vertically)を追記したらうまくいったが
M-x run-schemeが呼び出せないんだ

159 :デフォルトの名無しさん:2009/02/28(土) 22:50:34
(run-scheme) ではだめなのけ?

160 :デフォルトの名無しさん:2009/02/28(土) 23:14:03
だめぽ。そうするとこんなわけわからんエラーが出る
Wrong number of arguments: #[(cmd) "\304\305!\204^Y^@\306^H!^Y\307\310\311 @\312 A%q\210\313 \210)^H^R\305^S\314\305\
!\207" [cmd cmdlist scheme-program-name scheme-buffer comint-check-proc "*scheme*" scheme-args-to-list apply make-comint "s\
cheme" nil inferior-scheme-mode pop-to-buffer] 6 ("/usr/share/emacs/21.2/lisp/cmuscheme.elc" . 6428) (list (if current-pref\
ix-arg (read-string "Run Scheme: " scheme-program-name) scheme-program-name))], 0

161 :デフォルトの名無しさん:2009/02/28(土) 23:18:46
describe-function(C-h f)ぐらい覚えような

162 :デフォルトの名無しさん:2009/02/28(土) 23:29:14
>>160
(run-scheme scheme-program-name)


163 :デフォルトの名無しさん:2009/03/01(日) 09:48:57
(call-interactively 'run-scheme)


164 :デフォルトの名無しさん:2009/03/01(日) 14:28:41
>>161-163
d牛d牛トーン・・カツ!
すばらしく快適な環境になった

165 :デフォルトの名無しさん:2009/03/01(日) 17:07:00
>>164
(call-interactively 'run-scheme)
これしらんかった、すげぇ勉強になった、ありがとう
いままでintaractive関数の機動失敗時はいつも.elの中調べてた。


166 :デフォルトの名無しさん:2009/03/26(木) 03:01:42
elispで呼び出し元の関数名を調べるにはどうしたらよいのでしょう?

167 :デフォルトの名無しさん:2009/03/26(木) 15:59:27
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))

だとトウフが出てしまいます。


168 :デフォルトの名無しさん:2009/03/26(木) 16:33:41
>>167
set-buffer-multibyte -> nil
DATA-P -> t
でどうです。

169 :デフォルトの名無しさん:2009/03/26(木) 16:43:04
>>168
素早い指摘陳謝です。
無事表示されるようになりました。
ヘルプはちゃんと読まないとだめですね。

unibyteとかmultibyteはまだよく理解してないので勉強します。
ありがとうございました。

170 :デフォルトの名無しさん:2009/03/28(土) 13:49:09
自分でメジャーモードとか作ろうと思った時に
Infoとか書籍以外にこれは参考にすべきといったパッケージってなにがありますか?
色々眺めてるんですがみんな結構やり方が違っててよくわからなくなってきました。

171 :デフォルトの名無しさん:2009/03/28(土) 15:03:54
>>170
Infoによるとtext-modeが最もシンプルだと言うから、text-modeがいいと思うよ。
Emacs22からdefine-derived-modeが使われててより簡単に作れるようになってる。
たった1行でも実行可能なのを今やってみて初めて知った。
(define-derived-mode hoge-mode nil "Hoge")
あとは、キーマップを定義するだけ。
ま、そういうわけでEmacs21と22のtext-modeが参考になる。


172 :デフォルトの名無しさん:2009/03/28(土) 15:55:22
>>171
回答ありがとうございます。
見てみましたが雛形に丁度良い感じですね。
text-modeを足掛りにして頑張ってみようと思います。

標準配布されてるパッケージのコードは
基本的に正しいやり方(?)で書かれていると思ってよいんですよね?
#もっとスマートな方法があるのに変なやり方で無駄に処理を増やしてるとか
#メモリを無駄に使ってしまう書き方だったりとか....

173 :デフォルトの名無しさん:2009/03/28(土) 17:33:24
>>172
必要なことを必要なだけ書けばいいんですよ。
メジャーモードとして機能するためには最低限何が必要か。
そこに、自分が欲しいものを追加していくだけです。
またそのために、例えばsyntax-tableを独自に定義した方がいいならそうするし。
defcustomなんかはdefvarで済ますこともできるけど、ひとが作ったパッケージを
利用するときはdefcustomの方が分かりやすいと思うので、そう考えるならそうするしとか。
コードを書く上では、自分でこれでいいと思うコードを書けばいいんです。
あとは、慣習に従うと。


174 :デフォルトの名無しさん:2009/03/30(月) 18:51:55
コロン付きのキーワードシンボルってあんまり使われてない気がするんですが、
なにか歴史的理由とかバージョン間互換性とかの理由があったりするんでしょうか?

alistのcarとかオプショナルな引数が沢山ある関数での&restで引数とる時のラベリングとか
値を取らないことを明示的に示してて便利だと思うんですけど(elispモードで色分けもされるし)、
色々ソース眺めた感じ、使ってるパッケージはガンガン使ってるんですが、
まったく使ってないところはcustomとかtext-property等ぐらいでしか使ってません。

175 :デフォルトの名無しさん:2009/04/15(水) 16:51:29
ttp://www.bookshelf.jp/texi/elisp-manual/21-2-8/jp/elisp_11.html#SEC138

176 :デフォルトの名無しさん:2009/04/15(水) 18:05:50
よもや返事がくるとは思わなかった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です。

180 :デフォルトの名無しさん:2009/04/15(水) 20:29:36
ろくに読まずに発言するけど、
ループのところってnext-property-changeで検索じゃだめなん?


181 :デフォルトの名無しさん:2009/04/15(水) 20:34:18
>>175
elisp-manual-21-2.8.tar.gz を見てみたが、
keyword-symbols-constant-flag はすでになかった。


182 :177:2009/04/15(水) 20:37:10
>>180
ありがとございます、それ知らなかったので調べてみたら、
自分がやってることは非効率極まりないことまでわかりました。
ちょっと書き換えてみます。

183 :デフォルトの名無しさん:2009/04/15(水) 20:37:21
というよりkeyword-symbol自体がそんなに沢山使われてない。

184 :デフォルトの名無しさん:2009/04/15(水) 20:43:06
>>182
自分は使ったことないけど、
comment-search-forward と backward なんていう
もっとよさげな関数があったよ。

185 :デフォルトの名無しさん:2009/04/16(木) 23:21:38
>>176
Emacs19 用 Elisp マニュには keyword で始まる名前自体がなくて : に関する記述もなさげだから
Emacs20 あたりで追加された新機能だと思われ
古い Emacs との互換性が不要なら使ってもいいんでないかな

186 :デフォルトの名無しさん:2009/04/17(金) 16:03:55
自分自身を remove-hook するような hook は邪道でしょうか?

具体的にはバッファの内容を別の形式で別ウィンドウに表示するアプリを作っています。
編集中の内容をリアルタイムに反映させるため post-command-hook で監視を行なおうと思っているのですが、
変換後の表示バッファが消されていた場合、自分自身で remove-hook して後始末をしたいなと・・・


187 :デフォルトの名無しさん:2009/04/17(金) 16:44:34
自分自身でremove-hook するって、子bufferの有無をずっと監視するってこと?

別ウィンドウで表示しているbufferのkill-buffer-hookに
buffer local で post-command-hookのhookをremove するものを
仕掛けておくって思いついたんだけど、どうかな?



188 :デフォルトの名無しさん:2009/04/17(金) 17:12:30
>>187
なるほど!
どう考えてもその方がスマートですよね。一々 buffer-live-p しなくて済みますし。
ありがとうございます。

189 :デフォルトの名無しさん:2009/04/24(金) 01:48:31
/bin/shとかだと``でコマンドの実行結果をテキストで得られるけど
同じことをelispでしたい場合どうすれば良い?
バッククォートはlispでは別な意味なのでアレだが
(print `date`)で"Fri Apr 24 01:47:15 JST 2009"のようなことは出来ないかな

190 :デフォルトの名無しさん:2009/04/24(金) 01:55:51
>>189ドゾー
(print (shell-command-to-string "date"))


191 :デフォルトの名無しさん:2009/04/24(金) 23:42:19
さんきゅー!

192 :デフォルトの名無しさん:2009/05/05(火) 12:11:19
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)
)))

他の点でもアドバイスがあれば、お願いします。





193 :デフォルトの名無しさん:2009/05/05(火) 15:35:33
>>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))
))


196 :デフォルトの名無しさん:2009/05/05(火) 18:52:20
clの作法に則るとこんなんじゃろか。
ttp://paste.lisp.org/display/79688

197 :デフォルトの名無しさん:2009/05/05(火) 19:17:11
hash を使って CL なしでやってみたよ。
http://paste.lisp.org/display/79690

198 :デフォルトの名無しさん:2009/05/05(火) 19:37:33
あ、hashあるんだ。
>>197の方が圧倒的に速いね。

199 :デフォルトの名無しさん:2009/05/05(火) 20:40:33
hash って emacs lisp の info にあんまり使うなって書いてあった気がするから
なんでも assoc で済まそうって癖がついてしまった。

200 :デフォルトの名無しさん:2009/05/05(火) 20:53:17
>>199
kwsk

201 :デフォルトの名無しさん:2009/06/24(水) 03:26:29
>>199
infoには、10項目以内なら連想リストの方が速いけど、それ以上の場合は
ハッシュを使ったほうがいいと書いてあるぞ。


202 :デフォルトの名無しさん:2009/07/02(木) 23:02:53
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))



203 :デフォルトの名無しさん:2009/07/03(金) 00:02:58
そんな感じ
省略時に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))

206 :デフォルトの名無しさん:2009/07/03(金) 02:58:28
(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はいいね。


207 :デフォルトの名無しさん:2009/07/03(金) 12:19:01
clにformat*ってのがあるといいんだけどなぁ

208 :デフォルトの名無しさん:2009/07/27(月) 01:26:01
作れよ

209 :デフォルトの名無しさん:2009/08/11(火) 17:39:12

emacs-lisp 上での common lisp の関数/マクロ名と
ピュアな common lisp の関数/マクロ名との
マッピングの在処を知っている方いませんか?

例えば、

defun* → defun
(cl*/el → cl)

とかです。


210 :デフォルトの名無しさん:2009/08/11(火) 17:47:10
clモジュールのことか?
cl.el を見ればわかるんじゃね?
CL と emacs-lisp では根本的に違うところもあるから
必ずしも一対一に対応してるとは限らんが

211 :デフォルトの名無しさん:2009/08/14(金) 06:09:19
Emacs Lisp が末尾再帰を最適化していない理由って何ですか?


212 :デフォルトの名無しさん:2009/08/14(金) 09:02:49
みんな末尾再帰を使わないから

213 :デフォルトの名無しさん:2009/08/14(金) 09:06:49
>>212
最適化が成されていないから使う必要がない。
だから末尾再帰を使う人がCLに比べるとかなり少なくなる。
それは最適化していないことの理由ではない。
違いわかるよね?

214 :デフォルトの名無しさん:2009/08/14(金) 11:48:42
末尾再帰しててもアドバイス定義したら末尾再帰にならなくなったりするんじゃね?
コンパイル時に最適化してしまうと後で困る。

よく誤解している人がいるけど、
cl や emacs-lisp は関数型言語なんかじゃありませんから!!

215 :デフォルトの名無しさん:2009/08/14(金) 11:58:15
じゃあなんなんだよ。
そんなの「吉野屋やすき屋は牛丼なんかじゃありませんから!」並の理屈だぞ。

216 :デフォルトの名無しさん:2009/08/14(金) 12:11:12
http://en.wikipedia.org/wiki/Common_Lisp
手続的、関数的、オブジェクト指向の連携をサポートしたマルチパラダイム言語

217 :デフォルトの名無しさん:2009/08/14(金) 12:52:25
勝手に末尾再帰されるようなマクロ書けってスタンスじゃね?
マルチパラダイムうんぬんは関係ないかと

218 :デフォルトの名無しさん:2009/08/14(金) 14:27:05
>>214
emacs-lisp は "ほぼ" 関数型言語。
cl は関数型言語。

219 :デフォルトの名無しさん:2009/08/14(金) 21:49:36
吉野屋やすき屋は牛丼じゃない

220 :デフォルトの名無しさん:2009/08/14(金) 22:20:31
>>211
実装が面倒くさいから。
ってcompile.elのソースに書いてあったと思ったよ
ソースすら読まない馬鹿は本当にしょうがないな

221 :デフォルトの名無しさん:2009/08/15(土) 03:33:36
……何にどう書いてあるって?

222 :デフォルトの名無しさん:2009/08/15(土) 03:38:57
                \
                \
              ∧ニユ/ ̄ヽ
    \        ( ´∀/)    i
    \.\    _(」つ/とl) .  | \
    ;::;::\i\  匚レ| .〈/ )    |  \
     。::;;:'\.\   (_,)ー'    |_,, -'''"!
    ^人;:'::;゚:;.\l\     _,,, -''"|_,, -''"|
     ^^从::;;:。':\.\_,, -''"|_,, -''"|   . :|
     へ ^へ;;::';;:'\l_,, -''" .   | 从^    〜
     ^ ^ヘ^人从::;;;:|    ,ィ人^. |  ^ ^へ^^
      〜 ^.へ' ^':レ^从 へ'  | 〜   ^
     へ ^^ へ 〜人^ ^  へ〜  〜



223 :デフォルトの名無しさん:2009/08/15(土) 15:50:25
>>220
最近 emacs スレッドにもいる、前頭葉が未発達で可哀想な方ですよね。
わかります。

$ grep -E '\b(tail|recursion)\b' compile.el | wc -l
0


224 :デフォルトの名無しさん:2009/08/16(日) 16:02:44
emacsclient の、標準入力って使えないのかな?

こんな感じに
% date | emacsclient

これとか、
% date | emacsclient -
% date | emacsclient --eval '(read)'

試したんだけど、違った。


225 :デフォルトの名無しさん:2009/08/16(日) 22:25:43
>>220
> ってcompile.elのソースに書いてあったと思ったよ
byte-opt.elの間違いじゃないの?

>>223
もうちょっと頭使えば正解にたどり着けたのにね

226 :デフォルトの名無しさん:2009/08/16(日) 22:30:13
泣きながらgrepしたんだねw でも面倒くさいからなんて書いてないからwww

227 :デフォルトの名無しさん:2009/08/16(日) 22:41:08
とgrep厨が申しております

228 :デフォルトの名無しさん:2009/08/17(月) 00:10:51
じゃあ私はemacs厨!

229 :デフォルトの名無しさん:2009/08/17(月) 12:31:16
キッチンシンクなだけに厨がよく似合います


230 :デフォルトの名無しさん:2009/08/17(月) 20:21:52
うまいな

231 :host-130-64-82-173.medford.tufts.edu:2009/08/21(金) 00:23:18
Xubuntu8.04 にEmacs Speaks Statistics を入れています。

起動時に

https://bugs.launchpad.net/ubuntu/+source/a2ps/+bug/248134

と同様、

Error while loading 50a2ps

のメッセージが出て気持ち悪いです.(動くことは動く)

patchのあて方が分かりません.どなたか教えてください.



232 :デフォルトの名無しさん:2009/08/21(金) 07:48:16
>>231
Emacs Lisp全く関係ないと思うけど、

ttp://ja.wikipedia.org/wiki/Patch
ttp://www.linux.or.jp/JM/html/GNU_patch/man1/patch.1.html

でも、そこにあるパッチって、一ヶ所クォートするだけだから、
どう考えてもエディタで編集した方が早いよ。

233 :デフォルトの名無しさん:2009/08/21(金) 18:50:29
Emacs LispにCommon Lispの merge-pathnames に相当する関数はありますか?

234 :デフォルトの名無しさん:2009/08/21(金) 21:05:19
>>233
expand-filename ?

235 :デフォルトの名無しさん:2009/08/21(金) 21:41:25
>>234
expand-file-name ですね。
ありがとうございます。期待通りの動作ができました。

236 :231:2009/08/22(土) 04:16:29
sudo patch -p0 < 50a2ps.patch
でいけました。lispとは関係なかったですか。

237 :デフォルトの名無しさん:2009/08/22(土) 07:09:48
>>236
だって、知りたいのはpatchコマンドの使い方だったわけじゃない?
例えば、LinuxカーネルがC言語で書かれてるからって、
C言語のスレでカーネルのコンパイルの仕方とか聞かないでしょ?

diffとpatchは、UNIX系のOSを使う上で知っていると便利だから、
当て方、作り方、読み方は知っておくといいと思う。

ともあれ、無事に当たって良かったね。

238 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 11:07:48
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)
のような感じです。

239 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 11:19:51
applyを使う
詳しい使い方は(info "elisp")見てくれ

(let ((strs '("foo" "bar" "baz")))
(assert (string= (apply 'concat strs)
(concat "foo" "bar" "baz"))))

240 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 11:28:59
やはりその用途だと apply を使うしかなさそうですか。
ありがとうございました。

241 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 11:40:52
度々質問すみません。

`sleep-for' は "without updating display" なので、

(insert foo)
(sleep-for n)

をしても foo の中の文字列がバッファ上に表示される前に
n 秒止まる作用があるのですが、 foo の内容を "表示させた後" に
sleep する方法はありますか?

242 :名無しさん@そうだ選挙に行こう:2009/08/30(日) 11:44:27
>>241
自己解決しました。 (redisplay t)

243 :デフォルトの名無しさん:2009/09/01(火) 16:21:41
mode line と echo area を消す方法はありますか?

244 :デフォルトの名無しさん:2009/09/02(水) 14:43:29
しかし、emacsコアのソースコードは綺麗だなー。

245 :デフォルトの名無しさん:2009/09/03(木) 03:31:39
Emacsで独自コマンドを定義したいのですが
M-x hoge 3
の用に引数を与えるか、もしくは
M-x hoge
Input number:
の用にプロンプトを出したいです。
両方の方法について調べてみたのですが
どちらについても解説が見つかりませんでした。
どのようにすれば良いのかご教授ください。

246 :デフォルトの名無しさん:2009/09/03(木) 04:06:45
>>245
前者は interactive の引数に N だか p だかを加える。
後者は (defun hoge () (read-number "Input number: "))


247 :デフォルトの名無しさん:2009/09/03(木) 04:26:39
ありがとう御座います。
助かりました.


248 :デフォルトの名無しさん:2009/09/03(木) 22:16:51
interactive に n ってのがあるよ。

249 :デフォルトの名無しさん:2009/09/05(土) 17:29:11
(defun hoge (num)
(interactive "nInput number:")
(message "%d" num))

250 :デフォルトの名無しさん:2009/09/05(土) 18:10:26
interactive は関数型的ではないので嫌い。
便利そうに見せかけて逆にプログラムを汚くするから嫌い。
コードレターが文字列に混ざっていてキモイので嫌い。


251 :デフォルトの名無しさん:2009/09/05(土) 18:23:59
どうしたいんだ?文句いうだけ?

252 :デフォルトの名無しさん:2009/09/05(土) 19:58:02
>>251
たった今、今年一番のセックルしてきたからこの際素直になるわ。

ごめん、文句言うだけだった。


253 :デフォルトの名無しさん:2009/09/06(日) 11:39:53
emacs(parentプロセス)が死んだ時に、emacsから立ち上げた
特定のchildプロセスは生き残るようにする方法はありますか?

254 :デフォルトの名無しさん:2009/09/06(日) 13:31:57
>>253
daemon化するのと同じような処理をする。
二段forkしたり、ttyやプロセスグループを切り離したり。

255 :デフォルトの名無しさん:2009/09/06(日) 14:22:33
>>254
いままでは bash 経由でそれを実現していたのですが、
emacs の関数でそういったオプション指定は可能なのかと思って質問しました。

256 :デフォルトの名無しさん:2009/09/11(金) 10:26:26
sense-region.el は使えるんだが、コードがちと orz なんだよな。
emacs 23.* コンパイラーでwarningがでないように、コードクリーンアップ
した人いる?

257 :デフォルトの名無しさん:2009/09/13(日) 16:36:02
したよ。

rm ./sense-region.el

258 :デフォルトの名無しさん:2009/09/13(日) 16:48:22
>>257
つまらない。

259 :デフォルトの名無しさん:2009/09/13(日) 17:36:23
つまらなくはない。

むしろ本質をついたレスだと思う。
哲学的な嫌いはあるけどね。

260 :デフォルトの名無しさん:2009/09/13(日) 18:34:10
うん、つまらないね。

261 :デフォルトの名無しさん:2009/09/13(日) 18:51:22
デカルトになぞらえていえば

sense-region.elある故に問題あり

一つの正答だろう。

262 :デフォルトの名無しさん:2009/09/13(日) 19:06:25
つまらんだろ普通に。

263 :デフォルトの名無しさん:2009/09/13(日) 19:21:47
つまらなくない。

264 :デフォルトの名無しさん:2009/09/13(日) 19:24:23
 \もうね、アボカド/ \バナナかと/
                     ┌┐
      ヽ           / /
     γ⌒^ヽ       / / i
     /:::::::::::::ヽ      | (,,゚Д゚)
     /::::::::(,,゚Д゚)       |(ノi  |)
    i:::::(ノDole|)     |  i  i
     ゙、:::::::::::::ノ      \_ヽ_,ゝ
      U"U         U" U

265 :デフォルトの名無しさん:2009/09/13(日) 22:27:05
>>261
コードがちと orz 故に問題あり
と思われ

266 :デフォルトの名無しさん:2009/09/15(火) 17:23:24
アホな質問すいません。

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が残ってると
; ちょっと、イラッとくるぐらいで。


269 :デフォルトの名無しさん:2009/09/24(木) 19:45:25

quote や lambda の内部で予め式を評価する方法がわかりません.
例えば
(let ((v 10))
(lambda (n) (+ n v)))
=> (lambda (n) (+ n v))
これを以下のように評価することは可能でしょうか.
(lambda (n) (+ n 10))

初歩的な質問で申しわけありませんが,ご教示願います.

270 :デフォルトの名無しさん:2009/09/24(木) 20:19:27
(let ((v 10))
`(lambda (n) (+ n ,v)))

271 :デフォルトの名無しさん:2009/09/24(木) 20:36:03
>> 270
ありがとうございます.
やはり方法があったんですね,非常に助かりました!!


272 :Zeno ◆5nZQbNmQPs :2009/09/25(金) 08:16:26

>>269
>>270
その場合は意味合い的に

(lexical-let ((v 10))
(lambda (n) (+ n v)))

とした方が良い。


273 :デフォルトの名無しさん:2009/09/25(金) 08:49:41
>>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)"


275 :デフォルトの名無しさん:2009/09/25(金) 14:43:03
lexical-let 使うなら (require 'cl-macs) 書いておくべきだろ

276 :デフォルトの名無しさん:2009/09/25(金) 18:14:35
いつからか知らないけど、少し前から 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 :デフォルトの名無しさん:2009/09/26(土) 03:09:45
いや意味の違いじゃなくて”何故”両方ある必要があるのかって質問でしょ

280 :Zeno ◆5nZQbNmQPs :2009/09/26(土) 03:11:02

>>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"

非常に勉強になりました!!


282 :Zeno ◆5nZQbNmQPs :2009/09/26(土) 04:41:58

>>281
> ちなみに quote 内で評価する場合は(回答頂いた中では) >>270 でしか展開さ
> れないみたいですね.

当たり前だ。 quote は数ある special form の一つで、
その引数は評価されないまま内部に渡される。

根本的に理解できていないようだから、まずは common lisp から
学んでみることを勧める。

わかったらさっさと本屋に直行しろ。


283 :Zeno ◆5nZQbNmQPs :2009/09/26(土) 04:47:51

私は emacs スレを長らく留守にしていたのだが、
フンバリャーウンコ・ヨーデルは現れなかったかね?

フンバリャーウンコ・ヨーデルはいるかね? 見ているなら返事をしたまえ。


284 :269 ◆PC9p7J5igw :2009/09/26(土) 05:59:41
>>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
から勉強したいと思います.


285 :デフォルトの名無しさん:2009/09/26(土) 08:39:51
復刊なった「はじめての人のためのLisp」が発売されたら、
少しは、「少しは本を読め」な質問減るかなぁ。

286 :デフォルトの名無しさん:2009/09/26(土) 09:37:27
CommonLispを勉強したら
EmacsLispが嫌になっちゃったりして。

287 :デフォルトの名無しさん:2009/09/26(土) 11:05:12
そしたらようこそwin&xyzzy
Macで使えたらなぁ…

288 :デフォルトの名無しさん:2009/09/26(土) 11:12:08
ソース公開されてるよ。C++で書かれていたので面倒くさくて読んでないけど。

289 :デフォルトの名無しさん:2009/09/26(土) 18:52:57
Common Lisp と Emacs Lisp の関数の対照表みたいなのってある?

290 :Zeno ◆5nZQbNmQPs :2009/09/26(土) 20:56:17

>>289
ああ、在る。


291 :Zeno ◆5nZQbNmQPs :2009/10/02(金) 16:10:23

>>284
頑張れよ
ttp://www.gnu.org/software/emacs/manual/html_mono/elisp.html


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というのは方言の違いを表しているのでしょうか、

実際に、出来ることと出来ないことの差というものもあるのでしょうか?



293 :デフォルトの名無しさん:2009/10/05(月) 22:37:44
そりゃ別のものだからね。差もあるだろう。

294 :デフォルトの名無しさん:2009/10/05(月) 22:43:04
>>293
Emacs lispの使われる用途
Common lispの使われる主な用途
を教えてください。

また、上記両方のlispに関して参考サイトとしての大御所・・・と言えるような海外サイトがあれば教えて頂きたい


295 :デフォルトの名無しさん:2009/10/05(月) 22:50:08
Emacs Lisp はそりゃ Emacs を拡張したり開発したりするのに使う。
Common Lisp はもっと計算速度が欲しいとか大規模なものを作る人々が使う。
大御所ねぇ。権威が欲しいならHaskellとかScalaとかピカピカのやつやったほうがいいと思うよ。

296 :デフォルトの名無しさん:2009/10/05(月) 22:53:29
成る程・・・
わかりました。最初はCommon Lispから始めようと思います。それでは

297 :デフォルトの名無しさん:2009/10/05(月) 22:54:26
オイオイ…
Emacs Lisp は Emacs の名を冠するだけあって Emacs の拡張・カスタマイズ用に決まっておろうが。
Emacs は本当に基本的なコアを除いて Emacs Lisp で書かれてるんだぜ。

Common Lisp の主な用途って言っても汎用言語の主な用途なんて言ってもしょうがないと思う。
とりあえず Common Lisp スレがあるからそっち行け。

298 :デフォルトの名無しさん:2009/10/05(月) 23:10:48
っttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/comparison.html

299 :デフォルトの名無しさん:2009/10/06(火) 09:26:11
lispは方言が多い言語としても有名なんだったよね。

300 :デフォルトの名無しさん:2009/10/06(火) 23:01:43
ruby

301 :デフォルトの名無しさん:2009/10/07(水) 00:35:00
JavaScript も Lisp in C's Clothing だ

302 :デフォルトの名無しさん:2009/10/07(水) 00:39:37
標準ライブラリみたいなもんって lisp だと何?

303 :デフォルトの名無しさん:2009/10/07(水) 00:42:55
CL なら CLtL2
Scheme なら SRFI

304 :デフォルトの名無しさん:2009/10/07(水) 17:19:58
Emacs Lisp でウェブアプリって書けないかな?
ウェブできればグラマーの幅が広がって共有ノウハウも増えるはずなんだけど。

305 :デフォルトの名無しさん:2009/10/07(水) 18:11:57
グラマー?

306 :デフォルトの名無しさん:2009/10/07(水) 18:40:55
トランジスタ?

307 :デフォルトの名無しさん:2009/10/07(水) 19:13:58
>>304
そりゃ書けると思うけどグラマーの幅が広がるって意味がわからん。
ウェブアプリってのもクライアントなのかサーバアプリなのかわからん。
前者なら普通に存在してるよ。

あと昔Emacsで動くhttpdなんてのも作られてたよ。
こんなん。

ttp://sachachua.com/notebook/emacs/httpd.el
ttp://elserv.sourceforge.net/

308 :デフォルトの名無しさん:2009/10/07(水) 22:58:12
>>304
ウェブのソフトウェアなんてシェルスクリプトでも書けるんだぜ。
Emacs のノウハウを心配するより、君自身のノウハウを増やした方が良いと思うぞ。

309 :デフォルトの名無しさん:2009/10/09(金) 12:57:59
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 が定義されていないとのことですが
どう対処してよいかわかりません。
何かアドバイスをいただけませんでしょうか?

310 :デフォルトの名無しさん:2009/10/09(金) 12:59:28
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 ...))))

311 :デフォルトの名無しさん:2009/10/09(金) 12:59:35
(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

312 :デフォルトの名無しさん:2009/10/09(金) 19:30:54
info.el ロードされてないんだな。anything より前に
(require 'info)
とでも書いたらどうかな。

313 :デフォルトの名無しさん:2009/10/09(金) 19:53:14
>>312
ありがとうございました。できました。

314 :デフォルトの名無しさん:2009/10/10(土) 00:32:01
Emacs怖い。数十年後もEmacs使ってそう。

315 :デフォルトの名無しさん:2009/10/10(土) 21:12:34
選択した語をサーチエンジンで検索してw3mで表示するelispってあります?

316 :デフォルトの名無しさん:2009/10/10(土) 22:31:51
どっかで拾った google.el ってのがそんな挙動だな。
内容は region が活性だったら google 用の検索 URL 作って
browse-url で デフォルトのブラウザ呼び出すだけのシンプルなのだったけど。

317 :デフォルトの名無しさん:2009/10/10(土) 22:54:01
EmacsWikiのdim-google.elっていうのが求めるものでした
探せばすぐに見つかるものでしたね
お手数をかけました

318 :デフォルトの名無しさん:2009/10/10(土) 23:37:36
孫にEmacsの手ほどきをするのが老後の夢


319 :デフォルトの名無しさん:2009/10/10(土) 23:55:47
emacsをp2pで繋ぐのが夢だ

320 :デフォルトの名無しさん:2009/10/15(木) 16:27:56
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びいきな名前」と解釈するのが正しい。


323 :デフォルトの名無しさん:2009/10/15(木) 17:14:51
いまどきEmacsなんか使ってたら厨か老人扱いだろ。
なんでそうなったかっていうと、圧倒的大多数を占めるWindowsに
インターフェースを合わせなかったからだろうな。
標準をWindowsに合わせて、オプションで旧Emacsを選べるのが
本来の正しい姿。

324 :デフォルトの名無しさん:2009/10/15(木) 17:17:24
>>323
君面白いねw

というかWindowsがEmacsにあわせるべき。
Macはもう合わせてる。


325 :Zeno ◆5nZQbNmQPs :2009/10/15(木) 17:31:04

中身が理解できていない為、デフォルトの見た目について
あれこれ文句を言うことしかできない真性の阿呆は放っておけ


326 :デフォルトの名無しさん:2009/10/15(木) 17:35:42
xkeymacsでええやん

327 :デフォルトの名無しさん:2009/10/15(木) 19:00:12
「窓使いの憂鬱」も忘れないで!


328 :デフォルトの名無しさん:2009/10/15(木) 20:07:39
ありゃキーロガーだから死すべきもの

329 :デフォルトの名無しさん:2009/10/15(木) 21:24:17
>>320
ttp://www.ueda.info.waseda.ac.jp/~ichibe/pub/members.tripod.co.jp/zzyyb/mit/doc-ja/user_8.html
Emacs ライクな Scheme ベースのエディタ Edwin
ただし日本語は通らないらしいが

330 :デフォルトの名無しさん:2009/10/15(木) 22:15:20
なんでEmacsはwindowsで使えないの?
windowsアンチなの?

331 :デフォルトの名無しさん:2009/10/15(木) 22:28:12
なんでwindowsではEmacs使えないの?
Emacsアンチなの?


332 :デフォルトの名無しさん:2009/10/15(木) 22:41:05
なんでwindowsでEmacs使えないと思ってるのかが謎だ

333 :デフォルトの名無しさん:2009/10/15(木) 23:12:35
meadowもemacsだろ

334 :デフォルトの名無しさん:2009/10/16(金) 00:20:17
emacsでパソコンとお友達になれますか?

335 :デフォルトの名無しさん:2009/10/16(金) 00:29:15
オフィシャルに Windows のバイナリもあるというに。

336 :デフォルトの名無しさん:2009/10/16(金) 00:42:28
いまどきMeadowはないだろ。。。

337 :デフォルトの名無しさん:2009/10/16(金) 00:46:58
meadowはemacsenだけどNTEmacsはEmacsだよな

338 :デフォルトの名無しさん:2009/10/16(金) 16:43:29
xyzzy も忘れずに

339 :デフォルトの名無しさん:2009/10/16(金) 19:42:53
Windows マシンを持ってないんだけど、xyzzy って Emacs ユーザから見て実際どうなの?

・これだったら Emacs で十分だぜ
・これなら十分 Emacs の代替になるな
・こ、これは Emacs より断然スゲー!

340 :デフォルトの名無しさん:2009/10/16(金) 19:52:42
mgみたいなもの

341 :デフォルトの名無しさん:2009/10/16(金) 20:10:49
それは elisp が使えなければ Emacs に非ずって事かな?

342 :デフォルトの名無しさん:2009/10/16(金) 20:18:49
Emacs 的に見るとまがいもんだけど、
エディタ全般的に見ると xyzzy には xyzzy の良さがある。
着想の元が Emacs だとしても今では別物。
比較するようなもんじゃない。

343 :デフォルトの名無しさん:2009/10/16(金) 20:26:26
なるほど、別物なのか…
ありがと。

344 :デフォルトの名無しさん:2009/10/16(金) 22:59:31
Emacsとして見ようとすると違和感があるけど、
Windowsアプリとして見るとEmacsより違和感が無いって感じ(´・ω・`)

345 :デフォルトの名無しさん:2009/10/16(金) 23:00:56
メモ帳感覚で使えて、かなりemacsぽくもつかえる

346 :デフォルトの名無しさん:2009/10/16(金) 23:08:32
正直、Windowsつこうてる時は、Emacsよりもxyzzy使うことのほうが多い僕は異端児。

347 :デフォルトの名無しさん:2009/10/17(土) 08:41:20
ただ細かい部分でEmacsと違うから
Emacs好き好きすぎるとかえってストレスたまるかもしれんね。


348 :デフォルトの名無しさん:2009/10/17(土) 09:17:51
Emacs好き好きだったら当然Window上でも本物Emacs入れてるでしょ。
今のWindows用EmacsはUSBに入れて持って歩けるしね。


349 :デフォルトの名無しさん:2009/10/24(土) 18:44:32
emacsそのものより利用者が作ったライブラリとか付属のelispを使う為ってのが大きい

350 :デフォルトの名無しさん:2009/10/24(土) 20:49:56
>>349
大昔にマイコンさわったときの最初のエディタがmince(micro emacs)だったと言うだけでemacs以外さわれない体になった俺みたいなのもいる(普通はwordmasterだった頃)
RPN電卓さわってしまった工学系学生とおなじようなもんだけど


351 :デフォルトの名無しさん:2009/10/24(土) 20:56:13
よく「最初にXXXXをさわったからXXXXしか使えなくなった」って言う人がいるけど
単に適応能力が普通の人に比べて足りてない能無しってだけだよね。
価値のある体験談でもないし勿論自慢にはならない。

352 :デフォルトの名無しさん:2009/10/24(土) 21:09:32
さわれないっていうよりさわりたくない、ぐらいだろね
必要にせまられればどんなエディタでも結構なんとかなったりする


353 :デフォルトの名無しさん:2009/10/24(土) 21:26:45
>>351
もちろん君はQwerty配列でもDvorak配列でも全く同等に使えるんだよね?

354 :デフォルトの名無しさん:2009/10/24(土) 21:41:26
>>351
emacsとvi好きに喧嘩売るとはなんという宗教戦争マニア!


355 :デフォルトの名無しさん:2009/10/24(土) 21:47:06
>>351
エディタとか割とよく使うもの(鉛筆とノートのように)だと最初の原体験で得た物と次にさわった物の間で入力速度に差があると二度と他に移りたくなくなる物だよ
今の時代のようにしょっちゅう入れ替えができたり物が選べる時代じゃないならなおのことだ(当時はストレージがFDドライブ二個が上限だったしエディタ買うのだってものすごく高価だった)

今でも各種IDEのキーバインドにエディタ名を冠した設定がある事がそれを物語ってるよ


356 :デフォルトの名無しさん:2009/10/25(日) 01:38:28
仕事だとそんなふぬけたこと言ってらんないんだけどね。


357 :デフォルトの名無しさん:2009/10/25(日) 01:51:57
>>353
それ、良い喩えだね。面白い。

358 :デフォルトの名無しさん:2009/10/25(日) 02:00:11
>>353
どっちも十分に経験していれば、当然どっちも十分に使えるだろうね。
普通の人は。

脳に欠陥のある人は、二つ目の経験が一つ目を吹き飛ばしてしまうかも。

359 :デフォルトの名無しさん:2009/10/25(日) 02:16:32
一時期 RPN 電卓を覚えようとした事があったけど、常にパソコンを
携帯していたので電卓の出番が無くて結局覚えられなかったなあ。

bc って打つ代わりに dc って打てば良いだけだったんだけど、そこは
やっぱり人の性、要らん物は覚えないね。

360 :デフォルトの名無しさん:2009/10/25(日) 03:16:49
「一事なれば万事成る」っていうじゃないか。
まず一つの事を深く知ることが大事だろ。


361 :デフォルトの名無しさん:2009/10/25(日) 03:48:27
>>358

>どっちも十分に経験していれば、当然どっちも十分に使えるだろうね。

ただし、
日本ではQwertyを強制される機会は多くてもDvorakを強制される機会はほとんどないため
普通の人はQwertyしか使えない。
自分で乗りかえようと思い立った人か幸運にも最初がDvorakだった人のみが
Dvorakを使えるというのが現状。

だからどっちも十分に経験していれば、という前提が非常にレアケース。

普通の大部分の人は
「最初にQwertyをさわったからQwertyしか使えない。」

362 :デフォルトの名無しさん:2009/10/25(日) 05:14:32
>>361
もっともらしく文章書いてるが結論でいきなり論理が飛躍している上に間違っている。阿呆。
最初にQwertyをさわったからQwertyしか使えない。
ではなく
QwertyしかないからQwertyしか使わない。
程度の事しかおまえさんの文章では結論できない。

363 :デフォルトの名無しさん:2009/10/25(日) 05:21:04
>>362

>QwertyしかないからQwertyしか使わない。
そこらじゅうにDvorakに触れる機会はあるよ。
ただみんなそれを選んでないしそうする必要もないだけ。

だから普通は選ばない。
理由は慣れてないから。
なぜ慣れていないかと言うと普通は最初にDvorakを触っていないから。覚えるコストも大きい。

どこか違うの?


364 :デフォルトの名無しさん:2009/10/25(日) 09:32:36
そんなことよりいい加減スレ違いなのに気付こうぜ。
最初に触れたのが Common Lisp だから Emacs Lisp が気持ち悪いって話題ならともかく・・・

365 :デフォルトの名無しさん:2009/10/25(日) 09:51:46
>>353
もれはASCII配列のQWERTYしか使えない

366 :デフォルトの名無しさん:2009/10/25(日) 10:53:59
ANSI配列って言いたいんだろうな

367 :デフォルトの名無しさん:2009/10/25(日) 10:55:25
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
自分が使うエディタは好きな物を選べるから、実質上困った事無いなあ。
困ってない事を解決するのは余程の暇人じゃないと難しい。

370 :デフォルトの名無しさん:2009/10/25(日) 12:12:36
人によって環境違うしな。
UNIX上での仕事メインならEmacs使うのになんの支障もないだろし
他のOSでもエディタの指定がゆるいならバリアントを入れればいいし
仕事じゃなくて趣味ならおさっしだし。

navi2chしか使ってないくせにEmacsしかもう使えない!なんていってるやつは
死ねばいい

371 :デフォルトの名無しさん:2009/10/25(日) 12:23:04
>navi2chしか使ってないくせにEmacsしかもう使えない!なんていってるやつは
>死ねばいい
流石にネタだと思いたい


372 :デフォルトの名無しさん:2009/10/25(日) 14:31:24
あーいそうだそういうのw
UbuntuインストールしただけでLinuxマスター(笑)になっちゃって
わけしり顔でWindows批判はじめだすような人種だな

373 :デフォルトの名無しさん:2009/10/25(日) 15:36:31
仮想敵かよ

374 :デフォルトの名無しさん:2009/10/25(日) 17:56:56
♪見えない敵にマシンガンを〜

375 :デフォルトの名無しさん:2009/10/25(日) 18:58:43
見えない敵ではなく、見える雑魚だろう。

376 :デフォルトの名無しさん:2009/10/25(日) 19:25:34
deffaceはどうやらdefvarと同じく上書きがされないみたいなんだけど
このdeffaceの引数と同じ書式で上書き可能な関数ってあります?
(set-face-* ...)もあるけど、できればまとめて定義したいので


377 :デフォルトの名無しさん:2009/11/08(日) 15:28:54
>>376
set-face-attribute とか?

378 :デフォルトの名無しさん:2009/11/13(金) 21:23:30
>>377
それだと引数がリストじゃないんですよね。。

とりあえず自分でdeffaceを弄ったものが期待どおりに動いたのでよしとします
http://paste.lisp.org/display/90293


379 :デフォルトの名無しさん:2009/12/01(火) 21:03:37
こんなのってない?

【プログラミング万歩計】
ファイルの拡張子ごと、日付ごとに自分が何回タイプしたか統計を取る。
健康増進的なノリでプログラミング力を鍛える励みにする。




380 :デフォルトの名無しさん:2009/12/01(火) 21:20:13
>>379
outputz.el みたいなの?

381 :デフォルトの名無しさん:2009/12/01(火) 21:26:16
みたいなのっていうかそのものっぽいな。
拡張子毎ってあたりは適当に細工しなきゃいけないだろうけど。



382 :379:2009/12/01(火) 22:05:16
>>380,381
どうもです。
調べてみます。


383 :デフォルトの名無しさん:2009/12/02(水) 00:41:20
elispでチャット作ったけど使ってくれる人がいない

384 :デフォルトの名無しさん:2009/12/02(水) 06:15:34
全emacsenが泣いた

385 :デフォルトの名無しさん:2009/12/04(金) 14:20:13
emacs 上で現在動いている timer の一覧を得る、なんてことはできませんか?


386 :デフォルトの名無しさん:2009/12/04(金) 20:44:03
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)))))


387 :デフォルトの名無しさん:2009/12/06(日) 01:38:29
timer-list に保管されてるのか。
すばらしい。ありがとう!!


388 :デフォルトの名無しさん:2009/12/09(水) 04:58:04
スレ違いですが、教えてください。
さっきMeadowを使っている人は少なくて本家のgnu emacs winバイナリを使っている人が主流みたいに書いてあったのですが、みなさん日本語入力はどうしてます?

389 :デフォルトの名無しさん:2009/12/09(水) 08:35:32
skk

390 :デフォルトの名無しさん:2009/12/09(水) 08:43:22
なるほどSKKですか、MS-IMEやATOKを使っている方はいらっしゃらないでしょうか。
そもそも使う方法はないのでしょうか。

391 :デフォルトの名無しさん:2009/12/09(水) 16:37:41
>>388
なぜ、このスレで質問してるのか、よくわからないが、MS-IMEでMeadowに入力できたと思うけどなあ。
で、Meadowで何をしたいんだ?
emacsを使いたいなら、マウスを持たずにCUIで作業するのが理想だと思うなあ。

392 :デフォルトの名無しさん:2009/12/09(水) 16:48:44
>>391
いきなりマウスの話題が出てきた理由って何なの?

393 :デフォルトの名無しさん:2009/12/09(水) 17:32:46
>>391
ん?
Meadow じゃなく gnu emacs win バイナリで日本語入力はどうしてるの?
って質問じゃないかと。

394 :デフォルトの名無しさん:2009/12/09(水) 18:31:32
http://ntemacsjp.sourceforge.jp/

395 :デフォルトの名無しさん:2009/12/09(水) 20:05:24
>>391
elispスレなので、本家のgnu emacsを好む方が多いかなと思って質問させていただきました。

>>394
23baseがあれば嬉しいですが、すみません、わがまま言いすぎですよね。

396 :デフォルトの名無しさん:2009/12/09(水) 20:10:24
>>394
すみません。リンク先をよく見ていませんでした!
emacs23のIMEパッチをしてくださったんですね。早とちりしてNTemacsのことだと思っていました。すみません。
さっそく試してみます。ありがとうございました!

397 :デフォルトの名無しさん:2009/12/10(木) 00:13:25
y-or-n-p関数についてなんですが
* 端末から利用するとQuit(\C-g)が効く
* Xから利用するとQuitが効かない
てのは、正しい動作なんでしょうか?


398 :デフォルトの名無しさん:2009/12/10(木) 01:44:25
今、X上のemacsで (y-or-n-p "hoge") とやってみたけど C-g でquitできたよ。

399 :デフォルトの名無しさん:2009/12/10(木) 23:00:27
>>398
てことは、ウチの環境だけみたいですかね。。
正しくはXじゃなくてGTK@Ubuntuなんですけど

400 :デフォルトの名無しさん:2009/12/20(日) 05:31:59
sql-mode をつかってるんだけど、"REM" をコメント風に認識させられない?
remark 文の中の '09/12/20 みたいな ' 文字がでる度に string だと認識されて困る

401 :デフォルトの名無しさん:2009/12/30(水) 17:25:39
来年は elisp がネイティブコンパイルできる様になります様に ナムナム

402 :デフォルトの名無しさん:2010/01/18(月) 17:31:37
message 関数の様に使えてC言語の fprintf のようにファイル(バッファでもいいけど)に
出力する関数ってありますか?

403 :デフォルトの名無しさん:2010/01/18(月) 17:53:44
>>400
よくわからんが mmm-mode とか使えないの?

404 :デフォルトの名無しさん:2010/01/18(月) 18:11:53
>>402
format


405 :デフォルトの名無しさん:2010/01/18(月) 19:04:47
format って sprintf ですよね。string とか変数作って いちいち concat して
set-buffer して insert しないといけないんでしょうか。

質問ばかりですみません。

406 :デフォルトの名無しさん:2010/01/18(月) 19:21:32
(defun insert-to-buffer (buf fmt &rest args)
(with-current-buffer buf
(insert (apply #'format fmt args))))
みたいな関数を自分で作っちゃえばいいんじゃない?
標準にありそうな匂いがプンプンするけど

407 :デフォルトの名無しさん:2010/01/18(月) 19:43:12
>>406
とりあえずありがとう。やりたい事がやっとできました。

408 :デフォルトの名無しさん:2010/01/19(火) 20:10:59
>>402
sprintfのようにフォーマットの指定まではできないが
文字列の出力先を指定する関数はいくつかある。print/prin1/princなんかがそう
(princ (format "Hello %s.\n" "Emacs") (find-buffer "*scratch*"))

(info "(elisp) Output Streams") も参照
emacsの場合はファイルよりもバッファをやりくりするのが基本かな。


409 :デフォルトの名無しさん:2010/01/19(火) 21:12:16
リージョン内の数字にカンマを打とうと思って、

(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にすればマッチするんですが。

410 :デフォルトの名無しさん:2010/01/21(木) 19:22:28
・endがマーカーじゃない
・replace-matchにより該当部分の長さが変わる
・前から順に書き換えている
から。

411 :デフォルトの名無しさん:2010/01/21(木) 19:25:32
わかりました。ありがとうございます。

412 :デフォルトの名無しさん:2010/01/22(金) 08:51:54
先生、質問があります。以下のように 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 :デフォルトの名無しさん:2010/01/22(金) 17:09:30
質問の前提が間違ってます。

414 :デフォルトの名無しさん:2010/01/23(土) 03:29:24
>>413
前提というのは、「defvar で定義されたリストを関数の一部」かなと思うから
anything コードを見てみたら、必要に応じてリストから部分的に取り出して
使ってるように見えるから前提があってない。 そういうこと?

だから edebug でトレースは無理ということで終了?


415 :デフォルトの名無しさん:2010/01/23(土) 14:47:01
そう。edebugするなら対象はanythingの中の
> anything コードを見てみたら、必要に応じてリストから部分的に取り出して
> 使ってる
この部分になるでしょう。

416 :デフォルトの名無しさん:2010/01/27(水) 03:38:30
>>414
レスありがとう。やってみます!!

417 :デフォルトの名無しさん:2010/01/31(日) 08:49:08
テスト

418 :デフォルトの名無しさん:2010/02/08(月) 16:01:36
こんにちは。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



419 :デフォルトの名無しさん:2010/02/08(月) 16:30:25
>>418
ハッシュ値は関係ないと思う
完全ハッシュ関数を作らないかぎり、ハッシュ値はふつう重複する
Wikipedia のハッシュテーブルとかハッシュ関数の頁を参照

で、問題は compare-strings は文字列が一致しないときに数値を返すこと
(defun case-fold-string= (a b)
(string-equal (upcase x) (upcase y)))
ならうまく動いた

420 :デフォルトの名無しさん:2010/02/11(木) 09:52:56
>>419
ありがとうございます。同じハッシュ値をもつキーでもバリュー値を上書きす
るわけじゃないんですね。

421 :デフォルトの名無しさん:2010/02/12(金) 14:13:42
Emacs Lisp で書かれたものってソフトウェア?

422 :デフォルトの名無しさん:2010/02/12(金) 14:52:36
そう。

423 :デフォルトの名無しさん:2010/02/12(金) 14:58:35
すくなくともハードウェアでないことは確か。

424 :デフォルトの名無しさん:2010/02/12(金) 15:20:20
OK

425 :デフォルトの名無しさん:2010/02/18(木) 02:41:54
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になるのかわからなかったのでこちらに書き込ませて頂きました。


426 :デフォルトの名無しさん:2010/02/18(木) 02:55:15
(setq c-basic-offset 2)

427 :デフォルトの名無しさん:2010/02/18(木) 04:42:31
>>426
できました!
ありがとうございます。

428 :デフォルトの名無しさん:2010/02/18(木) 09:45:25
>>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っぽくかけます?

431 :デフォルトの名無しさん:2010/03/11(木) 03:03:52
(defun a (arg n)
 (if (< n 2)
  (+ 1 arg)
  (a (arg (+1 n))))
(a num 0)

432 :デフォルトの名無しさん:2010/03/11(木) 03:05:10
(defun a (arg n)
 (if (< n 2)
  (+ 1 arg)
  (a arg (+1 n)))

(a 12 0)

433 :デフォルトの名無しさん:2010/03/11(木) 03:43:32
>>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] ]
みたいなノリで、新しい関数作れないのかな?ってのを
試行錯誤してる感じです。

437 :デフォルトの名無しさん:2010/03/11(木) 23:38:22
諦めろ

438 :デフォルトの名無しさん:2010/03/12(金) 00:05:57
>>436
それってclosureやCLOSの抽象関数などに向かう話だと思われ。

つまりCommon Lisp方面。

439 :デフォルトの名無しさん:2010/03/12(金) 00:33:52
>>435
defadvice が使えることがある。例えば >>430 の例なら
(defadvice + (after foo)
(setq ad-return-value (- ad-return-value -1)))
ってするとか。
ただし、 + みたいな基本関数にこんな advice をつけて大丈夫かは知らない。
たぶん大丈夫じゃない。
ある程度用途が限定されている関数なら defadvice で少し動作を変えるというのはたまにやる。

440 :デフォルトの名無しさん:2010/03/12(金) 01:55:32
>>436
evalで出来なくはないだろうけど、手間が掛かるだけで全然便利じゃない。
あとは、ダイナミックスコープを利用した+の再定義とかもできるだろうけど、
これもバグの元でオススメできない。>>439の言うdefadviceもあるけど、
あれも限定的にしか使えない。

Lispでのそういう場合のセオリーは、関数を渡せるようにしておいて、
行いたい処理はその中で実行して、適宜切り替えられるようにするんだけど、
そういう風に設計されてなきゃそれまでだしなー。

その関数を書いたやつを内心で罵りながら書き直すに一票。

441 :デフォルトの名無しさん:2010/03/12(金) 09:48:16
動的スコープを利用するとこんな感じかな。
(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 でどうにかできないか検討して、それで無理だったら諦めるのが無難かなあ。

442 :デフォルトの名無しさん:2010/03/12(金) 14:36:38
そこはコールバックにしとけよ、みたいなの結構あるよね。
url.el とかそんなんばっかり。

443 :デフォルトの名無しさん:2010/03/12(金) 19:26:16
このあたりって各lispの方言に悩むよね
といってもemacs lisp,CL,schemeの3種くらいか、今悩むのは

444 :430:2010/03/13(土) 00:10:38
皆さんどうもありがとうございます!
アドバイスは知っていましたが、引数に気をつけないと後遺症が怖いんですよね。
もーちょい皆さんの意見参考にしつつ、粘ります。

>>442
> そこはコールバックにしとけよ、みたいなの結構あるよね。
ありますよねー。でも作った人には利用の仕方が無数に思いつくから、
面倒なんだと思います。

すべてがリスト、っていうプログラムの表現の仕方にあこがれてるので、がんばります、
みなさんありがとー

445 :デフォルトの名無しさん:2010/04/05(月) 18:54:20
emacs HEADにコミットしたいのですが、コミット権限は誰にどうすれば貰えるのでしょうか?

446 :デフォルトの名無しさん:2010/04/07(水) 01:39:49
大卒の新卒が大量に入ったけど、elispに興味持ってる人ほとんどいないね…時代の流れかな
iphoneアプリの人気がすごかった。

447 :デフォルトの名無しさん:2010/04/07(水) 01:50:38
昔は elisp に興味がある新卒が沢山居たの?
こういうのは研究室で身に付けてくるか、入社してから師匠に叩き込まれる物かと思ってた。

448 :デフォルトの名無しさん:2010/04/07(水) 08:22:50
研究室で身に付ける人が少なくなったってことだろ

449 :デフォルトの名無しさん:2010/04/07(水) 13:35:21
elisp 書く時間あったら javascript 書くだろうなぁ。

450 :デフォルトの名無しさん:2010/04/07(水) 13:54:08
俺も最近elispよりchrome拡張をJavascriptで書く方が多い。
mewじゃなくてgmailだし。


451 :デフォルトの名無しさん:2010/04/07(水) 16:02:15
今ある elisp でわりと事足りてるってのもあるな。
あとなんでもかんでも emacs 中でやろうと思うのは結構時間の無駄なんじゃ?って思うようになった。
一つの端末をずっと使い続けられない職場だからなのかもしれないけど。

452 :デフォルトの名無しさん:2010/04/07(水) 18:07:23
テキスト編集はこれからもEmacs。
Elispアプリでは、mewは使わなくなったけど、
navi2chやlookupは使ってる。
HTML/CSSの世界ではFirefox + Javascriptを、
Emacs + elispのように使うようになるのかと想像していたが、
そんなことは全くなかった。
HTML/CSS界のEmacsが現れて欲しい。
XMLで七面倒くさいXULは使わなかったが、
chrome拡張ならなんとかなるかもなあ。
Lispならいいのになあ。

453 :デフォルトの名無しさん:2010/04/07(水) 22:16:13
別に lisp である必要性は全然無いと思う。
javascript がベストな言語だとは思えないけどねえ。


つか「HTML/CSS界のEmacs」()笑っていったいどんなの想像してんのよwww

454 :デフォルトの名無しさん:2010/04/07(水) 22:22:49
>>453
>()笑

って書く人初めて見たwww

455 :デフォルトの名無しさん:2010/04/07(水) 22:38:32
最近はnavi2chぐらいかなぁ。
仕事だとJavaのコードばっかり書いてるからeclipseメインだわ。


456 :デフォルトの名無しさん:2010/04/08(木) 06:48:38
>>()笑
>って書く人初めて見たwww

漏れも時々そうなる
()を先に入力してから
カーソルを()の中に入れて笑を書くと
一部のIMEでいつのまにか()の外に笑が移動するんだよ
気付いたら治すけど



457 :デフォルトの名無しさん:2010/04/08(木) 06:50:49
ついでにもうちょっと補足しておくと

>()を先に入力してから

の理由は()が全角になるのを嫌って半角にするんだが
半角(

半角)
の順で入力すると切替が面倒なので
先に()を書いてしまう習慣がある




単語登録しろとかいう突っ込みは野暮というもの

458 :デフォルトの名無しさん:2010/04/08(木) 08:04:51
つ boiled-egg

459 :デフォルトの名無しさん:2010/04/08(木) 12:09:35
(笑)自体入力することなくなったなぁ
草生やしちゃわない?


460 :デフォルトの名無しさん:2010/04/08(木) 13:18:52
「スイーツ(笑)」とかのお陰で語尾以外では再興してきた気もするけどな。

461 :デフォルトの名無しさん:2010/04/08(木) 20:51:24
"()笑"が面白いと思うのはlisp使いだからじゃね?
Tシャツとnilシャツ
ウエイトレス:食後は珈琲でよろしいですか?
客:T
とか言うのと同じ楽屋落ちネタつーか


462 :デフォルトの名無しさん:2010/04/08(木) 20:58:33
質問文の最後に p 付けるとかな。


463 :デフォルトの名無しさん:2010/04/08(木) 22:01:15
Schme使いはどうしたら?

464 :デフォルトの名無しさん:2010/04/08(木) 22:29:05
h の後に e 付けるとかかな。

465 :デフォルトの名無しさん:2010/04/08(木) 23:14:11
h の後は賢者だろ

466 :デフォルトの名無しさん:2010/04/09(金) 03:35:58
「()笑」でC-tだろ常考

467 :デフォルトの名無しさん:2010/04/13(火) 14:40:33
minibuffer 用に Abbrev Table をセットするにはどうすればよいですか?
local-abbrev-table をセットしても使えませんでした。

468 :デフォルトの名無しさん:2010/04/13(火) 14:46:37
(global-set-key "\C-z" 'foo)
により \C-z がマップする関数が定義してあると仮定して、その場合、
「\C-z がマップする関数に \C-x もマップする」
という意味の関数を書きたいのですが、どうすれば良いですか?
イメージとしては
(map-same-keyfunc "\C-x" "\C-z")
により、'foo が \C-x がマップされるといったものです。

469 :デフォルトの名無しさん:2010/04/13(火) 15:09:30
ここいら辺の関数を使えば出きるんじゃん?
* (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


470 :デフォルトの名無しさん:2010/04/13(火) 22:42:35
>>468
> C-z がマップする関数に C-x もマップする
とはちょっと異なりますが、C-z に C-x をマップするってのが
global-set-key じゃなくて define-key を使えばできます。(キーボードマクロの登録)
これでどうでしょうか。具体的には以下の通りです。
(define-key global-map "\C-x" "\C-z")

471 :デフォルトの名無しさん:2010/04/14(水) 03:30:56
>>467
ミニバッファーで展開されるのはfundamental-mode-abbrev-tableと
global-abbrev-tableみたい。

472 :デフォルトの名無しさん:2010/04/14(水) 21:18:58
>>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の動作としては問題なし。
…と、ここまで書いたはいいが結局解決策は見つかりませんでした。。

473 :デフォルトの名無しさん:2010/04/14(水) 22:35:42
>>472
> Gnome側で「CapsLockをCtrlとして扱う」に設定した擬似Ctrl-gだと

Gnomeのコントロールパネルで変えると、
keysym自体が置き換わるんじゃない?
問題はadd Control = Caps_Lockした時なんじゃないのかな?
これはどの規定だったか忘れたけど、違反する使い方。
昔のXEmacsはこの状態見つけるとログ吐いていたと思う。

474 :デフォルトの名無しさん:2010/04/22(木) 20:03:41
>>473
反応が遅くてスマン

nocapsとswapcapsではkeysym?の挙動が違うみたい。
自分が使ってるのはnocapsの方。

swapcapsだと単純にCapsLockがControlに置き換わるけど
nocapsだと"translated from C-S-g"となるらしい

X11のキーコードの話は今までよく分かってなかったので
現在ググって調べ中…そろそろスレ違いになってきたぞ

475 :デフォルトの名無しさん:2010/05/05(水) 22:56:01
かつて無いほどに過疎ってるな…
流石にもうelispの時代は終わってしまったのかのう

476 :デフォルトの名無しさん:2010/05/05(水) 23:07:02
う、うん……(´・ω・`)

477 :デフォルトの名無しさん:2010/05/05(水) 23:52:37
Lispって言うほど魅力ないなあ、って勉強しててオモタ。

言語を作れるっていう宣伝が巷に溢れているが、
マクロのことであって、特に一般的に想像するような言語を作れるってのとは違う、
どちらかというとXMLで言う言語を作ってという感じに近い、
プログラミング言語の出来方でいえば、ある構造を別の原始的構造に翻訳する、というものだ。

あと抽象的とは言うが、オブジェクト指向的な意味での抽象性がない。
たとえば、リストがIterableだからリストじゃないものもIterableに振舞えば
リストのように扱えるというか、そういうものが無いように見える。

まあそれはともかくとして、Elispは秀丸マクロよりマシだと思うよ。

478 :デフォルトの名無しさん:2010/05/06(木) 01:03:44
scalaにハマった友人がLispを研究する意味が無くなったと言ってた

479 :デフォルトの名無しさん:2010/05/06(木) 01:47:07
エディタのマクロの中じゃ一番細かい事から大物まで書ける部類だと思うぞ
他のエディタで此処までかけるのってVisualStudioのVBマクロだろうけど、あれは細かいことするのがちょっと大変過ぎるし
Briefも割と良くできてたけど大物書くのはイヤになるっていう感じだし

Eclipseのプラグインがもっと柔軟になる以外elisp環境に対抗できるのってSmalltalk位じゃないの?



480 :デフォルトの名無しさん:2010/05/06(木) 07:24:14
マクロで簡単なレポートを作ったりもできて楽しいけどなあ

481 :デフォルトの名無しさん:2010/05/06(木) 10:51:22
>>477
> 言語を作れるっていう宣伝が巷に溢れているが、

Paul Graham 氏がそれを流行らせたのではなかろうか。

>>480
elispは楽しいよ。ただ、pythonとかに比べるとコーディングが
かなり遅くなっちゃう。名前空間がないから、同じ
関数を再コーディングするハメになったり、lispがlispである故、
「綺麗に書かなきゃな」ってのがあって、綺麗に書くこと自体が
割と面倒だったりする。


482 :デフォルトの名無しさん:2010/05/06(木) 11:44:07
関数呼び出しと、スペシャルフォーム・マクロのインデントのルールみなさん守ってますか?
defunとかは勝手にインデントされるけど、
defmacroしたのはdefunとかと同じようなインデントルールにしてますか?
正直インデントは構文にかかわらないわりに面倒。
まあ、視覚的に関数の構造を見られるのはいいけれども。

483 :デフォルトの名無しさん:2010/05/07(金) 14:32:20
君がlisp-indent-functionを知らんだけでは?

484 :デフォルトの名無しさん:2010/05/07(金) 15:32:37
自分でdefmacroしたやつもスペース2つのインデントにできる?

485 :デフォルトの名無しさん:2010/05/08(土) 18:54:52
>>477
入門本とかだと、表面的なことしかやってないから、全然面白くないよね。

Lispでの抽象っていうのは、OOP的な手法じゃなくって、
関数的な手法を使ってることが多い。つまり、クロージャを渡して、
それを内部で呼び出すことで、柔軟性を確保するとかそういうの。
OOPでもMOPとかどぎついのがあるけど。

On Lisp辺りは、邦訳がネットで無料で公開されてるから、読んでみたら良いよ。
言語を作るというのがどういうことなのか、関数的な抽象化とは何なのか、
具体的な例が乗ってるから。他の言語でも参考になる考え方だと思う。

486 :デフォルトの名無しさん:2010/05/08(土) 19:01:05
>>477
忘れてた。

> たとえば、リストがIterableだからリストじゃないものもIterableに振舞えば
> リストのように扱えるというか、そういうものが無いように見える。

これは流石に誤解。CLならGray Stream、Schemeならポートがまさにそれだし、
動的型付けを利用した手法は、日常的にみんな使ってる。Emacs Lispでも。

487 :デフォルトの名無しさん:2010/05/08(土) 22:24:49
関数型言語面白そうだし Lisp でもやってみるかねとか言ってた層は
Scala あたりに移っちゃったのかな

488 :デフォルトの名無しさん:2010/05/08(土) 22:31:10
Haskellじゃないかなー。

関数型スキーはHaskell、S式スキーはCommon LispやScheme、
Java資産を活かしたい実用派がScalaやClojure、
並列処理スキーがErlangみたいな気がする。

489 :デフォルトの名無しさん:2010/05/09(日) 06:08:11
Scheme使ってる人ですら最初はHaskellとか勧めるぐらいだしな
関数型を学ぶなら今はHaskellがいいんだろうな多分
個人的にはCoqのGallinaもいいんだけど、依存型はまだ難しすぎるから…

490 :デフォルトの名無しさん:2010/05/09(日) 10:01:52
Lispはあっちこっち手続きだし。

491 :デフォルトの名無しさん:2010/05/09(日) 10:23:52
でもなんつーか、Haskellはやってもしょうがないとは思うよ。
Lispだって、社会人になってからは、ハードコアなEmacs使いが
いじり倒したいから趣味で学ぶぐらいでしょ。
そうやって関数型には適度に慣れておくぐらいで十分。
Haskell学んだからって使える場所がないし後にも残らん。
どうせならElispに近いCommon Lisp学んで、CLのコードをポートしたりするのが良い。

492 :デフォルトの名無しさん:2010/05/09(日) 12:25:15
elisp やってたら Common Lisp も馴染みやすいかと思い始めたら、
format の辺りなど色々な部分が elisp と違っていて微妙だった。
elisp は C 言語系列をやってきた人に取っ付きやすいよう作られてるなと感じた.

493 :デフォルトの名無しさん:2010/05/09(日) 12:25:30
たしかに Haskell を実務で・・・なんて普通のやつらの上を行くぐらいの人じゃないと無理だろな
そういう意味じゃ Scala はまだ現実的な線だし elisp も emacs 使い続けるなら悪くないよね。

494 :デフォルトの名無しさん:2010/05/09(日) 13:06:23
>>493
> たしかに Haskell を実務で・・・なんて普通のやつらの上を行くぐらいの人じゃないと無理だろな

言っている意味がわからない。
「普通のやつらの上を行くぐらいの人」だと Haskell を実務で使わせてもらえると言っているの?

>>492
> format の辺りなど色々な部分が elisp と違っていて微妙だった。

底が浅いなー。 format なんてほとんど表面上のみの違いでしょ。
そんな関数1つより、もっと言語の中を突つかなきゃ。


495 :デフォルトの名無しさん:2010/05/09(日) 13:14:50
底が浅いというのは自分でも重々承知している所だが、表面も結構重要だと感じる。
例えば C を書く時と elisp を書く時では自分の中で切り替えが上手く出来るが、
elisp と Common Lisp ではどうしても似た気分で書いてしまう。
それゆえに細かなところが違っていると、ストレスになる。
まあ、書いていて思ったがこれは自分の問題だな。


496 :デフォルトの名無しさん:2010/05/09(日) 14:05:27
>>494
Paul Graham の「普通のやつらの上を行け」で Lisp を業務に使った話になぞらえたんだけど・・・

497 :Zeno ◆5nZQbNmQPs :2010/05/09(日) 14:22:14

まあ Haskell はプロジェクトには使わせてもらえんだろうな。
VCS で管理もされない個人用のツール程度だったら自由に Haskell を使っても問題はない。
というより、その用途であれば何の言語を使っても良い。


498 :デフォルトの名無しさん:2010/05/09(日) 14:59:12
単純に技術者の数の問題じゃない?
あと自社製品とかWebサービスみたいなのだったらHaskell使ったって良いとは思うけど。

請負いで納品するようなのだと運用・保守がかわいそうだなぁ。

499 :デフォルトの名無しさん:2010/05/09(日) 16:58:28
EIEIOが標準入りすることでCL packageのdefstructがobsolateになるとかありますか?

500 :デフォルトの名無しさん:2010/05/09(日) 17:08:09
最近誰かも書いてたが「俺のチームならよそでできないその仕事をやれます。」って
状況じゃないと雇われの身としては主流以外の言語使えないよな。

501 :デフォルトの名無しさん:2010/05/09(日) 17:19:30
lisp(とかHaskellとか)だと他の言語とくらべて開発効率/保守性/性能がこれだけ良いんですってのを
客観的に説明出来るなら良いんだけど、実際業務アプリ作るとかの場合
C#とかJavaあたりで書いた方が楽なんだよねえ。

502 :デフォルトの名無しさん:2010/05/10(月) 01:13:14
業務系だとやるべきことのパターンがかなり決まってるってのはあると思う。
フレームワークに従った方がうまくいく領域なら自由すぎる Lisp 系言語はかえってつらいってのはわかる。
Lisp が DSL 構築できるったって、わざわざ構築せずに済む言語環境があるならそっち使った方がそりゃ楽だ。
それはそれでいいんじゃないの。
ものごとはトレードオフだ。 Lisp がある条件で活躍するためには切り捨てざるを得なかったものだってあるだろうさ。

503 :デフォルトの名無しさん:2010/05/10(月) 06:50:40
今のところ、関数型言語が業務向けで役に立つであろうシチュエーションって
並列化しやすいからスケールアウト時のコストが低いですよ!ぐらいなのかなぁ。

504 :デフォルトの名無しさん:2010/05/10(月) 07:28:42
当たり前だけどクライアントのリクエスト単位では、
すでに並列化されてるんだよね。
リクエストごとにスレッド割り当ててるから。

リクエスト内部の処理を別スレッドにぶった切ったからといって
そこまで早くなるとは考えづらい気がする。

505 :デフォルトの名無しさん:2010/05/10(月) 23:27:25
どっちにしろ普通のアプリで恩恵こうむるのは難しそう・・・


506 :デフォルトの名無しさん:2010/05/30(日) 02:05:04
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で開いてしまいます
解決法などご教授頂けたら幸いです

507 :デフォルトの名無しさん:2010/05/31(月) 06:30:05
>>506
そのエラーメッセージが全てだと思うんだけど。
Cannot open load fileって書いてあるじゃない。
ちゃんとsite-lispにファイルはあるの?

あと、こういう場合に一番大事な、

* どう「入れ」たのか
* どのような「設定を軽く追加」したのか

といったことを全略されると、まともな回答貰いづらいよ。
ついでに言えば、多分スレ違い。

508 :デフォルトの名無しさん:2010/06/04(金) 17:52:11
全てのシンボルのリストを返す関数ってなんだっけ?

509 :デフォルトの名無しさん:2010/06/05(土) 15:35:50
そんな関数はない!
(lexical-let (x) (mapatoms (lambda (y) (push y x))) x)

510 :デフォルトの名無しさん:2010/06/05(土) 16:26:24
obarray 見ればいいんじゃない
(append obarray nil)


511 :デフォルトの名無しさん:2010/06/05(土) 16:56:24
>>510
そう、それどぁ。
elisp manual読んでぃて便利だと思ってとぉあ。
アリャガトネ

512 :デフォルトの名無しさん:2010/06/24(木) 21:31:27
auto-completeで日本語入力をしようと無謀なことやってる者です
内容がemacs自体とは関係なくなってきたような気がしたのでここで質問します。
2バイト文字のあとに1バイト文字が来たらそこを単語の区切りにしたいのですが、
どうしたらいいのでしょうか?
何をword-separating-categoriesに入れていいものかわかりません。
category-tableを使えばいいのはわかったのですが、
2バイト文字すべてを要素に持つようなcategory-tableの作り方がわかりません
どうにかヒントだけでも教えていただければと思います。


513 :デフォルトの名無しさん:2010/06/24(木) 21:50:42
M-x describe-categories
(re-search-forward "\\cj")

514 :デフォルトの名無しさん:2010/06/24(木) 22:26:08
あ、
(add-to-list 'word-separating-categories (cons ?j ?a))
でよかったのか。
ありがとうございます。

が、駄目orz

auto-completeはsyntaxがwordの文字が並んでるとすべてcompletionの餌にするのかー、、、
どこでその処理やってるのかわかんない…
全角のあとに半角が着たら半角だけ餌にしたいんだけどなー

もうちょっとがんばってみます。
>>513
なんというか申し訳なかったです
ありがとうございました

515 :デフォルトの名無しさん:2010/07/05(月) 23:16:10
LISPの仏様こと竹内育男が参加するイベント。

--
国産LISPマシンELISの設計者である、JAIST副学長日比野先生が、この夏、ELISの復活祭を企画されています。
復活祭には、竹内先生をはじめ、TAO/ELISに関わった方々に多数ご講演いただきます。
会場が石川県とちょっと遠いですが、小旅行気分で、ぜひぜひ多くのLISPファンのみなさまにご参加いただきたいと思います。(yshigeru)

日時:8/7(土)〜8/9(月)
場所:JAIST(石川県美濃市)
詳細と参加申し込みは、ELIS復活祭ページをご参照下さい

http://www.jaist.ac.jp/elis-revival/home.html


516 :デフォルトの名無しさん:2010/07/05(月) 23:59:54
>>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はきちんと動作しています



518 :デフォルトの名無しさん:2010/07/06(火) 19:53:09
>>516
skkも考えたんですが、そもそもこれ作ろうと思った発端は、
入力方式の切換えが面倒だった事なのですよ。
須く日本語入力ソフトは切換えが必要なので、
どうにか良い方法はないかと思って辿り着いたのがauto-completeなんです。
自動的に候補が出る形です。

取り敢えず一応完成させました。
入力方式の切換えが必要無いのは便利ですね。
日本語と英語の入り乱れたリストとか
テンプレートがあってそれを編集するような場合は使える気がします。

あと、skk だと日本語と英語で配列が違う場合設定が面倒だっていうのもあります。
今打っているのもそれなのですが、これなら配列が違う方が良いというか、むしろ同じだと駄目というか。

519 :デフォルトの名無しさん:2010/07/07(水) 00:08:38
>>517
re-search-forwardの第一引数にnilが渡ってるのが原因だと思う。
想像の通り、sentence-endがnilだから。本来、正規表現を文字列で渡す所。

(wrong-type-argument stringp nil)
(間違った型の引数 文字列かどうかを判別する関数 nil)

って意味。その下にずらずら出てるのは、バックトレース。
どこから呼ばれたコードがエラーになったのか、それで判断できる。
下に行くほど上位の関数。forward-sentence1とかも出てるでしょ?

520 :デフォルトの名無しさん:2010/07/07(水) 00:39:47
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.

521 :デフォルトの名無しさん:2010/07/07(水) 00:48:24
Emacsのソースコードのtarballの中に入ってるemacs-lisp-introでは
ちゃんと反映されているようなので↓は取り消します。
> Emacs Lisp プログラミング入門のその部分が変化に追いついてないみたい。

なんかおかしいなと思ったらお使いのEmacsのバージョンにあったものを
参照してくださいってことで。

522 :デフォルトの名無しさん:2010/07/07(水) 20:31:34
skk のオンデマンドで再帰的な辞書登録をなんで他のIMEでも採用しないのか不思議でならん。
特に Google IME・・・

523 :517:2010/07/07(水) 20:58:59
(sentence-end)に変更したところ無事動かすことが出来ました。
ちゃんとヘルプ読んでるつもりだったんですが全然できてなかったみたいで・・・
今後はちゃんと読みまくるよう頑張って先に進んでいきます。

レスくださった方々ありがとうございました



524 :名無しさん@そうだ選挙に行こう:2010/07/11(日) 02:17:01
http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs21&node=Killing

kill-read-only-ok がnilの場合はキルできないと書いてあるはずなんだが
変数がどうあれC-kで行コピーができるような気がするんだが…

俺の解釈が間違ってるのか?

525 :名無しさん@そうだ選挙に行こう:2010/07/11(日) 04:38:33
エラーが出るかどうか

526 :名無しさん@そうだ選挙に行こう:2010/07/11(日) 23:05:07
>>525
つまりコピーできるのは間違ってないのね…

527 :デフォルトの名無しさん:2010/09/13(月) 23:29:26
Emacs Lisp覚えたいんだけど、参考にするには何がいい?

528 :デフォルトの名無しさん:2010/09/14(火) 07:19:59
他人の.emacs

529 :デフォルトの名無しさん:2010/09/14(火) 08:57:42
>>527
SuoerASCIIの連載
ttp://www.asahi-net.or.jp/~dp8t-asm/elisp/
ttp://e-arrows.sakura.ne.jp/2010/02/vim-to-emacs.html
ttp://www.google.co.jp/search?hl=ja&q=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 を導入すると、一部(「オプション」→「行の折り返し」等)文字化けします。

どうすれば、文字化けしないように出来ますか?

532 :デフォルトの名無しさん:2010/10/09(土) 06:16:18
max-specpdl-sizeとmax-lisp-eval-depthが数値が足りないと時々文句を言われるんだが
数値を増やす以外で上手い解決策ってないのかね。

533 :デフォルトの名無しさん:2010/10/09(土) 14:59:13
文句がでるところをループに書き換える

534 :デフォルトの名無しさん:2010/10/11(月) 02:44:25
>>533
文句を言われるのはdefadviceなんでそれを使うなってことになるのか。。

535 :Zeno ◆5nZQbNmQPs :2010/10/16(土) 17:02:04

>>534
やり方はいろいろあるが、

(setq debug-on-quit t)

にして、問題のsexpを実行しろ。
途中で \C-g を押せば問題箇所までのトレースができる。

それでわからなければdefadvice中で使用されるであろう自分で関数を調べろ。
debug-on-error で関数本体をデバッグすることも可能だ。


536 :デフォルトの名無しさん:2010/10/21(木) 09:33:40
\C-x dの代替に開いてるdired探すの書いてます。
見つからなかったとき普通のdiredコマンド開きたいけど(dired nil)だとミニバッファで止まらない。
インタラクティブなコマンドはどう呼べばいいのでしょう?

537 :デフォルトの名無しさん:2010/10/21(木) 10:05:30
>>536
あ、自分で書いた日本語が答えになってたw
インタラクティブに呼ぶつう関数みつけた。落ち着け、おれwww

538 :デフォルトの名無しさん:2010/11/12(金) 12:10:30
自然数をリスト化する関数はありますか?
例えば (foo 12345) => '(1 2 3 4 5) みたいな。

539 :デフォルトの名無しさん:2010/11/12(金) 18:24:58
知らないけど、
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を使わないので変なところあったら教えてほしかったりする。

540 :デフォルトの名無しさん:2010/11/12(金) 18:39:26
負数は考えなくていいなら
ELISP> (mapcar (lambda (c) (- c 48)) (string-to-list (format "%d" 12345)))
(1 2 3 4 5)

541 :デフォルトの名無しさん:2010/11/12(金) 18:45:12
回りくどいけど

(mapcar #'(lambda (c)
(string-to-number (char-to-string c)))
(append (format "%d" 12345) nil))
;=> (1 2 3 4 5)

542 :デフォルトの名無しさん:2010/11/12(金) 18:52:01
スピードで見ると
>>539 <= >>540 < >>541
← 速い 遅い →
でした。ありがとうございました。

543 :デフォルトの名無しさん:2010/11/12(金) 19:16:40
mapcarは直接stringをとれるよ。
(mapcar (lambda (c) (- c ?0)) (number-to-string 12345))
=> (1 2 3 4 5)


544 :デフォルトの名無しさん:2010/11/12(金) 19:33:18
なるほどw
(mapcar #'identity "hello")
=> (104 101 108 108 111)

545 :デフォルトの名無しさん:2010/11/12(金) 20:26:53
>>539の弱点発見。0 → nil。バナナは自然数に……。


546 :デフォルトの名無しさん:2010/11/16(火) 00:00:50
>mapcarは直接stringをとれるよ。
スレチ気味だがCommon Lispではmapcar関数はリストのみ扱えるはず
文字列を引数に与えるのはおススメできない(互換性的な意味で)


547 :デフォルトの名無しさん:2010/11/16(火) 10:08:39
じゃあ互換性的な意味でCommon Lispでもlexical scopeを前提としたプログラムは書くのはおススメできないね。
...馬鹿馬鹿しい。

548 :デフォルトの名無しさん:2010/11/16(火) 14:58:23
型のきびしい処理系にもってけばはじかれるだけだから、
注意はした方がいいけど、使わない方がいいとまでは言えないかな。

Emacs Lispとかじゃなくてもっと新しい言語なら「将来使えなくなるかも」みたいな
見方もあるかもしれないけどw

549 :デフォルトの名無しさん:2010/11/22(月) 20:30:59













550 :デフォルトの名無しさん:2010/11/23(火) 07:19:49
(let ((element (list 1 2)))
(add-to-list 'element 3))
;;=> (3 . 3)w

 ◇       ミ ◇
   ◇◇   / ̄|  ◇◇
 ◇◇ \  |__| ◇◇
    彡 O(,,゚Д゚) /
       (  P `O
      /彡#_|ミ\
       </」_|凵_ゝ

【ラッキーAA】
このAAを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です

551 :デフォルトの名無しさん:2010/12/17(金) 23:45:59
>>550

これ、解決策が思いつかないw
仮引数に使われる記号が隠されちゃうっていう

552 :デフォルトの名無しさん:2010/12/18(土) 02:06:05
環境そのものを引き渡せない限りきちんとした解決は無理でしょう。
本来マクロで書くべきものだと思う。

553 :デフォルトの名無しさん:2010/12/19(日) 03:27:54
マクロでもできなくない?
引数を一度しか評価しないという点を守ると……

554 :デフォルトの名無しさん:2010/12/19(日) 03:38:44
Cのプリプロセッサじゃあるまいし

555 :デフォルトの名無しさん:2010/12/19(日) 11:41:18
そうか、defmacroとmake-symbolで解決できるのか……

556 :デフォルトの名無しさん:2010/12/20(月) 12:35:06
emacs初心者でpythonを勉強しようと思っているのですが、windowsのemacs上でipythonを実行する方法はないでしょうか?

557 :デフォルトの名無しさん:2010/12/20(月) 12:57:00
あります。

558 :デフォルトの名無しさん:2010/12/20(月) 13:41:38
ご教授お願いします

559 :デフォルトの名無しさん:2010/12/20(月) 13:45:46
http://ipython.scipy.org/dist/ipython.el

560 :デフォルトの名無しさん:2010/12/20(月) 14:08:21
C:\Python26\Scriptsにipythonがあるのですが

(setq ipython-command "/some-path/ipython")
(require 'ipython)

のsome-pathはどのように指定すればいいのでしょうか?

561 :デフォルトの名無しさん:2010/12/20(月) 14:37:14
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

と出てうまくいきません...

563 :デフォルトの名無しさん:2010/12/20(月) 15:26:22
"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シェルが起動しました...


565 :デフォルトの名無しさん:2010/12/20(月) 15:53:33
そうか。

566 :デフォルトの名無しさん:2010/12/20(月) 16:35:11
おめでとぉ

567 :デフォルトの名無しさん:2010/12/20(月) 19:08:54
全てのchildrenに

568 :デフォルトの名無しさん:2010/12/20(月) 21:07:23
>>567
死を
# kill -9 1


569 :デフォルトの名無しさん:2011/01/07(金) 10:37:11
Emacs Lisp本に向けてアンケートに御協力お願いします!
http://d.hatena.ne.jp/rubikitch/20110106/elispenq

だってサ

570 :デフォルトの名無しさん:2011/01/13(木) 01:25:32
Emacsの歴史について知りたい
この年にこういうことがあったとか

571 :デフォルトの名無しさん:2011/01/13(木) 02:13:24
20年くらい何も起きてないような気がする

572 :デフォルトの名無しさん:2011/01/13(木) 09:08:15
2年に1度はメジャーバージョンアップしてるだろ

573 :デフォルトの名無しさん:2011/01/13(木) 11:25:21
>>570
一番の思い出は uucp 経由で fj.sources に、Emacs 日本語化パッチα版が流れたときだったな。
まだまだHDDは高価で、テープもぽつぽつ残っていた。

その次が Emacs 20.2 から 20.3 のバージョンアップ。
(length "漢") が、3から1になった。あれで劇的にプログラムが作り易くなった。

あのとき議論(flame)の中心だった Erik Naggum 氏もとっくに鬼籍に入られて...

574 :デフォルトの名無しさん:2011/01/13(木) 12:43:31
Mule の統合とかは

575 :デフォルトの名無しさん:2011/01/13(木) 15:52:26
>>573
テープ回覧させてもらった覚えがある


576 :デフォルトの名無しさん:2011/01/13(木) 18:40:25
NEmacsからMuleに

577 :デフォルトの名無しさん:2011/01/14(金) 03:16:02
MuleからEmacsに

578 :デフォルトの名無しさん:2011/01/15(土) 02:54:04
>>573
uucpすらできない貧乏機関は FSF に頼めばEmacsのソースコードを実費で
磁気テープに入れて送ってもらえた。

そういう時代だった。

579 :デフォルトの名無しさん:2011/01/15(土) 21:10:29
まあuuxですけどね。


580 :デフォルトの名無しさん:2011/01/15(土) 22:05:29
>>578 あんたら、じじいの集団かよ
とか、いいながらfjの回覧テープのコピーが会社の倉庫に残ってるような記憶が…


581 :デフォルトの名無しさん:2011/01/15(土) 23:36:56
資材管理室^H^H^H^H^Hリストラ待機室で
代々「大切に保管汁」と申し送りされてるのな

582 :デフォルトの名無しさん:2011/01/16(日) 13:40:35
フロッピーで回覧してたなあ

583 :デフォルトの名無しさん:2011/01/16(日) 14:23:54
>>582 FD何枚になるった? <fj回覧テープ


584 :デフォルトの名無しさん:2011/01/17(月) 03:20:01
50枚くらい

585 :デフォルトの名無しさん:2011/02/01(火) 05:38:56
マウススクロールでの移動幅を変える設定ってありますか?
ぐぐったら上の方に出てくるのはあるんだけどなんか高々移動幅変えるのに
あんな大層な設定がいるのか疑問に思い質問しました。もし他に
簡潔な設定がありましたら教えていただきたいです。

586 :デフォルトの名無しさん:2011/02/02(水) 01:02:03
>>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)))


587 :デフォルトの名無しさん:2011/02/14(月) 12:23:35
こんにちは。ここでよいか分かりませんが、質問させてください。
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にアップデートしたところ、問題なく検索できました。
ご迷惑おかけいたしました。

589 :デフォルトの名無しさん:2011/02/24(木) 04:16:35.85
elisp って emacs だけかと思ったら guile にも実装されてるのね
guile をインスコするより emacs をインスコする方が簡単なのがアレだけど・・・

590 :デフォルトの名無しさん:2011/04/18(月) 00:42:13.95
elisp の勉強に↓これを読んでみたけど面白かった。

http://dantorop.info/project/emacs-animation/

elisp で文字ベースの簡単なアニメーションを実装するという内容で、
初心者レベルの人に良いかも。

591 :デフォルトの名無しさん:2011/04/21(木) 11:29:01.15
concurrent.elリリース - 技術日記@kiwanami
http://d.hatena.ne.jp/kiwanami/20110420/1303319508

新機軸だな。どんどん盛り上げるんだ。


592 :デフォルトの名無しさん:2011/04/30(土) 09:08:17.96
質問です。文字列の中に特定の文字が何個あるかを数える関数ありますか?



(foo "abaca" "a")
=> 3

みたいな。m/(_ _)\m

593 :デフォルトの名無しさん:2011/04/30(土) 09:39:12.00
バッファ(リージョン)中の文字の数を数えるにはhow-manyがあるけど、
ソースを見ると簡単に数える関数は無いみたいだね。

594 :デフォルトの名無しさん:2011/04/30(土) 09:43:18.59
(require 'cl) して count じゃダメ?

595 :デフォルトの名無しさん:2011/04/30(土) 12:39:36.14
>>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


596 :デフォルトの名無しさん:2011/05/04(水) 00:20:16.20
ふむ

597 :デフォルトの名無しさん:2011/05/04(水) 08:07:25.26
みなさん、あざっす。count で完璧です。

(count ?a "abaca")
=> 3

598 :デフォルトの名無しさん:2011/05/05(木) 13:48:55.61
        ∩___∩                     ∩___∩
    ♪   | ノ ⌒  ⌒ヽハッ    __ _,, -ー ,,    ハッ   / ⌒  ⌒ 丶|
        /  (●)  (●)  ハッ   (/   "つ`..,:  ハッ (●)  (●) 丶
       |     ( _●_) ミ    :/       :::::i:.   ミ (_●_ )    |
 ___ 彡     |∪| ミ    :i        ─::!,,    ミ、 |∪|    、彡____
 ヽ___       ヽノ、`\     ヽ.....:::::::::  ::::ij(_::●   / ヽノ     ___/
       /       /ヽ <   r "     .r ミノ~.    〉 /\    丶
      /      /    ̄   :|::|    ::::| :::i ゚。     ̄♪   \    丶
     /     /    ♪    :|::|    ::::| :::|:            \   丶
     (_ ⌒丶...        :` |    ::::| :::|_:           /⌒_)
      | /ヽ }.          :.,'    ::(  :::}            } ヘ /
        し  )).         ::i      `.-‐"             J´((
          ソ  トントン                             ソ  トントン

599 :デフォルトの名無しさん:2011/06/07(火) 22:36:45.00
ほしゅ


600 :デフォルトの名無しさん:2011/06/08(水) 01:26:54.90
git の update 来てターーーー!!
これで bzr の遅さに悩まされずに済む

https://github.com/emacsmirror/emacs

601 :デフォルトの名無しさん:2011/06/17(金) 09:28:23.62
リージョンの末尾判定はどう書けばよいですか?
リージョンの各行を引数としたコマンドを実行するプログラムを書いたんですが
動的に行数がかわるため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

602 :デフォルトの名無しさん:2011/06/17(金) 09:48:23.44
自己レス、変なやり方かもしれない
(= (point) (progn (forward-char) (point)))

603 :デフォルトの名無しさん:2011/06/17(金) 10:16:31.90
>>601
eolp の代わりに、eobp を使ったらどう?

604 :デフォルトの名無しさん:2011/06/17(金) 11:22:54.98
せっかく narrow-to-region してるんだしねえ

605 :デフォルトの名無しさん:2011/06/18(土) 02:36:28.49
>>603
ありがとう、後で試してみます

ところで、全然関係ないけど、Ctrl+hをBSに割り当ててたせいで
C-h a/C-h v/C-h f等便利なキーが使えなかったことに最近気づきました
Webによく落ちてる色んな.emacsに長らく騙されてきた気がする

606 :デフォルトの名無しさん:2011/06/18(土) 03:47:54.53
<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 を設定してる。

608 :デフォルトの名無しさん:2011/06/19(日) 01:34:27.81
>>605
DeleteとC-hを交換したら、元々C-hと打ちたい時にはDeleteを打てばいい。

609 :デフォルトの名無しさん:2011/06/19(日) 13:03:07.10
>>607
eobpで動きました、ありがとう
設定参考になります。
皆それぞれのやり方ですね

610 :デフォルトの名無しさん:2011/06/19(日) 22:58:16.08
keyboard-translateだと一発で全交換になる。

611 :デフォルトの名無しさん:2011/06/19(日) 23:16:56.09
>>605
ネットはそこまで闇じゃなくて、目を開けば色々あると思うけどw、
初期段階でうっかり「本来の情報の流れ」からはぐれるっていうのはありがちだと思う。

ttp://kamuy.c.u-tokyo.ac.jp/~tnakae/c/emacs.html
> この時ヘルプが使えなくなるので、C-x h でヘルプを開くように変更するとかしておく。

612 :デフォルトの名無しさん:2011/06/20(月) 01:43:46.71
>>605
伝統的に多くの人がやってる割り当てなのは事実。

Windows だと f1 が C-h のかわりに使えるけど、
これって他の環境では違ったりすんの?


613 :デフォルトの名無しさん:2011/06/20(月) 02:04:26.93
Mac OS X でも f1 は C-h と一緒だった
初めて知った...

614 :デフォルトの名無しさん:2011/06/20(月) 02:53:15.09
>>612
古いマニュアルを漁ってみた。19.28から19.30の間に説明が加わっていた。

ttp://www.ps.uni-saarland.de/courses/info-i/emacs/emacs_11.html
> To cancel, type C-g.
ttp://www.math.utah.edu/docs/info/emacs_11.html
> To cancel, type C-g. The function key F1 is equivalent to C-h.


615 :デフォルトの名無しさん:2011/06/20(月) 03:08:22.06
情報が中途半端だった……。19.30からの標準設定、でいいみたい。

Emacs 19.28 and 19.29 Antinews
ttp://www.chemie.fu-berlin.de/chemnet/use/info/emacs/emacs_37.html
> # F1 is no longer an alias for the Help key; you must actually type C-h if you want help.

616 :デフォルトの名無しさん:2011/06/20(月) 10:55:19.13
bobcatは相当前からあるし、
同様の設定FAQはずっと前からある。


617 :デフォルトの名無しさん:2011/06/20(月) 20:25:22.91
etc/ONEWSには19.29での変更点として載ってるな
文書化の微妙な食い違い

618 :デフォルトの名無しさん:2011/06/21(火) 11:32:12.03
19.28と19.29のAntinewsだから、
19.28→19.30の変更が(逆向きの表現で)書かれてるんでしょ。
だから食い違いはない。Antinewsの方が大雑把なだけ。

619 :デフォルトの名無しさん:2011/06/21(火) 20:24:05.49
19.28と19.29の区別が不十分なのが微妙ってこと。
アウトかと言えばアウトかと。

620 :デフォルトの名無しさん:2011/06/21(火) 20:27:50.42
食い違いじゃないね

621 :デフォルトの名無しさん:2011/07/01(金) 21:44:45.65
Ctrl+;を自作関数起動用の2ストロークキーに割り当てようとしたらば
単に;が入力されるだけだったでござる

622 :デフォルトの名無しさん:2011/07/01(金) 22:16:05.35
>>621
ターミナルでC-,やC-.に割り当てたい - (ひ)メモ
ttp://d.hatena.ne.jp/hirose31/20040219/1160403206

623 :デフォルトの名無しさん:2011/07/08(金) 14:31:58.68
Emacs 19.28 から 19.29 は
メジャーバージョンアップなみに変更あったはず
19.29 から 19.30 はそれほどではないはず
なので 19.28->19.29 の差分だろうという感じはする

624 :デフォルトの名無しさん:2011/07/17(日) 23:57:28.33
これカッチョええ!

https://github.com/nicferrier/elnode
http://emacswiki.org/wiki/Elnode

625 :デフォルトの名無しさん:2011/08/11(木) 17:57:17.39
質問です。
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 が出てこないようにしたらいけました。
ありがとうございました。

628 :デフォルトの名無しさん:2011/08/15(月) 03:21:35.56
labelsと (require 'cl)について教えてください。

1. Emacs Lispにはlabels相当の命令はありますか?
2. (require 'cl)をちょっとぐぐったところ Emacs 付属lispには使うな的な事が書いてあって賛否両論で云々〜
  とあったのですが、これはなんででしょう?

以上よろしくです。


629 :デフォルトの名無しさん:2011/08/15(月) 04:12:40.77
>>628
1. あります。
2. ググった先で喧々諤々やってたでしょうに。

簡単に説明すると、Emacs LispはCのように、名前空間がひとつしかないのです。
そのため、ライブラリの関数などには接頭辞を付けるのがマナーになっています。
(fooというライブラリなら、foo-funcみたいな名前を付けます)

ですが、clライブラリではCommon Lispの関数やマクロと名前を合わせるため、
その接頭辞を付けていません。そのため、(require 'cl)でライブラリを読み込むと、
一般的な名前のマクロや関数が大量に定義され、それらの名前が使われることで、
プログラマが好きに付けられる名前が減ってしまいます。これを許せない人と、
許容して便利さを採る人がいて、議論の争点になります。

こういう構図です。理解できなかったら勉強するとじきに分かるようになると思います。
自分で書いたプログラムを配布するのでもなければ、気にすることはありません。

630 :デフォルトの名無しさん:2011/08/15(月) 04:18:01.74
補足。正確に言うと、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を使わない別の方法が標準で提供されてるのかな?とおもってますた。



632 :デフォルトの名無しさん:2011/08/15(月) 09:21:43.98
629じゃないけど横から補足しておくと、clのうちマクロで提供されている部分は
バイトコンパイルすると実行時にはclを必要としない(ものが多い)ので、
そういうのは使っても問題ない。labelsもその一つ。

それを前提とした使い方の場合は
(eval-when-compile (require 'cl))
とする。こういう使い方はEmacs標準のelispでも多用されている。

633 :デフォルトの名無しさん:2011/08/21(日) 15:08:17.60
ポイント位置が最上行か最下行かを判定するのはどうすればいいでしょうか?


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"))
のようにしてみたのですが、条件の判別がうまくいかないようです。
どうしたらうまくいきますか?
お願いします。

636 :デフォルトの名無しさん:2011/09/02(金) 03:43:53.94
'(:eval (if buffer-file-name "a" "b"))
なんかこうこんな感じだったはず
確かめてないけど

637 :デフォルトの名無しさん:2011/09/02(金) 13:09:06.78
>>636
ありがとうございます。
助かりました。

638 :デフォルトの名無しさん:2011/09/05(月) 01:50:01.80
前に、市の図書館の新刊にこの本あったわ。最近新装版でたのか
この本は自腹で買わないと身に入らないだろw

639 :デフォルトの名無しさん:2011/09/05(月) 01:51:01.39
いやこの本とか意味不明だなw広瀬本

640 :デフォルトの名無しさん:2011/09/05(月) 19:17:46.57
そういや出てたな。買わなかったけど。

641 :デフォルトの名無しさん:2011/09/24(土) 12:19:32.59
タブ幅が tab-width の2倍になってしまいます。

(setq tab-width 8) とするとタブ幅が半角16文字分になり、
これを8文字分にするには (setq tab-width 4) としなければなりません。
何故でしょうか?

よろしくお願いします。

642 :デフォルトの名無しさん:2011/09/25(日) 03:04:50.10
>>641
とりあえず C-h v (describe-variableだっけ?) あたりで、ちゃんと8になってるか見てみれば?

643 :デフォルトの名無しさん:2011/09/25(日) 20:26:08.46
>>642
ありがとうございます。
確認してみましたが、設定した通りになっているようです。
しかし実際のタブ幅はその値の2倍になってしまっています。

644 :デフォルトの名無しさん:2011/09/25(日) 23:38:16.25
フォントによってそうなるような気が。

645 :デフォルトの名無しさん:2011/09/26(月) 01:51:59.22
>>641
たぶんこれと同じ現象では。

■Emacs23のフレーム幅が変、■Emacs23のフレーム幅が直った
http://garakuta.homelinux.org/~nosuke/diary/diary.html?y=2008&m=10&d=15&n=1

646 :デフォルトの名無しさん:2011/10/07(金) 15:26:12.43
(eq 'abc 'abc)は何故tで、
(eq "abc" "abc")は何故nilなんでしょうか。

647 :SCHEME餃子 ◆8X2XSCHEME :2011/10/07(金) 20:12:16.62
eq での比較は同値性ではなく同一性を判定する。 つまり、同じ値であってもそれそのものでなれば nil になる。
シンボルは登場と同時にシンボルテーブルに登録 (intern) されるので字面が同じシンボルは常に同一と判定される。

648 :デフォルトの名無しさん:2011/10/07(金) 23:38:19.22
>>647
とてもわかりやすい説明ありがとうございます。

649 :名無しさん@お腹いっぱい。:2011/10/10(月) 09:48:28.47
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)


650 :デフォルトの名無しさん:2011/10/21(金) 05:00:14.95
インタプリタはないの?

651 :デフォルトの名無しさん:2011/10/21(金) 11:59:34.58
M-x ielm

652 :デフォルトの名無しさん:2011/10/29(土) 12:40:09.17
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 博士はタイムシェアリングによるコンピューターの効率的な
利用というコンセプトをすでに発表しており、このコンセプトはその後の分散処理やクラウドへと
発展するコンピューティング技術の基礎となった。

653 :デフォルトの名無しさん:2011/10/29(土) 12:40:35.53
スタンフォード大学名誉教授で上級科学研究員の Les Earnest 氏は次のように語っている。
「多くの人々が、タイムシェアリングがコンピューターを使う賢い方法だということはわかって
いた。だが、どうすれば実現できるかについては、誰もわからなかった。John 以外は誰も」

氏の告別式は、近く執り行われる。
▽記事引用元 japan.internet.com
http://japan.internet.com/webtech/20111026/2.html
▽画像 John McCarthy 博士(Stanford Engineering)
http://japan.internet.com/img/20111026/1319617220.jpg
▽博士のホームページ
http://www-formal.stanford.edu/jmc/index.html

654 :デフォルトの名無しさん:2011/10/29(土) 12:41:55.61
http://toki.2ch.net/test/read.cgi/scienceplus/1319679294/

655 :デフォルトの名無しさん:2011/11/15(火) 21:19:57.61
書籍案内:Emacs Lispテクニックバイブル|gihyo.jp … 技術評論社
http://gihyo.jp/book/2011/978-4-7741-4897-7

656 :デフォルトの名無しさん:2011/11/17(木) 01:25:33.82
今さら感があるけど、Emacs Lispで書かれたライブラリとかプログラムのことを
単に「Emacs Lisp」と呼ぶ習慣はそろそろみんなに考え直してもらいたい

657 :デフォルトの名無しさん:2011/11/17(木) 02:05:26.45
>>656
なんて言えばいいの?

658 :デフォルトの名無しさん:2011/11/17(木) 07:44:35.83
> poj-mode.el is an emacs lisp for POJ

小文字で書けばいいのかと問いたい

659 :デフォルトの名無しさん:2011/11/18(金) 01:25:37.08
>>656
「elispアプリ」とか「elispライブラリ」とか言えっての?


660 :デフォルトの名無しさん:2011/11/18(金) 01:43:40.58
公式な呼び名は無いの?

概念的に近いのはブラウザの拡張とかかなぁ。
歴史的経緯を無視するならエクステンションとかプラグインとか呼ぶのが妥当だと思う。
使われている言語が Emacs Lisp なのは、
たまたま Emacs がそういうものだという実装に立ち入る話なので、
ユーザーに見せるべき筋合いのもではない。

661 :デフォルトの名無しさん:2011/11/18(金) 02:28:09.29
Emacsスクリプトでよくね?

662 :デフォルトの名無しさん:2011/11/18(金) 03:01:18.58
マニュアルを読みなよ

663 :デフォルトの名無しさん:2011/11/18(金) 04:49:59.57
>>660
> 使われている言語が Emacs Lisp なのは、
> たまたま Emacs がそういうものだという実装に立ち入る話なので、
> ユーザーに見せるべき筋合いのもではない。
 むしろユーザーが容易にみれる、弄れる、スクリプトを組めるという仕様で人をスクリーニング
しているのがemacsの良さなんじゃないの。Firefoxのエクステンション的使い方で敷居は低い
けど、emacs lispの書き方を覚えたら自分の使いやすいように弄りたいという野心がユーザーの
大多数の中にあるんじゃないかな。
 自分はそういう野心を持ってFirefoxを使っていないなあ。

664 :デフォルトの名無しさん:2011/11/18(金) 20:57:58.95
ブラウザだとgreasemonkeyが近いな
お手軽で重宝してる

665 :デフォルトの名無しさん:2011/11/18(金) 21:19:58.90
>>661
一票。

666 :デフォルトの名無しさん:2011/11/18(金) 22:43:03.03
スクリプトには違和感ありまくり
elispプログラムかパッケージで

667 :デフォルトの名無しさん:2011/11/18(金) 22:53:56.79
マニュアルでは大体libraryかpackage(かfile)だけど、別に厳密な定義はない
明確な機構で管理されてないこととも多少関係あるかも

668 :デフォルトの名無しさん:2011/11/18(金) 23:01:29.59
xyzzyというEmacs風エディタの界隈で「拡張lisp」という言葉を見て
ちょっと混乱した

669 :デフォルトの名無しさん:2011/11/18(金) 23:17:32.81
magit という一個の package があったとして、
その中核となるファイル群の集合を指して library
その集合の中の .el ファイルそれぞれが program
とかそんな感じでは

670 :デフォルトの名無しさん:2011/11/20(日) 03:07:27.20
locate-libraryは一つのファイルをライブラリって表現してるってことだよな

671 :デフォルトの名無しさん:2011/11/21(月) 02:34:06.42
APEL の README だと
Emacs Library や モジュール や ユーティリティー といった言葉が使われてる。
MULE プログラム や CCL プログラム って言葉も出てくる。

672 :デフォルトの名無しさん:2011/11/21(月) 04:04:27.57
マクロでいいじゃん

673 :デフォルトの名無しさん:2011/11/21(月) 15:19:18.49
>>672
defmacro以外で書いてある部分はどう呼ぶんだ?


674 :デフォルトの名無しさん:2011/11/22(火) 02:01:47.78
それもマクロでいいじゃん

675 :デフォルトの名無しさん:2011/11/22(火) 02:16:46.62
よくねえよwww

676 :デフォルトの名無しさん:2011/11/22(火) 19:38:59.29
Emacs lispの他にマクロが装備されてるじゃん

677 :デフォルトの名無しさん:2011/11/23(水) 00:02:21.53
elispはemacs自体を作るための言語だしなw

678 :デフォルトの名無しさん:2011/11/23(水) 08:26:25.14
>>662
正解

EmacsはelispとCで出来てるので、Cの用語と調和できる表現が理想かと。
なのでマクロは…

679 :デフォルトの名無しさん:2011/11/23(水) 08:38:22.22
>>672 defmacro で定義するマクロはなんて呼べば良いの?


680 :デフォルトの名無しさん:2011/11/23(水) 11:49:43.28
Editor MACroS

681 :デフォルトの名無しさん:2011/11/23(水) 21:32:52.18
>>680 Editing MACroS は TECO のマクロパッケージだ



682 :デフォルトの名無しさん:2011/11/23(水) 23:02:07.70
emacsがたまたまlispで云々とか笑うなw
gosmacsとmock lispに切れたlisperのストールマンが
作った最強のlisp環境兼エディタなのにw

683 :デフォルトの名無しさん:2011/11/23(水) 23:05:57.06
>>682
Unipressの売り物になったから切れただけだろ


684 :デフォルトの名無しさん:2011/11/25(金) 17:16:00.68
そういやそうだったかも
でもMockじゃなくて
ちゃんとしたlisp使いたくて
弄ろうとしたんじゃなかたっけ
ある意味gosmacsはGNUの生みの親だなw

685 :デフォルトの名無しさん:2011/12/04(日) 10:14:50.83
最初gosmacsベースでGNU Emacs作っていて、
そんときは別に切れてない。
そのあとGoslingがgosmacsの権利売ったから切れた。

686 :デフォルトの名無しさん:2011/12/11(日) 00:00:16.59
Emacsのアプリだからeアプリ

これでいいよ.

iアプリと似てるから世間で流行るかも知れん.
e電と同じく廃れるかも知れんけど.


687 :デフォルトの名無しさん:2011/12/12(月) 02:45:01.23
だいたいeはすぐ終わるな
なぜかiは長生きする

688 :デフォルトの名無しさん:2011/12/12(月) 03:05:15.28
アンビバレンツなIE

185 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.07 2022/05/23 Walang Kapalit ★
FOX ★