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

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

【叩かれて】Emacs Lisp道場【強くなれ】

1 :おっす:03/09/18 19:29
なんとなくEmacs 触り始めて、なんとなくelispにも手を出して
しまったアナタ。

なんとなく書いてしまったコードをココに書き込んで叩かれましょう。
タタカレテツヨクナレ。

年季の入った玄人衆は、もしアドバイスできたらお願いします。
いや、叩きついでにでも。

とりあえず入門書は
ttp://www.netfort.gr.jp/~kiyoka/emacs_setq/emacs_setq.html
ttp://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp.html

リファレンスマニュアルは(ちと古い)
ttp://www.fan.gr.jp/~ring/doc/elisp-manual/elisp.html

とか、新しいのは(でも英語)
ttp://www.delorie.com/gnu/docs/elisp-manual-21/elisp.html

ではひとつ、コード中心の熱いバトルをよろぴく。


2 :名無しさん@お腹いっぱい。:03/09/18 19:35
Emacs part9
http://pc.2ch.net/test/read.cgi/unix/1058495083/
Lisp@UNIX版
http://pc.2ch.net/test/read.cgi/unix/1019926525/
Emacs Lisp
http://pc2.2ch.net/test/read.cgi/tech/1004551074/

3 :名無しさん@お腹いっぱい。:03/09/18 19:38
自慢の.emacsを貼り付けよう
http://pc.2ch.net/test/read.cgi/unix/1001393679/

4 :名無しさん@お腹いっぱい。:03/09/18 19:57
>>3
これって倉庫行ってるっぽくないすか?


5 :名無しさん@お腹いっぱい。:03/09/18 20:01
>>4
倉庫入ってるからこそ、
リンクが貼ってあると有難い。
しかし良スレになるかな? 自慢スレは後半失速してたからな。

6 :名無しさん@お腹いっぱい。:03/09/18 20:20
入門書は
ttp://www.gentei.org/~yuuji/elisp/
がおすすめ


7 :名無しさん@お腹いっぱい。:03/09/18 20:30
>>6
いきなりメジャーモードから作り始めるやつだね。
おもしろそ。

8 :名無しさん@お腹いっぱい。:03/09/18 20:53

ウッス!
自慢スレの括弧の対を入れるのを参考に just-one-spaceを改造してみました。
作る前から明白でしたけど、あきれるほどに実用度ゼロでした・・・_| ̄|○

(defvar my-just-one-space-state nil)
(defun my-just-one-space ()
(interactive)
(if (and (eq last-command 'my-just-one-space) (null my-just-one-space-state))
(progn
(backward-delete-char 1)
(setq my-just-one-space-state t))
(progn
(just-one-space)
(setq my-just-one-space-state nil))))

(global-set-key "\M- " 'my-just-one-space)


9 :名無しさん@お腹いっぱい。:03/09/18 20:54
わたしゃ、「リスト遊び」を推すぞ。

10 :名無しさん@お腹いっぱい。:03/09/19 18:07
(setq completion-ignored-extensions
(cons ".class" completion-ignored-extensions))
(setq completion-ignored-extensions
(cons ".exe" completion-ignored-extensions))
(setq completion-ignored-extensions
(cons ".obj" completion-ignored-extensions))

これを1行にまとめたいのですが、どうすればいいですか?


11 :名無しさん@お腹いっぱい。:03/09/19 18:12
>>10
(setq completion-ignored-extensions (cons ".class" completion-ignored-extensions)) (setq completion-ignored-extensions (cons ".exe" completion-ignored-extensions)) (setq completion-ignored-extensions (cons ".obj" completion-ignored-extensions))

12 :名無しさん@お腹いっぱい。:03/09/19 18:33
ほしい答えはこれか?
(setq completion-ignored-extensions (append '(".class" ".exe" ".obj" completion-ignored-extensions)))
add-to-list も参照のこと。


13 :名無しさん@お腹いっぱい。:03/09/19 19:23
括弧位置がおかしくない?

(setq completion-ignored-extensions (append '(".class" ".exe" ".obj") completion-ignored-extensions))


14 :11:03/09/19 19:51
>>13
おぉ。ほんとだ。失敬失敬。

15 :名無しさん@お腹いっぱい。:03/09/19 19:51
(setq completion-ignored-extensions (append `(".class" ".exe" ".obj" ,@completion-ignored-extensions)))

16 :10:03/09/19 19:52
なるほど、こうやるんですね。
どうもありがとうございました。

17 :14=12:03/09/19 19:56
でした。(´・ω・`)ショボーン

18 :15:03/09/19 19:58
あー append はいらなかった。

19 :newbie:03/09/21 20:34
XHTMLだと原則終了タグも書かなきゃならないので、タグ書きがめ
んどう。そこで、ミニバッファでタグの要素を打ち込んでカーソ
ル位置にタグを挿入するかんたんなS式

;; insert-htmltag
(defun insert-htmltag (str)
"Insert a pair of HTML tags.
Insert a pair of HTML tags read from
mini buffer at the cursor point."
(interactive "sInput tag: ")
(let ((elm (car (split-string str))))
(if (stringp elm)
(progn (insert "<"str"></"elm">")
(forward-char (- (+ 3 (length elm))))))))

(setq html-helper-mode-hook
'(lambda ()
(define-key html-helper-mode-map "\C-ct" 'insert-htmltag)))

たとえば、ミニバッファで
div class="hoge" と入力すると
<div class="hoge"></div> とカレントバッファに挿入され、カー
ソルもタグのあいだに移動ずみです。

HTML-helper-mode のキーバインドを覚えきらないんで(^_^;)


20 :名無しさん@お腹いっぱい。:03/09/21 20:52
psgml とか。
投稿前に untabify するといいかも。

21 :名無しさん@お腹いっぱい。:03/09/21 21:12
>>19
yatex付属のyahtmlとか。

22 :名無しさん@お腹いっぱい。:03/09/22 00:40
今ならnxmlだな


23 :名無しさん@お腹いっぱい。:03/09/22 01:26
>>21
yahtml に XHTML 向けのモードとかあるんでつか?


24 :名無しさん@お腹いっぱい。:03/09/24 17:48
以前自慢スレで、存在するファイルのみを読み込む

(defadvice find-file (before existing-file activate compile)
"When interactive, find file existing files only."
(interactive "fFind file: \np"))

を書いた者です。
新規ファイルが作れないのが自分でも不便に思ってきたので、
簡単ですが新しいのを考えましたです。

(defun my-find-file (filename &optional wildcards)
(interactive "FFind file: \np")
(when (or (file-exists-p filename)
(y-or-n-p "Not exists. New file? "))
(find-file filename)))
(global-set-key "\C-x\C-f" 'my-find-file)

今度はいかがでしょうか?


25 :名無しさん@お腹いっぱい。:03/09/24 23:49
多くの Emacs 使いは何かする度に yes/no を聞かれるのを嫌う気がします。


26 :24:03/09/25 10:33
>>25
新規ファイルを開くのに、前置引数で与えるのとy-or-n-pで聞くのを迷ったん
ですが、y-or-n-p の方が自然かなと思った次第です。


27 :名無しさん@お腹いっぱい。:03/09/25 11:49
>>25
(fset 'yes-or-no-p 'y-or-n-p)

28 :名無しさん@お腹いっぱい。:03/09/26 09:48
>>24
贅沢を言えば、
(y-or-n-p "Not exists. New file? ")で nと答えた時にアボートせずに
ファイル名入力へ戻ってホスィ


29 :24:03/09/26 10:13
>>28
こんなんではいかが?

(defun my-find-file (filename &optional wildcards)
(interactive "FFind file: \np")
(unless (or (file-exists-p filename) (y-or-n-p "Not exists. New file? "))
(setq filename nil)
(command-execute 'my-find-file))
(find-file filename))



30 :名無しさん@お腹いっぱい。:03/09/26 10:37
>>29
イイカモ。
でもさらに贅沢を言えば
(command-execute 'my-find-file)でファイル名入力に戻った時に
前回の入力がそのまま残っていてくれるとウレシイス



31 :24:03/09/26 12:54
>>30
拙者もちょっと気になってましたが、
何をどうやればよいのやら・・・。
(interactive "FFind file: \np")のプロンプトの後に文字列を挿入すること自体、
さっぱりわかりません。




32 :名無しさん@お腹いっぱい。:03/09/26 20:09
(defun my-find-file (filename &optional wildcards)
(interactive "FFind file: \np")
(unless (or (file-exists-p filename) (string-match "[[*?]" filename)
(y-or-n-p "Not exists. New file? "))
(let* ((regexp (concat "^" (regexp-quote default-directory) "\\(.*\\)"))
(str (progn
(string-match regexp filename)
(match-string 1 filename))))
(catch 'exit
(while t
(setq filename
(read-file-name "Find file: " default-directory nil nil str))
(when (or (file-exists-p filename) (string-match "[[*?]" filename)
(y-or-n-p "Not exists. New file? "))
(throw 'exit t))
(string-match regexp filename)
(setq str (match-string 1 filename))))))
(find-file filename wildcards))


33 :24:03/09/26 21:00
>>32は神!

じっくり読ませてもらいます。
ありがとうございまスタ。

34 :名無しさん@お腹いっぱい。:03/09/26 21:07
こんなのも考えてみた。

(defun my-find-file-interactive-arg (&optional initial)
(let* ((insert-default-directory (null initial))
(name (read-file-name "Find file: " nil nil nil initial))
(file (expand-file-name name)))
(cond ((file-exists-p file) (list file))
((y-or-n-p (format "File %s not exists, New file?" file))
(list file))
(t (my-find-file-interactive-arg name)))))

(defun my-find-file (filename &optional wildcards)
(interactive (my-find-file-interactive-arg))
(find-file filename wildcards))

なんか、 point が filename の最初に来ちゃうんだけどね…

35 :24:03/09/26 22:05
>>34
!!! interactiveの引数が関数になってる。
おお、こんなことができるのですか!
自前でinteractiveのコード文字を定義すればいいと・・・目から鱗。
ちょっと感動してます。
コンパクトになってるし。



36 :名無しさん@お腹いっぱい。:03/09/27 10:29
あ… >>34 、 wildcards なんて引数があったの忘れてる (w
wildcard なときでも存在確認できるように、前の関数修正。

(defun my-find-file-interactive-arg (&optional initial)
(let* ((insert-default-directory (null initial))
(name (read-file-name "Find file: " nil nil nil initial))
(wild-p current-prefix-arg)
(file (if wild-p name (expand-file-name name))))
(cond ((if wild-p (file-expand-wildcards name)
(file-exists-p file))
(list file wild-p))
((y-or-n-p (format "File %s not exists, New file?" file))
(list file wild-p))
(t (my-find-file-interactive-arg name)))))


37 :24:03/09/27 12:11
>>34
> なんか、 point が filename の最初に来ちゃうんだけどね…

気になりだすと止まらないので、朝から覗いてるんですが、
read-file-name -> completing-read -> read-from-minibuffer -> read-string
と見ていっても結局 built-in function で補完途中の動作は触れないんですね。

src/fileio.c にread-file-nameがあるんですけど、ここいらにパッチするし
かないんでしょうか・・・ポイント動かすだけなのに・・・

もうギブっす


38 :24:03/09/27 12:17
>>37
× 補完途中
○ 入力中
スンマセ


39 :あぼーん:03/09/27 12:44
あぼーん

40 :24:03/09/27 13:00
すごい安直なことを思いつきました。

(add-hook 'minibuffer-setup-hook
'end-of-line)

問題続出の予感・・・

41 :名無しさん@お腹いっぱい。:03/09/28 06:56
>>40
んじゃ、こんなんでどうでしょ?
my-find-file-interactive-arg() をちょっとだけ変えますた。

(defvar my-find-file-interactive-arg-active-p nil)
(defun my-find-file-interactive-arg (&optional initial)
(let* ((my-find-file-interactive-arg-active-p t)
(insert-default-directory (null initial))
(name (read-file-name "Find file: " nil nil nil initial))
(file (expand-file-name name)))
(cond ((file-exists-p file) (list file))
((y-or-n-p (format "File %s not exists, New file?" file))
(list file))
(t (my-find-file-interactive-arg name)))))

(defun my-find-file-minibuffer-setup-hook ()
(when my-find-file-interactive-arg-active-p
(end-of-line)))
(add-hook 'minibuffer-setup-hook 'my-find-file-minibuffer-setup-hook)


42 :24:03/09/28 12:44
>>41
おお、完璧です。そうかこうすればよかったんだ。

ところで
> (let* ((my-find-file-interactive-arg-active-p t)
で、
> (defvar my-find-file-interactive-arg-active-p nil)

を変更できるというのをはじめて知りますた。
勉強になりますです。


43 :名無しさん@お腹いっぱい。:03/09/29 21:52
----BEGIN BASE64----(bf-mode.el.gz)
H4sICDAmeD8AA2JmLW1vZGUuZWwAzRprb9w28vMecP+BEILzqo02tuNcUQftIU7d
nK+OU8Quer26B3AlalexVlRIyvYGxf32myEpinravvTaLJB4V5wZzpszIz5/To4E
v5GMfJvljGx4wkjKBUkywZI//+n5c/w3e3SSHJJlGuHyguWPr8ne4guyv7v79Mnu
l0/2vyR7+4dP9w4PDsiqEIIc35bkUY2sCRd0w3wKeuGUSoU7ZmnGgP5rXpBzVhIg
h5TJ/t7h091D+PKP84uamMZryJCYb5gkN5lakxdH529Of7g4Pv2JnL0hP754+/bF
2cVPC41xsc4kkTxVN1QwAt+TTCqRLSvFElIVCRNErRl5dfYDecUKJmhOvq+WeRaT
0yxmhWQLt/mPa6qQggKSh/oJIUfp3FNiqLlDmE1WcBG1dboAaPOI5jngkC2vLBnF
ydKQSdEWjMos3xJaJBozVvn2MUmYLDPFCE/JFWNlVqwsWcfgSSEVkLa87S1Aw9eM
BI3SApIVsBUKbOhyAbtoRgTJOU2ikqq1URzZXxCaJBo45cgw7phnBUNuNUbC1YJt
aCwtBnzmgr2vgDTZsbuGjrsfJF2xhresuOZXho+ELLfkZXRLkmbr5YwVCoxjyZjn
T+E5AXW+n7HbTJFU8E0b4GBBCgQoZ1r0uBISfqHIVKyYMtrNEEQb3mk9U3bnZwty
/v3LmYwFiEyq0gCg5CB+wm+coOeRBwcLxSiknNHkXQX+rgHoMrdGltkH5oDETPHV
Cp4KBlbgRb5t+f0FT3ijOrdTtgGVamrzdyVbPSarLH1MygK+oe9suGCLReh0pyoB
ohdPeJqCSQsFJo+vCC1LRgUtYq2ZjhSgFsfENRUZsi+1S1eSCWnW5glLYbE2RSRZ
Dr4FRCInDSkyiHxCgs++zSmw59tgQ6+M3ERD3qxZYQ0FkatJgZMHYX+fmldvG3XP
TQYkndxhDZgIu2von1WbJdC9ycD4SzDlGh1A8dLEx6Aad1GcGy6uzFO15pUiluz0
3ugoZM/ufNR3Itzvu6OtYoNk2G3MSgV/VGODU8iBmEdMsrlVkOcyXgB76yxeE0yU
Bgsi08WIIS6Zej9EemceXF4u2C17FBD8Btn5URCGnvdkGM4FpFfnRsPOYxQWQSYD
3wSOB0TSOcMCjoCUgl1nvJLRFdtuaDkCBflBQJppVL2s0hTsaqAd67xUoB5gPa2K
GL92z0mkWxWN/9NrJ0fMizRbVYJqvHmIBmhrsSXwvGZpCD00Cu3sdgVOaFRSk9eq
psDpNTMPNIiV7Q7ZDQLk8JoFohzPwzINyTHIqDFbAhGtWMThXBH1FpbvqgCvkGTO
C0et1CuwNoAmkSmTHuyTMGy5nKyWRECYQUzKQUOlgBXpIBjTnIUku+anEYEm10yo
TLKkoWDx06kkaERx9tf69nNXLevwMjqlhhjSrTk9POgxgVquN5BA5wVXE+thSy0G
gA1aO17TYsVc4pwX1abHEgnO/m7XT8FIh8EUjzUlR+j+TLRT6RgrTWo1YDqnhtNM
aciHcFRgthwzjnEvBIn0QbI3RrZDtM529yYcjVLuJzNd4gzGa28bCNHPyHzutFOD
Q+ll00v96K4sBPRmpEsoKjf0FiyB6bUT+QAOnzohuF3a+GENVXJgPQJi4ehGcKbu
hXVAQsKD5Dr/iszrdSTQI999oPnVG7Tz5yD2AHJWGPZgayzngG0ZXWcyAxeNssLB


44 :名無しさん@お腹いっぱい。:03/09/29 21:53
DW5rRJ0NqkDH+AOoZUVNTX+6JMOPEBFNANhz4GfQ0fYip/M1y1ZrFZrP/Rw10oX5
hLf+Rs7qEveQCNGIFE2yn1ZajQkHq+j73IguGqIazUR9k/h0jQ3/c+jPq03pMhgh
cGyCY2Q6JV7TvGKWzRVXHNOpcNFjvFMv6uMwpjlsbsocEBhJDshopOgd3JZqX5wK
uhMRuW41wnECAEOb6qVl/EnmeAzr9QZcr4S+ueMca9+5LHOocHASACeKRg+eBI1R
CqSHVgP9rOC7xgrD+u+QyptiGGJI84Ks+Fvrnfvg2v8FU80Brw2EVQliuKLB2Myw
DLlLQaU+j8EemiXibTgzSkGSqiZYa8pIHycWrV4G2HblpCDhUAHlP5z8agNOb5b0
omG9pwBzhtSCmaqqrYYHl6FGb0m12Wz1cwxOnNEoPEdvalLBMj2MaR05LGjHlgVq
iNSLWQEdbK3e4LII3Fd1qT6Ppj+fd+B/NUomL1+cnb25IEfH5Ojtmx/Pj7+xz399
OP02RhD4Dl7AgeR8vKVkDR4Q0AfRlRyzWkngUSXNqEUw9CLdySw6+5zxG+iblSR1
jQ8YVAKZHJrYRRc6qHXJIFWA5aEOkdhJuumP3yKqMcW3SJ6kOFsipnDTozYCbpYV
GXL7uAWq4UBOO16hrrMkl0F//0scfnkjKyA1XW+rgexlnamfvjz3aldWw5kYyy8b
b6bY5JBC+xFlWIJmU9eZEQL9jjHlGPuDIur4ny+Pj785OXtlYunF0ekx+fYE/js/
+dfxpxVRTlWj8ZRnm8zOU+plPI6XYF84WO1BNNhehCSw4507QsX2LfrUfniktPYc
CJaG2hssb26g/X1MHOFccqK2JRKUgIzzEcU2JRcU1FnZ6dEnEGzOxmPHV+ME2DT9
X2MM24qYKh1rga2wZ1qYoaLHATg8WIeqZRHUFfFDA/Sbk7fHLy/evP3pEDxME/PM
fEc0DX5MSq3fBGCB4akz+M+ToDGz0RDGmTTdqRHUPEDF28Yn9asiVxdpMFfopKYO
0g9NN1EPklrFUvDvy8vF54/AOS1tow1AR7nDpnCyXGGRZGk2+w+XwZ+Eb1v/ljhz
qjK5hkylbhjUjI0NICohhQ2OwuyLkLFeyRSfQ4M5U0nbp3UjkG/rZTcg63RFOI+P
MEWYih5iIOio8Y4ZrZuUNhMDi9yaAAyMjFv9QJ3q/bNA0kKiKGYobocn2Ba6c4Go
cGTDuR6y+BuZsaAh33h62a7YR7NQ9ygCvxN8hQ25tYmmK9iqyqnoUO0NeExV7kDq
tPERCr+Puu/20OW2+ypiwkcHW4uR5p4qZSumCL/q177SV4BnoK+/Mn3fFwRBoSP9
bPRVzP5B2LbaUKE2YTmcJ6F9vGZqhqOIoVZy2qB+t9WIZWk3rwcNfS66KREy4rty
hTmxtYvx6z4ka4EOc6Q3HWGIiniNg4WGpd4mkNoWqw89jrq7WErtfUgA2OSDgoxu
53rD9Jcfft7/5W8fs8e7u/b4GOKTtPMP6/+Vdr6mJK9J42stTMj+6z8cMprX8ol7
1SUJADGMX42jsJNz5lP2kMYcT3P9fk91bW/P2nTipYLnc6MH6Gxi3ZYIM3dOYTZY
MVGOvkRwBKdP11H0uuTyExujYKKYSnNDA2jVb1jlwhueNDEpx/KbF0G/X7PX8PWH


45 :名無しさん@お腹いっぱい。:03/09/29 21:54
zk/wc/L6xSvb6bnP793tZVI3exIqcS6wb4N6Ww8jdNXX7cTOuRDbT2ei4KfZUS9r
JYmmDIr5ZgN54I9ofIbN0/Q9vbrlYR7qC4wdz53u8Fv0Q3WrL9cMVGmV63X8VhVa
SOvqQZy0uRtk7Xng41jCd8v0KfUqVBJRYasFeVLfl9N3EF2y7LitvpIwfc2h87K+
f0FieHCv75nd63156+JJ//JBH6F7DQXMXW6bHzaUcq7fndCyrscriE/30BFDALNF
tYQaWkEti6SiZj7q5q7NFw/Z3FjxaYERdAla36Uz6q2vHA7cr7vP3p6+9Q1S66Q7
A4b0mPNBe3ze7001Ev7trsA8+DLKRKs5bM+OczQyeVeU3J2t1/jDje1wvrZsRY2+
naWb6hqo7kr0xv59zP49KHtDSm/0nXFOvYPfby3TsLefV9VpE6JyLJ12HGh319zJ
kgrJPJG1OsGJ9LMWQnD5MtoEjeN07tqMYRUeSmHer01Alx50bZBpDOJhDLzwnUTe
+fnp02fPDg7+evDLJBH94nqaDeGx0b39M4259jDbt3Sm8WQfrz2onsR+H/g+aNwQ
2259F4FK+b7JWc3laegq9GtK/8zqrprCP8ZWZccdAQE5SoNwgNJA4iDzv7gbflQY
JQRH3nXsnu93UwwJvh+4JYSdvpawymvCpunwrljZtuVrHA6A4m6jotowkcWRnuJr
LDjObJw04eZGCq1DrFaTnxDbN+LWnF+ZPo8m11kMZ6/iNuv7l2UhXxGZbcp82zqN
DQ4ZvwSnuaSpvbcN7mi0o/9ADeiPEhkYkr6r78jvNCm/IwTewjE2o0kSIf8+sH6g
Vbgzz+lmmVB9AMzayhm9j9kHHb2j2IB6Dt4+qFo+7lcd90FdtsPDiFwKfp0lrcv0
/wV3LINvtjEAAA==
----END BASE64----

はじめてマイナーモードを作ってみました。dired で上下2画面に割って、下
側にファイルの内容を表示するものです。なんか、禿しくガイシュツな気もす
るのですが、習作ということで許してやってください。

ホントは画像も表示させるつもりでしたが、
http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=thumbs
を見て落ち込みましたので、とりあえず保留さしてもらいます。

人の環境で動くかどうか不安なんですが。


46 :名無しさん@お腹いっぱい。:03/09/30 00:38
>>45
insert-file-contents を使ってファイルの前の方だけを読み込むようにして、
大きいファイルも表示できるようにした方がいい。
そうするとコード変換がちょっと面倒だけどね。


47 :45:03/09/30 08:11
>>46
ナルホドです。
そうすれば読み込みの時間も減らせますね。
暇を見つけてやってみます。

:: bf-mode 切 でもディレクトリ移動時にbf-mode 入 になってしまう不具合
:: を見つけてしまいますた。すんまそん。これも暇みつけて直しまふ。


48 :名無しさん@お腹いっぱい。:03/09/30 11:46
>45
どっかで見たと思ったら広瀬さんのelisp本で
やってたやつだ。


49 :45:03/09/30 12:42
>>48
やっぱり既出でしたか。

「やさしいEmacs‐Lisp講座」でしょうか。

関係ないんですが、探してるうちに
http://www.gentei.org/~yuuji/lispmind/
へたどり着きました。

コンスセルを「トロッコ」と「連結器」に例えているのが、すごく面白くて納
得しつつ爆笑してしまいました。このシリーズ、再開してホスィです。

あ、また脱線していく。

50 :46:03/09/30 13:59
大昔に作ったことがあったけど、元のアイデアは「秀見え」からだった。
ttp://hide.maruo.co.jp/software/index.html
diredの標準だと、n/C-n/Down, p/C-p/Up にそれぞれ同じキーバインディングがあるので、
どれかに表示する機能をバインドすればいいだけ。

51 :名無しさん@お腹いっぱい。:03/09/30 22:28

'((spec
((:char-spec ascii :height any))))

の"height:"ってなんですか?

Lispのマニュアルに載ってますか?


52 :名無しさん@お腹いっぱい。:03/10/01 04:08
>51
それMeadowのフォント設定じゃない?
だったらそれはMeadow独自だから、
EmacsLispのマニュアルには載って無い。

53 :厨房な質問なんですが。:03/10/01 13:47
emacs ユーザーのスキルレベルというのはどんなもんなんでしょうか。

僕はぼんやりとですが、

初心者 寄せ集めでも.emacsを作れて、キーバインドができる
初級者 正規表現を操れて、簡単なelispが書ける
中級車 listを自由自在に操れて、人の書いたelispを書き直せる
上級者 マイナーモードやメジャーモードをスクラッチから書ける

こういうもんかなと思ってますが。
実際のところ、どうなんでしょう>上級者の方々

教えていただけると、励みになりますんで。ひとつ。

54 :厨房な質問なんですが。:03/10/01 13:49
× 中級車
○ 中級者

でした。
僕はまだまだ軽四レベルです。

55 :名無しさん@お腹いっぱい。:03/10/01 16:31
>>53
変なことを知りたがるなー

メジャーモードは簡単だから中級者だね。広瀬さんのページでも見てね。
上級者には ccl も求められるかも。
あと、XEmacs などの微妙な違い。


56 :厨房な質問なんですが。:03/10/01 16:56
>>55
> メジャーモードは簡単だから中級者だね。
マジスカ。
cclなんてとてもなんで、当分中級を目指します。
道は険しいなぁ…

57 :名無しさん@お腹いっぱい。:03/10/01 16:57
別に階級付けしなくても。
> 人の書いたelispを書き直せる
こんなん、元のlisp次第だしさ。

58 :名無しさん@お腹いっぱい。:03/10/01 19:41
中級は尊い

59 :名無しさん@お腹いっぱい。:03/10/01 22:45
>>52

いや、Meadowのフォント設定の例なのはわかっているんですけど、
:heightとかの lispの言語的にどーいう扱いかと。

lisp modeではhighlightされるし、なんか特別な扱いがあるのかと?

誰か教えてください。

60 :kaoru:03/10/02 00:23
>>59
変数として評価すると自身を返すシンボル。

: が頭についているシンボルについてくわしく知りたいなら
keyword-symbols-constant-flag の docstring でも見てくださいな。

t や nil とは微妙に違う、こんなことをしたときに。
(setq t t)
(setq :foo :foo)

> 中級は尊い


61 :59 :03/10/02 23:09

>>60

なるほどです。
そのまんま、constantなsymbolなのですね。

これを使う側が、
(:char-spec ascii :height any)
なんかで、リストの次の中身が何なのか、判断しているのですね。

("char-spec" ascii "height" any)
だと、文字列だから遅いんですか?

lispでは、
(eq :hage :hage)
は純粋にsymbolの比較onlyだから”軽い”ってことですか?


62 :kaoru:03/10/03 17:01
>>61
その手のやつは plist-get を使ってると思うんで docstring でも見てくださいな。

(plist-get '(nnsoup pink) 'nnsoup) => pink
(plist-get '(:nnsoup pink) :nnsoup) => pink
(plist-get '("nnsoup" pink) "nnsoup") => nil

中級は尊い

63 :名無しさん@お腹いっぱい。:03/10/03 21:37
>>62
59 じゃないけど質問です。
plist で、普通のシンボルじゃなくって :hoge とかをよく使うのはなんでですか?
自分では、わかりやすいからなのかなーとか思ってます。


64 :名無しさん@お腹いっぱい。:03/10/03 21:48
It's fukin' CLism.

65 :59 :03/10/03 23:46

>>62

あぁ、なるほどね。
ありがとうございます。

すっきりしました。

もう一度Emacs Lispマニュアル読み直しに逝ってくるでつ。


66 :名無しさん@お腹いっぱい。:03/10/04 21:55
長い文字列をコピーすることが多いので、こんなのを作ってみました。
一応、C-u で コピー時に含める文字を追加できます。
デフォルトの状態で[と]を区切文字にできないのがちょっとナニですが。

(defvar my-copy-word-include-chars "a-zA-z0-9\-")
(defun my-copy-word (&optional arg)
(interactive "P")
(let ((skip-chars (concat my-copy-word-include-chars
(when arg
(read-string "inc. chars: "))))
beg end str)
(save-excursion
(skip-chars-backward skip-chars)
(setq beg (point))
(skip-chars-forward skip-chars)
(setq end (point)))
(setq str (buffer-substring-no-properties beg end))
(kill-new str)
(message "copied \"%s\"" str)
))

;; (global-set-key [?\C-=] 'my-copy-word)とか


67 :名無しさん@お腹いっぱい。:03/10/05 03:05
自分以外に便利だと思う人がいるとは思えないけど
(defun my-recenter (&optional arg)
(interactive "P")
(if (equal last-command 'recenter)
(recenter 0)
(recenter arg)
(setq this-command 'recenter)))


68 :名無しさん@お腹いっぱい。:03/10/05 03:25
>>67
いちお簡単に機能ぐらい書いといたほうが。
equal は eq でいいね。
last-command が recenter と my-recenterの間で
トグルするのを利用するわけか。

69 :名無しさん@お腹いっぱい。:03/10/05 13:03
>>67
reposition-window ってのもあるけどな。

70 :名無しさん@お腹いっぱい。:03/10/05 13:26
>>67
これを機会に docstring 書く癖つけれ

71 :66:03/10/05 18:14
>>68,70
あ、僕もですね。肝心な説明を書いてませんでした。

>>66
ポイント付近の語をkill-ringにコピーします。

docstringは、さしずめ
"Copy a word at near the point to kill-ring."
といったところでしょうか。

細かい説明書きは英語ではつらい…ボソ



72 :名無しさん@お腹いっぱい。:03/10/06 09:40
----BEGIN BASE64----(auto-vc-checkin.el.gz)
H4sICAy4gD8AA2F1dG8tdmMtY2hlY2tpbi5lbAClVk1v2zgQPSdA/sPAl0jbyknR
WwwUcINFsUCQFmnaRY8UObK5kUiHpOTqsr+9Q4p0VNtx3NZIAEnz9ebN40izGbDW
6aLjBV8if5BqijUURREeN8xJDtGwKKSC1qKAjp+dzmb+f18w1w1aWEu3hPn7zx9v
vtz/ffMNbj/Cv/O7u/nt/bdpiLxfSgtWV27NDAJdC2mdkWXrqEKrBBpwS4QPt1/g
Ayo0rIZPbVkTnhvJUVmkND7RDK5106ByzPRXw6MhN/1V2hzuo2i0wAHP9chKofgd
eYCiFUfADk0PQpMdLOuwKNuqQjOlSrpdLF9Dr9uQhTMFTPzXWkfomfupZsi01Gto
mOrBSU+T0yHfdEPoP8o6VtdXmwefWp/KNyNr4klRRK2ZKFbMLc8Jn5AGudOmfw1M
CSh7h34Eq+DtQFYhi0BLfmIKMCenVciJxE9d67VvCr+vDFortbJDDWrIwP8XU2wY
t0/w/C8z+NhSNjjfmn7+5GLRPW6LozCcGs6BfFCxkvCtl+hH4QGQ7YVo3j0fTbZN
dFTlaOYb8t/uYf1AxTBprlvlirJPT+FtPrCRxCcwyY5EZaBjRnp4Z6eZwIrujkz7
5vLsFGDy123blJSm7H/SjlfyIMIQCLraamWSP1/QM6dkHfNrVdANNMho1luuiVqt
4Prr54NJ/TB/Oend9eGkfDjKIel878ElXraCLjp+Mah0MoCJ+wD8OiFthKPu+av1
ggBayxb4pBA6a32AFCZI0kejaNX8yhTh0nfUsAcsUljcD0WtqcDOORnFpsLBQuXB
6NZJFeu2aqes0MWYjiz3PWcBN+NOdjg8qNFBlkU6n6OZXE+ykvEHpJ2QkX1zHeH7
lVMo1iBkvDUGvWKDJfc/X4hKca3EcOmPHk34Kg3M7xg13FBX0SfL8BFSoXNyj3nI
Eg70Hp15mCM5HYHOKxPGXaZwwnFU/BCV1DIJsSQjqfYo58QlLjwBdG6eCNCq7vf2
TV4v9B1W2h/3/TsdaBqbuaK3HSi6JKGlDpxPnzzzJF0mOnohp0UUoQz6jabRc8hY
RVLdWRFBu8xF9QZC4ts5qiwJemtrZm+K4/arh3tCef5U7gldRgtlR8mwM+MwBFlB
9g52sB/cCidxGFLxGpmNJAZrNL70ziJuXh2qMRTx3wZ6vGEHmlZGL1QqdHgH5cfi
uczzSGTQjcK4l8cyUAJGR5VU5PP57x04H7lNOp5Wtv8aoPXjAXdSPPNNsvc7leIs
kNJJYT8A6fvoYgYLAAA=
----END BASE64----


73 :72:03/10/06 09:41
>>72
CVS or RCSをvc で使用時、ついついチェックインを忘れてしまい、古い版が
欲しいときに戻せないという歯がゆい思いをしました。

これを防ぐためにファイルセーブx回に1回は自動的にチェックインするelisp
を書いてみました。要vcで、CVSと RCSにしか対応していません。
使うには .emacsに以下を追加します。

(require 'auto-vc-checkin)
(setq auto-vc-checkin-rcs t) ;; RCSで有効にする
(setq auto-vc-checkin-cvs t) ;; CVSで有効にする
;; 例:セーブ3回につき、1回チェックイン
(setq auto-vc-checkin-save-count-by-checkin 3)

RCSの場合はチェックインと同時にチェックアウトしますので、初回チェック
アウト後はCVSと同じような使用感になると思います。

なお、auto-save-buffers.elを使ってる場合は処理待ち増大で操作不能になる
可能性があるかもです。リビジョン番号肥大にも要注意です。

あと、複数メンバーのプロジェクトでは使わないほうが無難だと思います。


74 :72:03/10/06 09:50
>>73
× RCSの場合はチェックインと同時にチェックアウトしますので
○ RCSの場合はチェックイン直後にチェックアウトしますので

でし。


75 :名無しさん@お腹いっぱい。:03/10/11 15:31
いいんだけど、check inしたらアンドゥ情報が失われるというのはちょっと…

76 :72:03/10/13 19:49
確かに、です。
vc がよく分かってないままに書いたのがいけなかったです。
もちょっと調べます。

77 :名無しさん@お腹いっぱい。:03/10/14 07:00
modeによってshow-paren-mode を切り替えたいのですが
lispがわかりません どのような設定になるのでしょうか?


78 :名無しさん@お腹いっぱい。:03/10/14 07:05
(add-hook 'foobar-mode (function (lambda () (show-paren-mode 1))))

79 :名無しさん@お腹いっぱい。:03/10/14 08:44
>>78
(add-hook 'foobar-mode-hook #'(lambda () (show-paren-mode 1)))
でしょ?
foobar-mode でなく
foobar-mode-hook と。一般的にですが。

80 :名無しさん@お腹いっぱい。:03/10/14 17:11
78-79 有難う御座います


81 :名無しさん@お腹いっぱい。:03/10/16 07:53
初心者 寄せ集めでも.emacsを作れて、キーバインドができる
初級者 正規表現を操れて、簡単なelispが書ける
    listを自由自在に操れて、人の書いたelispを書き直せる
    マイナーモードやメジャーモードをスクラッチから書ける
中級者 Emacsにパッチをあてはじめる
上級者 Emacsをスクラッチから書ける

82 :名無しさん@お腹いっぱい。:03/10/16 16:29
中級は尊い。

83 :名無しさん@お腹いっぱい。:03/10/16 17:58
>>79
> (add-hook 'foobar-mode-hook #'(lambda () (show-paren-mode 1)))

(add-hook 'foobar-mode-hook (lambda () (show-paren-mode 1)))
ではないの?


(defmacro lambda (&rest cdr)
:
(list 'function (cons 'lambda cdr)))
だじょ。


84 :名無しさん@お腹いっぱい。:03/10/16 18:18
>>83
訂正するほどじゃない。

85 :名無しさん@お腹いっぱい。:03/10/16 18:21
スタイルの問題でしょ。emacs/lisp/*.el 見ても両方使われてる。

86 :名無しさん@お腹いっぱい。:03/10/16 18:42
#' を付けるほうが好きだけど、
nemacsからも利用する設定ファイルには使えない悲しさ。

87 :名無しさん@お腹いっぱい。:03/10/16 19:01
>81 漏れはいまだ初心者でつね


88 :名無しさん@お腹いっぱい。:03/10/18 01:53
>>81
上級者というのはxyzzyの亀井さんくらいのレベルなのか…。
道は遠い…というより一生かかってもムリ


89 :名無しさん@お腹いっぱい。:03/10/18 21:16
初心者 寄せ集めでも女を集めて、ハーレム を作れる
初級者 性器表現を操れて、簡単なエロ本が書ける
    チムポを自由自在に操れて、人に汚された女を調教し直せる
    S モードや M モードをスクラッチから調教できる
中級者 少女の頃から育成をはじめる
上級者 女を卵子から作り始める


90 :名無しさん@お腹いっぱい。:03/10/18 21:25
>>89
はい、それから〜

91 :名無しさん@お腹いっぱい。:03/10/18 21:34
定義厨は失せて。

92 :名無しさん@お腹いっぱい。:03/10/21 14:05
>>91
なんか Emacsスレのほうに飛び火してるみたいだが。

93 :名無しさん@お腹いっぱい。:03/10/21 19:38
>>89
初心者のハードルやけに高いな、おい。

94 :名無しさん@お腹いっぱい。:03/10/22 10:54
>>85
> スタイルの問題でしょ。emacs/lisp/*.el 見ても両方使われてる。

http://www.mew.org/~kazu/doc/elisp/function.html


95 :名無しさん@お腹いっぱい。:03/10/22 11:11
>>94
結局「スタイルの問題」じゃないの?

96 :名無しさん@お腹いっぱい。:03/10/22 11:26
>94
kazuのeispは信じられない程アレなので参考にならない。


97 :名無しさん@お腹いっぱい。:03/10/22 11:43
#' ではなく ' を使うと、バイトコンパイルされない場合がある。ってことでしょ。

98 :名無しさん@お腹いっぱい。:03/10/22 11:51
>>96
あ、mew 使ってないんでよく知らないんだけどどのへんがアレなの?

99 :名無しさん@お腹いっぱい。:03/10/22 13:34
>>97
でもこのスレでは生のlambdaと functionで囲んだのだけ扱ってて、
quoteは関係無かったからさ。なのに 94が変な反応するから。

100 :名無しさん@お腹いっぱい。:03/10/23 12:00
今日、はじめて包囲アドバイスなるものを使ってみマスタ。
強力すぎてちょっと怖いけど、試しに

;; デフォルト動作でそのウィンドウも消すようにする。
(defadvice quit-window (around kill-window-adv activate)
"quit-window with kill selected window"
(unless (ad-get-arg 1)
(ad-set-arg 1 (selected-window)))
ad-do-it)

こんな風なのを書いてみた。
たとえばapropos のウィンドウで q したときなんかはウィンドウが消えてくれます。
コレ一発で vc の log ウィンドウなんかもそんな挙動になってくれるからスゴイ楽でし。

でもやっぱし怖いす。

101 :名無しさん@お腹いっぱい。:03/10/23 14:51
包囲アドバイスって訳語は、日本語infoで使われちゃっていますけど、
あまり良さそうに思えないですね。語感が合わなくて。


102 :名無しさん@お腹いっぱい。:03/10/24 06:20
>>96
> kazuのeispは信じられない程アレなので参考にならない。

どのへんが?

103 : ◆kXMewIMy86 :03/10/24 06:28
ま、いろいろとね。。。

104 :名無しさん@お腹いっぱい。:03/10/24 08:30
>>103
FUD?

105 :名無しさん@お腹いっぱい。:03/10/24 12:41
>>104
そうとも言いきれなさそうだから困る。
リスト遊びの評判もだが。


106 :名無しさん@お腹いっぱい。:03/10/24 14:45
>>105
広瀬さんの本はどう?

107 :名無しさん@お腹いっぱい。:03/10/24 17:10
「リスト遊び」は純粋にとても良かったと思うが。
mewは使ってないからコードの評価はしないけど。

108 :名無しさん@お腹いっぱい。:03/10/24 20:33
2章を頭からちょっと読んでみたが

- nil を偽値として紹介した直後に not でなく null を紹介。
その後で空リスト。
偽値と空リストがごっちゃになってる taste がしてイヤでつ。
同じ lisp ばかりじゃねえんだぞと。

- predicate は「述語」でなしに「断言する」でよかったんだっけか?

- "\n" が改行文字にすりかわるのは評価じゃなくてリーダーの問題だろ
\n ならいいけど \\ が出てきたらこんな理解で困るんじゃないか。
regexp を扱うようになったらパニックだろ。

とか考えた漏れは逝ってよしでつか


109 :名無しさん@お腹いっぱい。:03/10/24 20:50
でつ

110 :名無しさん@お腹いっぱい。:03/10/24 20:54
>>108
> 同じ lisp ばかりじゃねえんだぞと。
違う Lisp 知らない。教えて。
Scheme は Lisp じゃないし。

111 :名無しさん@お腹いっぱい。:03/10/25 09:12
>>99
まだ理解できていないようで・・・


112 :名無しさん@お腹いっぱい。:03/10/25 09:30
>>111
あのー、罵倒されても構いませんから、
(lambda ...)

(function (lambda ...))
で具体的に何が変わってくるのか、
もうちょっと詳しく教えてください。
俺の理解では、バイトコンパイルされてしまえば同じ。
そのままだったら、functionのほうがマクロ展開ないぶん、
微妙に速いかもしれない(俺の勝手な推測)というところなんですが。
# quoteの場合が違うのは分かっています。

113 :名無しさん@お腹いっぱい。:03/10/25 14:44
それでいいんじゃないの? 個人的には (lambda ...) よりも #'(lambda ...)
のほうがパッと見たときにわかりやすいので好み。

114 :名無しさん@お腹いっぱい。:03/10/26 10:49
時間がかかる処理をしていて、何かキーが押されたら中断する、ということを
考えています。試しに下のようなのを書いてみました。
(defun g ()
(interactive)
(let ((i 0))
(while t
(setq i (1+ i))
(when (input-pending-p)
(keyboard-quit)))))

これはうまくいきました。

今、やりたいのは 上記のwhile部分がブラックボックス扱いのときで、
(defun heavy-proc ()
(let ((i 0))
(while t
(setq i (1+ i)))
i))

という関数の中身を変更せずに、呼び出した後でキー入力があれば中断して戻
るということがしたいのです。割り込みのような感じです。
(defun f2 ()
(interactive)
(condition-case nil
(heavy-proc)
.....

とやればいいのかなと思ったのですが、肝心のキーが押されたらエラーを発生
するやり方がさっぱり見当がつかないのです。
なにか良い方法を知っておられましたら、教えてやってくださいまし。


115 :名無しさん@お腹いっぱい。:03/10/26 11:42
>>114
condition-case で quit 取るんじゃだめなん?


116 :114:03/10/26 18:05
>>115
アドバイスありがとうございます。

(defun heavy-proc ()
(let ((i 0))
(while t
(setq i (1+ i)))
i))

(defun f2 ()
(interactive)
(condition-case nil
(heavy-proc)
((quit)
(message "aborted."))))

こういうことでしょうか。
これだと、C-g以外のキーを押したときは中断できません。
もうちょっと練ってみます。

117 :名無しさん@お腹いっぱい。:03/10/27 01:23
全てのキーに signal発生させるよう設定したキーマップ使用すれば
いけるかも? signalの代わりに throwでもいいけど。

118 :114:03/10/27 09:49
>>117
試しにこうしてみましたが…

(defvar tmp-map nil
"temporary key map for aborting.")
(defun f2 ()
(interactive)
(let ((previous-keymap (copy-keymap (current-local-map))))
(if tmp-map
nil
(setq tmp-map (make-sparse-keymap))
(define-key tmp-map "a" 'keyboard-quit)
(define-key tmp-map "b" 'keyboard-quit)
(define-key tmp-map "c" 'keyboard-quit))
(use-local-map tmp-map)
(condition-case nil
(heavy-proc)
((quit)
(message "aborted.")))
(use-local-map previous-keymap)))

中断してくれない(^^;

119 :名無しさん@お腹いっぱい。:03/10/27 10:25
うーん、自分で bindした keyboard-quitと
C-g は扱いが違うって事なのかな?

120 :114:03/10/27 11:47
>>119
今度は以下のようにsignalを使ってみましたが…
(defvar tmp-map nil
"temporary key map for aborting.")
(defun my-quit ()
(interactive)
(signal 'quit nil))
(defun f2 ()
(interactive)
(let ((previous-keymap (copy-keymap (current-local-map))))
(if tmp-map
nil
(setq tmp-map (make-sparse-keymap))
(define-key tmp-map "a" 'my-quit))
(use-local-map tmp-map)
(condition-case nil
(heavy-proc)
((quit)
(message "aborted.")))
(use-local-map previous-keymap)))

相変わらず、中断せずでした。

edebugで追いかけてみると、キーマップ自体は変わってくれているのですが、
heavy-procを呼び出したらC-g以外をセンスしてくれないような感じがします
です。


121 :114:03/10/27 12:30
助言を元に調べました。
なんとなく分かってきた気がします。(気がするだけかも…)
(defun heavy-proc ()
(let ((i 0))
(while t
(setq i (1+ i)))
i))

(defun f3 ()
(interactive)
(let ((previous-keymap (copy-keymap (current-local-map)))
(previous-input-mode (current-input-mode)))
(set-input-mode t nil 0 ?a)
(condition-case nil
(heavy-proc)
((quit)
(message "aborted.")))
(use-local-map previous-keymap)
(set-input-mode (car previous-input-mode)
(nth 1 previous-input-mode)
(nth 2 previous-input-mode)
(nth 3 previous-input-mode))))

キーマップ再定義はせずに、上記のようにすると aキーで中断できるようにな
りますた。あとはこれを全部のキー文字に割り当てれば、と考えたのですが…

(set-input-mode t nil 0 '(?a ?b)) のような複数指定は不可
(set-input-mode t nil 0 nil) ではデフォルトのC-gになる

の様です。…もはや手詰まりか…

122 :114:03/10/28 10:24
ふと思い立って、
(keyboard-translate ?b ?\C-g)
とかやってみましたが、やはり中断してくれませんね。

コマンドループ内でC-gというのはかなりの特別扱いの感じがします。
こんなローレベルな関数が効かないなんて…。

# emvaders.elとかどうやってるのかな。ゲームなら割り込みみたいな処理を
してると思うんだけど。


123 :114:03/10/28 10:53
emvaders.elでは input-pending-pで処理してますた。
ゲーム的にはこのやり方は納得です。
にしても、ハマりすぎです。
誰かお願いです。ひとつ叩いてやってください。ガツンと。

124 :114:03/10/29 15:54
苦肉の策として、「最後に押したキーで中断する」というのを考えてみました。

(defadvice heavy-proc (before input-set disable)
(set-input-mode t nil 0 last-input-event))

(defun heavy-proc ()
(interactive)
(let ((i 0))
(while t
(setq i (1+ i)))
i))

(defun f3 ()
(interactive)
(let ((previous-input-mode (current-input-mode)))
;; enable advice
(ad-enable-advice 'heavy-proc 'before 'input-set)
(ad-activate 'heavy-proc)
(condition-case nil
(heavy-proc)
((quit)
(message "aborted.")))
;; disable advice
(ad-disable-advice 'heavy-proc 'before 'input-set)
(ad-activate 'heavy-proc)
(set-input-mode (car previous-input-mode)
(nth 1 previous-input-mode)
(nth 2 previous-input-mode)
(nth 3 previous-input-mode))))

ややこしいやり方になってしまいました。


125 :名無しさん@お腹いっぱい。:03/10/29 16:16
unwind-protect使ったほうがいいよ。

126 :名無しさん@お腹いっぱい。:03/10/29 16:46
なぜ C-g で quit がいやなのかようわからんが、アドバイスせんでも
(let ((previous-input-mode (current-input-mode)))
(unwind-protect
(progn
(apply #'set-input-mode
`(,@(butlast previous-input-mode) ,last-input-event))
(heavy-proc))
(apply #'set-input-mode previous-input-mode)))
でいいような。


127 :114:03/10/29 17:56
>>125, 126
助言、ありがとうございます。
今まで、unwind-protect は実際にどういう場面で用いるのかわかりませんでしたが、
なんかわかったような気がしますです。

> なぜ C-g で quit がいやなのかようわからんが、

bf-mode.elというelispをいじくっているのですが、html をw3mで表示したと
きに重いので、キャンセルの手段が欲しいと思ったのです。

128 :名無しさん@お腹いっぱい。:03/10/30 01:09
C-gでいいじゃん…


129 :名無しさん@お腹いっぱい。:03/10/30 21:47
ファイルへの出力ってどうやってするんですか?
とりあえずhoge.txtに"hoge\n"と書いて出力する程度でいいんですが。

130 :名無しさん@お腹いっぱい。:03/10/30 21:53
write-regionでいいじゃん…


131 :名無しさん@お腹いっぱい。:03/10/30 21:58
>>130
さんくす!
ググってもよく分らなかったもので。

132 :名無しさん@お腹いっぱい。:03/11/15 19:21
【徹底的】プログラマーが語るviとemacs 7【バトル】
http://pc.2ch.net/test/read.cgi/prog/1064605855/

514 :仕様書無しさん :03/11/15 14:09
Vimの方がEmacsより速いとか言っていた馬鹿が居たなぁ
ttp://msdn.microsoft.com/seminar/shared/asp/view.asp?url=/msdntv/episodes/en/20031028lhorndb/manifest.xml&rate=1&WMPVer=9.0.0.3008

どう見てもEmacsの方が速いなプッ
以前のこれと比べてみろよ
ttp://seriss.com/people/erco/fltk-videos/tutorial-fltk-hello.html

ダセーーー(藁
なんか、Vim抜けてプロンプトでコンパイルしてまた開いてるよプッ
しかも、Emacsの方が断然速いな〜
いい加減乗り換えた方が良いんじゃねぇか(藁

それにしてもM$のプログラマホモくせーな

133 :名無しさん@お腹いっぱい。:03/12/06 19:06
もはや、このスレもこれまでか…
がんばってる同士はおらんのだろうか。

134 :名無しさん@お腹いっぱい。:03/12/06 22:27
2ch以外で頑張ってます。

135 :名無しさん@お腹いっぱい。:03/12/07 17:16
たとえば、それはどこなんでしょう?

136 :名無しさん@お腹いっぱい。:03/12/10 02:40
あのー質問なんですが,
あるファイルの内容を調査したい場合,Emacs Lisp だと
対象となるファイルを一旦 find-file とかで
全て読み込まなくちゃ駄目なんでしょうか…?

外部プロセスに逃げると言う手も考えましたが,
そんなものを使うよりは,Emacs Lisp のみで完結したいので…


137 :名無しさん@お腹いっぱい。:03/12/10 03:10
etagsとか?
ってか、どんな調査したいのかにもよるのでは?

138 :名無しさん@お腹いっぱい。:03/12/10 10:17
dired で % g

139 :名無しさん@お腹いっぱい。:03/12/10 10:30
全部読まなくても
(insert-file-contents FILENAME &optional VISIT BEG END REPLACE)
でファイルの一部だけを読む事ができるよ。

140 :136:03/12/11 23:27
御回答どもです

>>137
どんな調査ってのはイロイロあるものの,
コレさえ解決できればってのは無くて,
要は,

open→無視して良いデータは破棄しつつ満足するまでread→close

ってのをやりたいだけでして…

>>139
ありがとうございます。
info読みなおしました…
今まで如何にイイカゲンに読んでたかを思い知りますた…
名前付きパイプとかも読めちゃうんすねコレ…


141 :名無しさん@お腹いっぱい。:03/12/26 16:20
一つの関数でλを定義する数は何個ぐらい許されるんでしょうか?

142 :名無しさん@お腹いっぱい。:03/12/26 17:03
なにがしたいのか分からんが、とりあえず作ってみたら?
もっと意図を明確にしたうえで、ム板のスレで質問するのがいいと思うが。

143 :名無しさん@お腹いっぱい。:03/12/26 22:02
(defun newschangelog (start end)
"ChangeLog中の不必要な部分を削除"
(interactive "r")
(save-excursion
(save-restriction
(narrow-to-region start end)
(goto-char start)
(replace-regexp "^[ \t]*.*STRONG.*" "")
(goto-char start)
(replace-regexp "^ *<A HREF.*" "")
(goto-char start)
(replace-regexp "</A></DT>" "")
(goto-char start)
(delete-matching-lines "^$")

(goto-char start)
(replace-regexp "^[ \t]*" "\t")
)))

* news/index.html: 記事追加
★ PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品</A></DT>
<DT><STRONG>日経BizTech</STRONG>
<A HREF="http://biztech.nikkeibp.co.jp/wcs/show/leaf/CID/onair/biztech/comp/247927">
日本SGI、Linux向けのシステム構築支援サービス</A></DT>
<DT><STRONG>c|net</STRONG>
<A HREF="http://japan.cnet.com/svc/rss?id=1261.47623.54525">
日本国内のLinuxサーバ市場:ビジネス利用には課題が多い</A></DT>


上記★から☆までがリージョンに指定されている状態だとします。このとき、
カーソルが★にあるのか☆にあるのかで、M-x newschangelog の結果が異なり
ます。

144 :143の続き:03/12/26 22:03
具体的には、カーソルが☆にあると
PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品
<DT><STRONG>日経BizTech</STRONG>
日本SGI、Linux向けのシステム構築支援サービス
<DT><STRONG>c|net</STRONG>
日本国内のLinuxサーバ市場:ビジネス利用には課題が多い
となり、カーソルが★にあると
PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品
日本SGI、Linux向けのシステム構築支援サービス
日本国内のLinuxサーバ市場:ビジネス利用には課題が多い

となります。
希望する結果は、カーソルが★☆のどちらにあっても
PTCジャパン、Linux対応Pro/EをLinux World Expoに参考出品
日本SGI、Linux向けのシステム構築支援サービス
日本国内のLinuxサーバ市場:ビジネス利用には課題が多い
のようになることです。添削おねがいします。


145 :名無しさん@お腹いっぱい。:03/12/26 23:41
なんか例示されてるのと違い、空行が入ってしまうなーと思ったら、
transient-mark-mode かどうかで挙動が違うな。
で、offにして試してみたけど、どちらも okっぽかったけれど。

146 :143:03/12/27 00:21
検証ありがとうございます。おっしゃるとおり、手元の Emacs 20.7.2 を
\emacs -qで起動すると、★☆どちらにカーソルがあっても希望の結果になり
ました(transient-mark-mode t/nil のどちらも)。
ところが、XEmacs 21.1 を \xemacs -q で起動させて確認したところ、
transient-mark-mode t/nil どちらの場合も 144 に書いた結果になるのです。

常用しているのは XEmacs なので、それで希望の結果が出て欲しいのです。
皆様のアドバイスをいただきたく思います。よろしくお願いします。


147 :名無しさん@お腹いっぱい。:03/12/27 05:08
replace-regexp を
(while (re-search-forward REGEXP nil t)
(replace-match TO-STRING nil nil))
にすれば直るはず。
特別な理由がない限り lisp program 中で replace-regexp は使わないほうが
いいです。 perform-replace を参照。

148 :143:03/12/27 22:46
147氏のおっしゃるように修正したところ、XEmacs, Emacs の両者で
希望の動作をしてくれるようになりました。ありがとうございます。


149 :名無しさん@お腹いっぱい。:04/01/04 14:13
>>1 のelispリファレンス-ja
ttp://www.fan.gr.jp/~ring/doc/elisp-manual/elisp.html

は 27章 ウィンドウ がまるごと抜けてるからちょっと不便ですた。

ちょっと探したら、
http://www.i.kyushu-u.ac.jp/~s-fusa/doc/elisp-manual-20-2.5-jp/elisp-ja.html

を発見。こっちはちゃんと27章があるじょ。
スタイルシートでカラフルで見やすいなり。

にしても、emacs21版のelispリファ-ja は まだどこにもないんでしょか。

150 :名無しさん@お腹いっぱい。:04/01/04 14:43
149が訳すことにケテーイしますた。

151 :名無しさん@お腹いっぱい。:04/01/04 16:33
がんがれー

152 :名無しさん@お腹いっぱい。:04/01/04 17:13
http://www.gnu.org/software/emacs/elisp-manual/html_chapter/elisp_51.html#SEC729
これだけ訳せばいいんだろうか?

153 :名無しさん@お腹いっぱい。:04/01/05 19:56
>>152
駄目.

http://www.i.kyushu-u.ac.jp/~s-fusa/doc/elisp-manual-20-2.5-jp/elisp-ja_1.html#SEC4

にあるように,日本語は改変が認められていません.

故に公開したければ,全文を訳し直す必要がある.


154 :名無しさん@お腹いっぱい。:04/01/05 21:01
その GPL 和訳の由来はここ。
http://www.sra.co.jp/public/doc/gnu/gpl-2j.txt
これにも同じく
> ・和文文書の本文を改変しないこと。
とある。つまり、禁止してるのは「GPL の和文本文」の改変であって、
Emacs Lisp Reference Manual の和文ではない。
そもそも、元の文書が GPL なのだから改変禁止は不可能。

155 :名無しさん@お腹いっぱい。:04/01/05 23:46
恐ろしいほどの部分引用だな

156 :名無しさん@お腹いっぱい。:04/01/23 04:41
asm-mode で新規作成/既存ファイル開く、でファイル先頭に;(コメント文字) が
自動的に挿入されてしまうんだけど、これを抑制する方法ないでつか?

157 :名無しさん@お腹いっぱい。:04/01/23 09:11
それだけでは、うちではそんなことはないとしか言いようがないよ。
それは本当にasm-modeが入れているものなのかな?



158 :名無しさん@お腹いっぱい。:04/01/23 11:26
-q つけて起動したら再現しませんでした…出直してくるぽ。

新規作成したバッファの状態を監視しつつ
edebug でステップ実行したいんですけど、
バッファが見当たらない… asm-mode が
呼ばれたときはバッファが存在してるはずでつよね?



159 :156:04/01/23 11:29
まちがえて age ちゃった。 ごめんでつ。>>158>>156 です。

160 :名無しさん@お腹いっぱい。:04/02/02 02:00
最近の elisp では when とか unless とか出て来るんですけど、
わたしは while と if と cond くらいしか使いません。
when, unless の利点は何ですか?

161 :名無しさん@お腹いっぱい。:04/02/02 02:01
>>160
progn 使わなくていい

162 :名無しさん@お腹いっぱい。:04/02/02 02:29
whenとあったとき、ifと違い条件の成立しなかった時の処理はないのだと
一目で分かる。

163 :名無しさん@お腹いっぱい。:04/02/02 02:38
欠点はいらんのか

164 :名無しさん@お腹いっぱい。:04/02/02 02:45
別に ifと置換えとかじゃないし、単純すぎる構文だから欠点もなにも……。

165 :160:04/02/02 02:55
ってことは別に無理して使わなくてもいいってことか。
マクロってよくわかんないけど subr.el 見たら、if に置き換えてるだけみたいね。



166 :名無しさん@お腹いっぱい。:04/02/06 02:12
navi2chなんかで、エンター押したらその行に関係する動作をする機能を作るには
何を使えばいいのでしょうか。
key map を使うのかと思ってnavi2chのソースをみたのですが、
define-key map [return] という行は見つかりませんでした。


167 :名無しさん@お腹いっぱい。:04/02/06 03:23
そのレベルの質問なら、navi2chスレのほうが適切と思うが。

168 :名無しさん@お腹いっぱい。:04/02/06 04:15
(define-key map "\r" 'navi2ch-article-select-current-link)

169 :名無しさん@お腹いっぱい。:04/02/06 04:45
今回の場合、describe-key で returnに対応するコマンドを調べて、
それを元に grepすれば >>168が見つかりますな。

170 :名無しさん@お腹いっぱい。:04/02/06 11:48
C-h w RET

171 :名無しさん@お腹いっぱい。:04/02/06 11:49
w じゃなくて k だ

172 :名無しさん@お腹いっぱい。:04/02/06 12:08
ある関数内で auto-compression-mode を有効に束縛したいんですが

(let ((auto-compression-mode t))
(insert-file "foo.gz"))

じゃ駄目なんですね。

(let ((current auto-compression-mode))
(auto-compression-mode t)
(insert-file "foo.gz")
(auto-compression-mode current))

こうすべきもんなんでしょうか。なんかもっとスマートな方法ありますか?

173 :166:04/02/06 12:15
>>167-171
みなさんありがとうございました。
勉強になりました。
[return] ではなくて"\r"で定義してあるんですね。


174 :名無しさん@お腹いっぱい。:04/02/06 12:21
>>172
> じゃ駄目なんですね。
変数じゃないならだめだよ。

175 :172:04/02/06 12:36
>>174
いちお変数でもあるんですけどね、って今見てみたら docstring に
Setting this variable directly does not take effect;
と書いてあった…失礼しますた。やっぱあんな方法でやるしかないのかなあ。

176 :名無しさん@お腹いっぱい。:04/02/06 13:23
with-auto-compression-mode

177 :名無しさん@お腹いっぱい。:04/02/06 18:24
>>176
おーありがとうです。こんなのがあったのか。感謝。

178 :名無しさん@お腹いっぱい。:04/02/06 22:10
emacs21のtool-bar にあるプリンタアイコンはprint-bufferですが、
これを.emacsでpostscript-print-bufferに変えたいんですが、どうやれば
良いすかね?


179 :名無しさん@お腹いっぱい。:04/02/07 00:26
(setq tool-bar-map (delq (assq 'print-buffer tool-bar-map) tool-bar-map))
(tool-bar-add-item-from-menu 'ps-print-buffer "print")
でどうでしょ

180 :名無しさん@お腹いっぱい。:04/02/09 16:51
空のファイルを作成したいのですがどうやればいいんでしょうか?
動作としては↓のような感じです。
% touch hoge
(hogeというファイルは存在していないとして)

181 :名無しさん@お腹いっぱい。:04/02/09 17:27
(write-region (point-min) (point-min) "hoge" t)

182 :名無しさん@お腹いっぱい。:04/02/09 20:37
>>181
ありがとうございました。

183 :名無しさん@お腹いっぱい。:04/03/20 18:29
だれか、mmm で php-mode の indent が効かなくなるの直してくれ。

184 :名無しさん@お腹いっぱい。:04/03/24 08:35
mmm と php-mode てなんか相性わるいよね。
漏れは別の不具合のせいで、結局php-mode 単体でつかってまふ。

185 :名無しさん@お腹いっぱい。:04/05/01 12:53
'(1 2) '(3 4) => (4 6)
みたいにリストの各要素を足してくれるような関数ってありませんでしたっけ?

186 :名無しさん@お腹いっぱい。:04/05/01 13:16
(mapcar* '+ '(1 2) '(3 4))
clだけど。

187 :185:04/05/01 13:29
>>186
あれこれ探してみてたんですが cl にあったのか、どうもですた。

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)