5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 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 :あぼーん:あぼーん
あぼーん

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 にあったのか、どうもですた。

188 :名無しさん@お腹いっぱい。:04/05/10 20:39
arg1 が non-nil なら a-list に arg2 を append、
arg1 が nil なら b-list に arg2 を append、って処理をやりたいんですが

(defun my-test (arg1 arg2)
(if arg1
(setq a-list (append arg2 a-list))
(setq b-list (append arg2 b-list))))

これじゃちょっと不恰好な気がします。スマートに実装する方法ありませんか
ね。

189 :名無しさん@お腹いっぱい。:04/05/11 01:40
(let ((sym (if arg1 'a-list 'b-list)))
(set sym (append arg2 (symbol-value sym))))

190 :名無しさん@お腹いっぱい。:04/05/11 18:30
>>189
set ってこんな時に使えるのか。サンクスコでした。

191 :名無しさん@お腹いっぱい。:04/05/12 08:04
マ板、Emacs Lispスレから流れてきました。
○×ゲームを作っていくという話題。

とりあえず、入力はこんな感じで。
(read-from-minibuffer " │○│ 
―┼―┼―
 │×│ 
―┼―┼―
 │ │  コンマで区切って2つの数字を入力してください。(例 0,0)")


192 :名無しさん@お腹いっぱい。:04/05/12 13:06
何でminibuffer使う?
一瞬 gomoku.el の部品が使えないかなと思ったけど
自分で書いた方がはやそう。

193 :名無しさん@お腹いっぱい。:04/05/12 15:56
○×か。最初から敷居が高いなぁ。
入力はコンマ区切りよりリストとして入力させる方が良いハックじゃないかな?
コンマはパースしなくちゃいけないし。

194 :名無しさん@お腹いっぱい。:04/05/12 16:10
何も考えずに、ここまでやってみた。ボードと終了判定があるだけ。
あとは、エラーチェックの徹底と思考ルーチンかな。
長いので2回に分けます。

(defun ox-index (x y) (+ (* y 3) x))
(defun ox-line (vector y)
  (format "%c|%c|%c"
          (aref vector (ox-index 0 y))
          (aref vector (ox-index 1 y))
          (aref vector (ox-index 2 y))))
(defun ox-board (vector)
  (format "%s\n-+-+-\n%s\n-+-+-\n%s\n"
          (ox-line vector 0)
          (ox-line vector 1)
          (ox-line vector 2)))
(defun ox-read (vector o-or-x)
  (1- (string-to-int
       (read-from-minibuffer (format "%s (%cの番です) " (ox-board board)
                                     o-or-x)))))


195 :名無しさん@お腹いっぱい。:04/05/12 16:12
しょの2

(defun ox-game-over-p (vector)
  (catch 'loop
    (dolist (indexes '((0 1 2) (2 5 8) (7 6 8) (0 3 6)
                       (0 4 8) (1 4 7) (2 4 6) (3 4 5)))
      (let ((marks (mapcar #'(lambda (i) (aref vector i)) indexes)))
        (when (or (null (remove ?O marks)) (null (remove ?X marks)))
          (message (format "%s (%cの勝ちです。)" (ox-board board) (car marks)))
          (throw 'loop t))))))


196 :名無しさん@お腹いっぱい。:04/05/12 16:13
あとminibufferよりも新しく編集バッファを作成してエディタ内のテキストを
操作する方が良いと思う。二次元の平面を扱うなら。
例えば以下のような感じ。

(progn (get-buffer-create "hoge")
  (switch-to-buffer "hoge")
  (erase-buffer)
  (insert "○|×|○ \n")
  (insert "×|○|○ \n")
  (insert "×|○|× \n"))



197 :名無しさん@お腹いっぱい。:04/05/12 16:13
しょの3

(defun ox ()
  (interactive)
  (let ((board (vconcat '(?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)))
        (o-or-x ?O)
        i mark)
    (while (not (ox-game-over-p board))
      (setq i (ox-read board o-or-x))
      (setq mark (aref board i))
      (if (member mark '(?O ?X))
          (progn
            (message (format "%s (そこには置けません)" (ox-board board)))
            (sit-for 1))
          (aset board i o-or-x)
          (setq o-or-x (if (eql o-or-x ?O) ?X ?O))))))


198 :名無しさん@お腹いっぱい。:04/05/12 16:20
Emacsって何?

199 :名無しさん@お腹いっぱい。:04/05/12 16:22
>>192
> 何でminibuffer使う?
> 一瞬 gomoku.el の部品が使えないかなと思ったけど
> 自分で書いた方がはやそう。
その場のノリですが、むりやり理由をつければゲーム後に画面の後かたずけとかが自動的に行われるからです。

>>193
>入力はコンマ区切りよりリストとして入力させる方が良いハックじゃないかな?
>コンマはパースしなくちゃいけないし。
置ける場所に番号を書いておいて、それを入力してもらう方法をとってみました。

思考ルーチンも総あたりすればいいだけですね。

ox-game-over-pではthrowでdolistを早抜けしているんですけど、elisp的な
定石はこれでいいのでしょうか。

200 :鬱­猫­2030 ◆utuPOcVnl. :04/05/12 18:14
ここで>>1を読んで修業すればnavi2chみたいの書けますか?

201 :名無しさん@お腹いっぱい。:04/05/12 19:22
書けるよ

202 :鬱­猫­2030 ◆utuPOcVnl. :04/05/12 21:20
ネット関係のライブラリが標準で用意されているのですか?
P2P関係のものを何か作りたいのですがtcp/ip層までいじれますか?


203 :名無しさん@お腹いっぱい。:04/05/12 21:43
リリースされてる版だと、Emacs Lisp からできるのは TCP の connect(2) だけ。
accept(2) へのインターフェイスは 用意されてないから P2P やりたいなら
下請けの外部プログラムが必要。

204 :名無しさん@お腹いっぱい。:04/05/13 00:53
M-x namazu とする代わりに F2 キーでカーソルのある単語を検索できればと思い,
namazu.el を読んだ上で以下のように設定しました
しかしこの設定で F2 キーを叩いても,
別のバッファが開いて「32 件検索しました」 という
メッセージが出るところまで行くのですが
検索結果がでません どこを直せばよいのでしょうか
(global-set-key [(f2)]
  (lambda ()
    (interactive)
    (namazu namazu-search-num namazu-default-dir
          (current-word))) )


205 :名無しさん@お腹いっぱい。:04/05/13 04:54
namazu の最初の引数は PAGE-NUM みたいなので普通は 0 でしょう。

206 :204:04/05/14 00:09
>>205 コメントありがとうございます 
0 を入れてみたのですが改善しませんでした
出力結果は以下のようにヘッダとフッタだけ出てるようで中身が出ません
M-x namazu でインタラクティブに実行するのは問題ないのですが。。。

検索結果
参考ヒット数: [ BufferedReader: 52 ]

検索式にマッチする 52 個の文書が見つかりました。

現在のリスト: 1 - 0
ペイジ: [1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17][18][19][20]

207 :名無しさん@お腹いっぱい。:04/05/14 00:35
namazu-search-num が 0 になってない?

(namazu namazu-search-num namazu-default-dir (current-word))
で namazu-search-num を 0 にするんじゃなくて、

(namazu 0 namazu-default-dir (current-word))
にしたら? ってこと。

208 :名無しさん@お腹いっぱい。:04/05/14 14:01
読書メモの為に下みたいなのを挿入したいのですけども。

Date:2004-01-26
Page:
Memo:

で、ムチャクソ頑張って下みたいなのを書きました。

(defun bookz ()
"Retune the current time as a string in Date from."
(format-time-string "Date:%04Y-%02m-%02d\nPage:\nMemo:")
)
(defun insert-bookz nil
"Insert bookz."
(interactive)
(insert (bookz))
)
(define-key global-map "\C-c\C-d" 'insert-bookz)

なんかもっと綺麗に書く方法とかありますか?

209 :名無しさん@お腹いっぱい。:04/05/14 15:39
>>208
> なんかもっと綺麗に書く方法とかありますか?
ispellを使う、とか

210 :名無しさん@お腹いっぱい。:04/05/14 16:34
しかしそれでもfromを見つけられない罠

211 :名無しさん@お腹いっぱい。:04/05/14 17:04
queequegも利用してみるとか? 試したことないけど。

212 :名無しさん@お腹いっぱい。:04/05/14 18:41
そのまま翻訳にかけてみるのも手かもな

213 :204,206:04/05/19 22:32
>>207 コメントありがとうございます
namazu-search-num が 0 になってない?
おかげさまで以下のようにしてうまく行きました
(setq namazu-search-num 20)
...
(namazu 0 namazu-default-dir (current-word))
てっきりnamazu-search-num と
namazu の第一引数は同じにするものだと思いこんでいました
ありがとうございました

214 :名無しさん@お腹いっぱい。:04/05/26 15:39
(defun display-binaried-file (file)
(interactive "fFilename: ")
(with-output-to-temp-buffer "Binary"
(with-temp-buffer
(let ((addr 0)
s)
(insert-file-literally file)
(goto-char (point-min))
(while (re-search-forward "\\=\\(?:.\\|\n\\)\\{1,8\\}" nil t)
(princ (format "%08X:" addr))
(setq s (match-string 0)
addr (+ 8 addr))
(mapc (lambda (c)
(princ " ")
(dotimes (i 8)
(princ (if (zerop (logand 128 c)) "0" "1"))
(setq c (lsh c 1))))
s)
(princ (format "%s %s\n"
(make-string (* 9 (- 8 (length s))) ?\040)
(mapconcat (lambda (c)
(if (and (<= 32 c) (< c 127))
(char-to-string c)
"."))
s
nil))))))))


215 :名無しさん@お腹いっぱい。:04/05/26 15:49

>>214
あんがとね。
いやー、あんた最高だよ。


216 :名無しさん@お腹いっぱい。:04/05/28 20:45
>>214
イイ!!

> (mapc (lambda (c)
> (princ " ")
> (dotimes (i 8)
> (princ (if (zerop (logand 128 c)) "0" "1"))
> (setq c (lsh c 1))))
> s)

でもここはdotimesよりそのまんま

(princ (if (zerop (logand 128 c)) "0" "1"))
(setq c (lsh c 1))
(princ (if (zerop (logand 128 c)) "0" "1"))
(setq c (lsh c 1)) ....

のように羅列した方が少々早くなんない?(コードが汚くなるのは認めるけど)
1 character ずつ dotimes やってたら大きなファイルの時に
かなり遅れるかもしれんし。

217 :名無しさん@お腹いっぱい。:04/05/28 21:27
速度命!ならビットパターンを表す文字列をキャッシュしといた方が簡単確実。


218 :名無しさん@お腹いっぱい。:04/05/28 23:47
>>216
速度を考えるなら、大量のリストや文字列を作らないようにすることも重要と
考えている。その点で 214 は文字列に関してちょっとイージー、というか所
詮ワンショットの関数。バッファ終端の判定を楽にしたいという理由だけで8
バイトずつ文字列に突っ込んでいる。

> (princ (if (zerop (logand 128 c)) "0" "1"))
> (setq c (lsh c 1))
> (princ (if (zerop (logand 128 c)) "0" "1"))
> (setq c (lsh c 1)) ....
せめて、
(princ (if (zerop (logand 128 c)) "0" "1"))
(princ (if (zerop (logand 64 c)) "0" "1"))
(princ (if (zerop (logand 32 c)) "0" "1")) ...
だな。
(princ (mapconcat
(lambda (mask) (if (zerop (logand mask c)) "0" "1"))
'(128 64 32 16 8 4 2 1)
nil))
はありだった。

insert-file-literally は insert-file-contents-literally じゃなきゃだめ。


219 :名無しさん@お腹いっぱい。:04/05/29 02:41
(do ((x 128 (rsh x 1)))
((<= x 0))
(princ (if (zerop (logand x c)) "0" "1")))

220 :名無しさん@お腹いっぱい。:04/05/29 03:06
たった 256 個だから
(defconst byte-to-bit-string
(let ((v (make-vector 256 nil)))
(dotimes (i 256) ...)))
してあらかじめ作っとけばいいじゃん。

221 :名無しさん@お腹いっぱい。:04/05/29 11:45
(defconst byte-to-bit-string
(let ((a '("0" "1"))
(f (lambda (&rest x)
(let ((x (reverse x)) (r '("")))
(while x
(setq r (apply #'append (mapcar (lambda (x) (mapcar (lambda (y) (concat x y)) r)) (car x))))
(setq x (cdr x)))
r))))
(funcall f a a a a a a a a)))

222 :名無しさん@お腹いっぱい。:04/05/29 12:05
なんかビット絡みはついてけない(´・ω・`)ショボーン

223 :名無しさん@お腹いっぱい。:04/05/29 14:07
>>219
rshって、remote shellで実行するのか?

昔から思ってたんだけど、logand/logiorってRMSのチョンボだな。
logicalじゃなくてarithmaticだろ。
またnatnumpってのもあるけど、0はnatunal numberじゃない。


224 :名無しさん@お腹いっぱい。:04/05/29 14:13
>>223
> 0はnatunal numberじゃない。
定義による。
0を自然数に含めることもある。
ttp://www.ss.u-tokai.ac.jp/~itai/column/three.html

225 :名無しさん@お腹いっぱい。:04/05/29 14:32
>>224
そうか。
じゃMITじゃビットAND/ORもlogicalって呼ぶのかもしれないな

226 :名無しさん@お腹いっぱい。:04/05/29 14:39
>>223
aithmatic じゃなくて bit-and/or operatorか。


227 :名無しさん@お腹いっぱい。:04/05/29 16:17
(defun write-binaried-file (filename)
(interactive (list (read-file-name "Write file: " nil buffer-file-name
nil buffer-file-name)))
(let (i
buf
temp-buffer-show-hook)
(with-output-to-temp-buffer " *outbuf*"
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(while (re-search-forward "^\\([0-F]+\\): +\\(?:\\(?:[01]\\{8\\}\\) \\)\\{8\\}" nil t)
(goto-char (match-end 1))
(setq i 0)
(while (< i 8)
(re-search-forward "[01]+")
(princ (char-to-string (string-to-number (match-string 0) 2)))
(setq i (1+ i))))
(if (re-search-forward "^\\([0-F]+\\): +\\([01]\\{8\\}\\) ")
(progn
(goto-char (match-beginning 2))
(setq i 0)
(while (and (< i 8) (re-search-forward "\\=\\([01]\\{8\\}\\) " nil t))
(princ (char-to-string (string-to-number (match-string 1) 2)))
(setq i (1+ i)))))
(setq buf standard-output))))
(set-buffer buf)
(let ((coding-system-for-write 'no-conversion))
(write-region (point-min) (point-max) filename))
(kill-buffer buf)))


228 :名無しさん@お腹いっぱい。:04/05/29 17:02
>>227
save-XX 2つはwith-output-to-temp-bufferの外の方がよかった。

エラーチェックなんてほとんどしてないので、上書きとかしない方がいいかも。


229 :名無しさん@お腹いっぱい。:04/05/29 17:37
たいしたことではなくてすまんのだが、write-binaried-file
はwrite-file-in-binaryの方がアメ人側からするとわかりやすいとおもた。

230 :名無しさん@お腹いっぱい。:04/05/29 17:55
今になって知ったんだが、hexl-modeは外部プログラムを使ってたんだな。

2進表示より、右側に全角文字を表示をして欲しいんだが、そういうことを考
えると、やっぱelispだ。


231 :名無しさん@お腹いっぱい。:04/05/29 18:08
全角文字

232 :名無しさん@お腹いっぱい。:04/05/30 20:15
----BEGIN BASE64----(binary-dump.el.gz)
H4sICJnAuUAAC2JpbmFyeS1kdW1wLmVsAKVY227jNhB9tr/iwEBjqjUDy/fUcdwm
zQIF+lT0cR8qS0wsrCx5KWWzBop+e4ek7rKcRM2LKR7OhTPDM2TW6zV2fujIE/de
DsdrEYBzDtcN4EaeHz4jPsWJOOApkvD8+Bg4JzVrZKBl+mtS8sC/48/Hv+CW1enZ
B/6ET7//8YgkQiyEGfthVUWfiW9OwF/3IuRudDj6gaA5Tzy90EKP3OFSOB7fnRIB
5lt9gAUiAWNSPNNEmAgZgpGTByfBQP7gDWhBvIcPblvqjyRIxn8C22BMWPTshB5s
+AT1/lZ6HA8j0maByTl+2sCmkZrA7YpEUg1AthZyZqGx9p+NmtcGq+6/Sj8RfO/v
fPJarSSPDxSBJJJKM2lVvmkdVxhp323Yc4sUa1Fs7WI4Lu+nLjPrIDPtIDPpIGN3
kBl/XAY3HWRWb8iY71Epby1JDqIPJRnLDs4uOsh0KCZ0KCZ0KCZ0KCZ0KCa8VUzv
TnLKRLUMM1rmOkHQwjQYNslg2CgdIiTt/lukppeVPW11lLt7R6a8qfhrhg2F5p0W
Rr+0bYbd3dGpod8rTObzKsuSjVtMJ0WIr60cuMP23ypghpo5tYrGXg7OF8Fj8RUs
LJF/gNAP8tTtqWmA3WpHY5F8BW3N5gitnLvNNGXHjcKY4CCDgobBvN3EmUnneAxO
GNKPoBCwg3N0VVAD57DzHBVcsHqn0s2l18uAfBNha4OoW9Sm3m250KHM9npm135W
jX4WD0oMtj9bxrvz7qnUU6mk54EZLJGq97MfcQPGsUpVtbc7vZu0+P73lowe/wNO
U5Zdquuq88ZvXZqDz+Gg5LwqigR78V0Z4t+ES4eKSkbL8STKZgZjezKdzRfL1c2v
9w+/PX4atOze8TwpYsqmOXamSuVSnT0mF6DDM6HTc1Xp8gSPqh5Y5+RmHeXG3eTs
RUe5STc5dIwLOsYFOi6rd4gZmIrnPE2lLO6Hol7wZwpDl2ujzImXWgBzAHSd91PD
ZIirVUcZPUvnQAbVlyfo7k5CxUVcF6Btmw2r22y/R1weHfX91XwbriCyb/DfqomW
9lmgSjfdhcsT4iicpOBf2pR0QncPOc/WKAbHej1qKi6cwhnUvohOLqLTi+jsIjq/
iC4uossCzUnnfAZFeCaDQ2YjzVqaO/UOkeOssY6x2ZiWuyPki1WOv7ZbFYO0ISeQ
U+q7lBBQ9qTysJd18KXSp25J9Lyjj1ef7jU7AU8QJb64ifD6WYcp2de3KjWkw3+T
Dy0rXduycpUNx5ZVdsEuL6S31WJWgSc1WPWiEjytwURjZXhWg1cVdF5Dq5YXNTQ3
nPLHOP3MUlQSzdJURO9COrefw/P5zAopxfL41lOef6t6043QvOt5+q6n+2fpvT7D
9h6D++JlPkBmasjOUwuuWypWWVw3/71AbBhTk5Xiuv8fdZ8WR30QAAA=
----END BASE64----


233 :名無しさん@お腹いっぱい。:04/05/30 21:00
>>232
いやー、かなり早くなったね。

234 :名無しさん@お腹いっぱい。:04/05/30 22:55
>>232
すごいすごい。

せっかくなので、アドレス部の表示をファイル位置にできたりしませんか?
(insert-file-contentsでBEG ENDを指定した場合など)


235 :名無しさん@お腹いっぱい。:04/05/30 23:34
ヽ(`Д´)ノ cclってナンダヨー

236 :名無しさん@お腹いっぱい。:04/05/31 11:55
>>235
code convetion lang

237 :名無しさん@お腹いっぱい。:04/05/31 15:49
16bit,32bit,64bit,128bit単位の表示、および
ビッグ・エンディアン、リトル・エンディアンの切り替え
もできれば、言うこと無しだが・・・

238 :名無しさん@お腹いっぱい。:04/06/03 17:13
(defun bdccl-write-8bit (reg terminator bit)
(let ((x (+ bit 8)) (r (list `(write ,terminator))))
(while (< bit x)
(setq r (cons `(if (,reg & ,(lsh 1 bit)) (write ?1) (write ?0)) r))
(setq bit (+ bit 1)))
r))

(defun bdccl-write-hibit (reg terminator)
(bdccl-write-8bit reg terminator 8))

(defun bdccl-write-lobit (reg terminator)
(bdccl-write-8bit reg terminator 0))

239 :名無しさん@お腹いっぱい。:04/06/09 23:51
すいません初歩的質問なんですが、リファレンスマニュアルを最終的にPDF化したいのですが、
ftp://ftp.ascii.co.jp/pub/GNU/elisp-manual-20/elisp-manual-20-2.5-jp.tgz
これを展開して、README.jisを読んだんですが、elisp.dviの作成手順で
GNU Emacs Lisp Reference Manual のソースツリーのファイルtexinfo.texが
どこにあるのだか分かりません。どこにあるんでしょうか?



240 :名無しさん@お腹いっぱい。:04/07/02 17:30
>>239
texinfo のソースツリーに入ってます。
ttp://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/doc/

ところで、bookshelf.jp にある私的日本語化プロジェクトは
texinfo 形式のソースがあるのかな?

241 :名無しさん@お腹いっぱい。:04/07/02 21:33
>>240
texinfo でやってますので,ソースはありますけど,公開はしてません.


242 :名無しさん@お腹いっぱい。:04/07/02 21:42
では公開していただけますか?

243 :名無しさん@お腹いっぱい。:04/07/03 09:21
>>241
あ、texinfoのやつがあると僕もうれしい。支障なかったら公開きぼんぬです。

244 :名無しさん@お腹いっぱい。:04/07/03 09:45
>> 242,243
支障ないので,そのうちに公開しておきます.
少しお待ちを

245 :名無しさん@お腹いっぱい。:04/07/13 23:34
>>232
(defun bdccl-write-hibit (reg terminator)
`((if (,reg & ,(lsh 1 15)) (write ?1) (write ?0))
(if (,reg & ,(lsh 1 14)) (write ?1) (write ?0))
(if (,reg & ,(lsh 1 13)) (write ?1) (write ?0))
...

(lsh 1 15) これを下のように定数にしないのは
マクロ展開されるて、実行時には関係なくなるから?

(defun bdccl-write-hibit (reg terminator)
`((if (,reg & 32768) (write ?1) (write ?0))
(if (,reg & 16384)) (write ?1) (write ?0))



246 :名無しさん@お腹いっぱい。:04/07/13 23:37
>>232
と同じような Hex dump ってあるのかな? そっちの方が僕は使うな。
binary にしてどんな時に便利か教えてくれ。

247 :名無しさん@お腹いっぱい。:04/08/11 23:45
ほしゅ。


248 :名無しさん@お腹いっぱい。:04/08/15 01:57
つか、ほしゅしなくても落ちないのでは?

249 :名無しさん@お腹いっぱい。:04/09/07 11:11
連番を作るのに、こんなのを作ってるんだけど、
うまく動かない。 どこが悪いのかな…。

(do ((i 1)) ((> i 10))
(insert (format "Sequence%d\n" i))
(setq i (1+ i)))


250 :名無しさん@お腹いっぱい。:04/09/07 11:43
あなたは elisper ではありませんね?

251 :名無しさん@お腹いっぱい。:04/09/07 14:16
先生!
このマンコ関数はどうでしょう?
(defun manko(i)
(cond ((> i 0) (insert (format "Sequence%d\n" i)) (manko (- i 1)))
(t nil)))
(manko 10)

252 :名無しさん@お腹いっぱい。:04/09/07 23:36
number-sequence

253 :249:04/09/08 11:31
>>251

ありがとう。
でも、こういわれてしまう…。

Debugger entered--Lisp error: (void-function manko)
(manko 10)
eval((manko 10))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
* call-interactively(eval-last-sexp)
recursive-edit()
byte-code("堰ニ!秩ー∨ 秩ー¬!秩ッ⊃n?


254 :名無しさん@お腹いっぱい。:04/09/09 21:01
(do ((i 1 (1+ i)) ((> i 10))
(insert (format "Sequence%d\n" i)))

255 :名無しさん@お腹いっぱい。:04/09/09 22:02
ちゃんと書きなよ。
しかし do なんか使わなくても。

256 :249:04/09/09 22:37
>>254

環境が悪いのでしょうか。

Debugger entered--Lisp error: (invalid-function (i 1 (1+ i)))
((i 1 (1+ i)) ((> i 10)) (insert (format "Sequence%d\n" i)))
eval(((i 1 (1+ i)) ((> i 10)) (insert (format "Sequence%d\n" i))))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
* call-interactively(eval-last-sexp)


257 :名無しさん@お腹いっぱい。:04/09/09 23:43
>>249
そもそも「うまく動」いたらどうなるんだ?
期待してる結果が書いてない。

258 :名無しさん@お腹いっぱい。:04/09/10 01:03
(require 'cl)

(do ((i 1 (1+ i))) ((> i 10))
(insert (format "Sequence%d\n" i)))

259 :名無しさん@お腹いっぱい。:04/09/10 09:17
なんか覚えにくい構文だな。
まだloopのほうが、という気がした。

260 :名無しさん@お腹いっぱい。:04/09/10 10:12
eldocでミニバッファに出るから覚えなくても書ける。
でも普通はdotimesなんかを使うとは思うんだが。


261 :名無しさん@お腹いっぱい。:04/09/10 11:14
エコーエリア

262 :249:04/09/10 17:28:00
>>258

ありがとう!!

(require 'cl)

これが不足でした。

(do ((i 1 (1+ i))) ((> i 10))
(insert (format "Sequence%d\n" i)))

(do ((i 1)) ((> i 10))
(insert (format "Sequence%d\n" i))
(setq i (1+ i)))

どちらでも動きました。


しかし。
doなんてとか、loopのほうが、っていうなら、
サンプルを掲示してみてはどうでしょう。
言い合いをしているだけでは何にもならないじゃないですか。


263 :名無しさん@お腹いっぱい。:04/09/10 17:48:24
「してくれないでしょうか?」の間違いではなくて?
個人的には、何故doでやってみようとしたかに興味が少しある。

264 :260:04/09/10 18:49:50
>>262
調べろよ、それくらい。
見て猿真似できるサンプルが出てこないと何も出来ない池沼なのかよ。
キーワードが出てくるだけで十分だろ。
# cl-macsにloopがあるとは知らんかった

そもそも「言い合い」になるほど骨のある内容じゃなかったし。


265 :名無しさん@お腹いっぱい。:04/09/10 19:05:04
池沼というのは、マンコ関数でひっかかってる時点で明らか。>>253

266 :260:04/09/10 19:15:10
言われてみればその通りだった。orz


267 :名無しさん@お腹いっぱい。:04/09/12 01:45:39
(let ((i 0))
(while (< i 10)
.....
))
とかの方が分かりやすくて好きなんだけどな

268 :名無しさん@お腹いっぱい。:04/09/12 04:07:53
viperで、vimの"*"コマンドを実装した。

(define-key viper-vi-global-user-map "*" 'viper-exec-word-search-nearest-cursor)
(define-key viper-vi-global-user-map "#" '(lambda () (interactive) (viper-exec-word-search-nearest-cursor t)))
(define-key viper-vi-global-user-map "g*" '(lambda () (interactive) (viper-exec-word-search-nearest-cursor nil t)))
(define-key viper-vi-global-user-map "g#" '(lambda () (interactive) (viper-exec-word-search-nearest-cursor t t)))
(defun viper-exec-word-search-nearest-cursor (&optional reverse unbound)
"Emulate vim \"*\" command."
(interactive)
(let ((word (viper-surrounding-word 1 1)))
(when (stringp word)
(setq viper-s-string (if unbound word (concat "\\<" word "\\>")))
(setq viper-s-forward (not reverse))
(setq viper-search-history (cons viper-s-string viper-search-history))
(setq viper-intermediate-command 'viper-exec-word-search-nearest-cursor)
(viper-search viper-s-string viper-s-forward 1))))


269 :名無しさん@お腹いっぱい。:04/09/12 09:49:16
>>268
おーなかなかいいすね。使わせてもらいまっさ。
でも g + hogehoge は viper 流の (viper-buffer-search-enable) の方が好き :-)

;; しかし viper 異様に重いよなあ…。ボクのマシンがボロなだけ?(´・ω・`)

270 :名無しさん@お腹いっぱい。:04/09/12 14:11:08
再帰好きなelisperの人は
max-lisp-eval-depth と max-specpdl-size に
どのくらいの値を設定してるの?



271 :268:04/09/18 10:06:39
www.vim.orgで公開されているscriptで定番のやつの実装。
;;; alternate files quickly
(defvar a-extension-map
'(("c" . "h") ("cc" . "h") ("h" . ("c" "cc")) ("emacs" . "viper") ("viper" . "emacs"))
"The corresponding associative list of extensions.")
(defun alternate-files-quickly ()
"A few of quick commands to swtich between source files and header files quickly."
(interactive)
(if buffer-file-name
(let ((ext (file-name-extension buffer-file-name))
(base (file-name-sans-extension (file-name-nondirectory buffer-file-name)))
data a_ext a_file)
(when (and ext base (< 0 (length ext)))
(setq data (cdr (assoc ext a-extension-map)))
(cond ((stringp data)
(setq a_ext data)
(when (< 0 (length a_ext))
(setq a_file (concat base "." a_ext))
(when (file-exists-p a_file)
(find-file a_file))))
((listp data)
(catch 'break
(while data
(setq a_ext (car data))
(when (and (stringp a_ext) (< 0 (length a_ext)))
(setq a_file (concat base "." a_ext))
(when (file-exists-p a_file)
(find-file a_file)
(throw 'break t)))
(setq data (cdr data))))))))))


272 :名無しさん@お腹いっぱい。:04/09/20 17:14:26
;;; filecache の対象を load-path にすると、
;;; .el 以外のファイルもついてきて面倒なので以外を消す
;;; 必要なのはあとで追加する

(defun file-cache-not-el-list ()
(let (nelist)
(dolist (list file-cache-alist)
(catch 'quit
(unless (string-match "^.*\\.el\\'" (car list))
(setq nelist (cons (car list) nelist))
(throw 'quit nil))))
nelist))
(file-cache-add-directory-list load-path)
(file-cache-delete-file-list (file-cache-not-el-list))
(file-cache-add-file-list '("~/.emacs" "~/.skk" "~/.wl" "~/.folders" "~/.bashrc"))


273 :名無しさん@お腹いっぱい。:04/09/20 17:58:29
cach - throw は何のため?

(defun file-cache-not-el-list ()
(delq nil (mapcar (lambda (list)
(unless (string-match "\\.el\\'" (car list))
(car list)))
file-cache-alist)))

274 :名無しさん@お腹いっぱい。:04/09/20 18:05:39
>>273
叩かれて強くなるためです
勉強になりました


275 :名無しさん@お腹いっぱい。:04/10/24 22:51:00
30 分ほど考えたり調べたりしましたが,わからなかったので質問させてください.

(list (list '("A" . "1") '("B" . "2"))
(list '("C" . "3"))
(list '("D" . "4") '("E" . "5")))



(list '("A" . "1")
'("B" . "2")
'("C" . "3")
'("D" . "4")
'("E" . "5"))


のように展開(?)するにはどうしたら良いのでしょうか?

276 :名無しさん@お腹いっぱい。:04/10/24 23:02:53
何をどう調べたり考えたりしたのか書いた方がいいと思うよ。
これこれを試してみたとか。

ヒントとしては、
mapc + append


277 :名無しさん@お腹いっぱい。:04/10/24 23:07:21
宿題なのかなー?

278 :名無しさん@お腹いっぱい。:04/10/24 23:09:05
展開後(?)の表記のしかたが悪い。
それを評価した結果になってほしいのか、まさにそれが欲しいのか。

279 :名無しさん@お腹いっぱい。:04/10/24 23:14:48
>>275
(apply #'append
(list (list '("A" . "1") '("B" . "2"))
(list '("C" . "3"))
(list '("D" . "4") '("E" . "5"))))


280 :名無しさん@お腹いっぱい。:04/10/24 23:16:21
>>275
http://pc5.2ch.net/test/read.cgi/unix/1083394705/405
これ書いたやつだろ。

>>276
mapcは違うと思うぞ。


281 :276:04/10/24 23:17:46
>>280
applyが思い浮かばなかったのさ……


282 :275:04/10/24 23:43:20
素早いレスありがとうございます.うまくいきました.

> 何をどう調べたり考えたりしたのか書いた方がいいと思うよ。
> これこれを試してみたとか。

GNU Emacs Lisp Reference Manual のリスト関連をあさっていました.

> 宿題なのかなー?
趣味です.

> 展開後(?)の表記のしかたが悪い。
> それを評価した結果になってほしいのか、まさにそれが欲しいのか。
おっしゃるとおりですね.勉強不足でした.

>>279
> (apply #'append
すみません,この「#'」はリファレンスマニュアルのどの辺をみれば良いのでしょうか?
ポインタだけでも教えて頂けるとありがたいです.

> http://pc5.2ch.net/test/read.cgi/unix/1083394705/405
> これ書いたやつだろ。
そうです.何か問題ありましたでしょうか?

283 :276:04/10/24 23:59:29
>>282
#'はemacs lispではほとんど'と一緒。関数にのみ使うと思っておいて。
refrence manualだけじゃなくてemacs-lisp-intro は読んだ?


284 :275:04/10/25 00:01:12
>> 283
まだ読んでません.どうも基礎がわかってないみたいなので,まずは
そちらから読んでみます.お世話になりました.

285 :名無しさん@お腹いっぱい。:04/11/09 12:28:51
(defun my-w3m-view-url-with-external-browser ()
"emacs-w3mから外部ブラウザを起動する"
(interactive)
(let ((url (or (w3m-anchor)
(ffap-url-at-point)
w3m-current-url)))
(message "Browsing <%s>..." url)
(start-process "external-browser"
nil
"C:/Program Files/Mozilla Firefox/firefox.exe"
url)))

FireFoxを閉じないと、↓こんなメッセージが出てEmacsも閉じられない・・・

Active processes exist; kill them and exit anyway? (y or n)

どなたかアドバイスをお願いします。



286 :名無しさん@お腹いっぱい。:04/11/09 12:45:52
>>285
unix なら PROGRAM に & を付ければ? って話なんだろうけど。
firefox.exe のオプションか別コマンドで「firefox に url を渡してする終
了する」ってなことができるんじゃないの?

287 :名無しさん@お腹いっぱい。:04/11/09 13:27:30
process-kill-without-query じゃない?

288 :名無しさん@お腹いっぱい。:04/11/09 14:01:40
ごもっとも orz

289 :名無しさん@お腹いっぱい。:04/11/09 14:19:05
Emacs 終了時に Firefox も終了したいわけじゃないんだよね。
プロセスをバックグラウンドで動かしっぱなしにするには、
BUFFER 引数を 0 にして call-process を
(call-process "C:/Program Files/Mozilla Firefox/firefox.exe" nil 0 nil url)
こんな感じで呼び出してやればいい。

290 :289:04/11/09 14:21:42
う、navi2ch のデフォルトフィルタにひっかかった。
>>289
( call-process "C:/Program Files/Mozilla Firefox/firefox.exe" nil 0 nil url)

291 :285:04/11/09 14:57:44
レスありがとうございます。

>>286
firefoxのオプションを調べてみたんですが、適切なものが見つかりませんでした。

>>287
説明が足りなかったようで、すいません。
僕がやりたかったのは、emacsから起動したfirefoxは閉じずに
emacsだけを終了するというものです。
process-kill-without-queryを使ったら、問い合わせなしにfirefoxも
終了されてしまったので、どうやら僕がやりたいこととは違ったようです。

>>290
おおっ、うまくいきました。
ちなみにコードは以下のように変更しました。

(defun my-w3m-view-url-with-external-browser ()
"emacs-w3mから外部ブラウザを起動する"
(interactive)
(let ((url (or (w3m-anchor)
(ffap-url-at-point)
w3m-current-url)))
(message "Browsing <%s>..." url)
( call-process "C:/Program Files/Mozilla Firefox/firefox.exe" nil 0 nil url)))

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

292 :名無しさん@お腹いっぱい。:04/11/09 23:32:45
>>290
start-process と call-process の第3引数を0にするのってそんな違いがあっ
たのか。今までどっちにするか気分で決めてた…(´Д`)

293 :名無しさん@お腹いっぱい。:04/11/13 13:00:32
8進数を10進数に変換する関数とかあったりする?
自前でゴリゴリやるしかないスか?
逆は format でできるんだけど…。

294 :名無しさん@お腹いっぱい。:04/11/13 13:08:06
>>293
(string-to-number (number-to-string 10) 8)
=> 8
(string-to-number (number-to-string 20) 8)
=> 16


295 :名無しさん@お腹いっぱい。:04/11/13 14:43:54
>>294
がーん、string-to-number って基数を指定できるのか、知らなかった。
ありがとう。

296 :名無しさん@お腹いっぱい。:04/11/21 21:51:33
(let ((y 1.2))
(while (>= y -1.2)
(let ((x -2.0))
(while (<= x 1.0)
(let ((zx x) (zy y) (v 126))
(while (and (< (+ (* zx zx) (* zy zy)) 4.0) (> v 32))
(let ((temp (+ (* 2 zx zy) y)))
(setq zx (+ (* zx zx) (- (* zy zy)) x))
(setq zy temp))
(setq v (- v 1)))
(insert v))
(setq x (+ x 0.04))))
(insert "\n")
(setq y (- y 0.1))))

297 :名無しさん@お腹いっぱい。:04/11/27 21:42:29
call-process を呼ぶ時って apply 使って呼んでるコードが多いんだけど、ど
うしてなの?
引数をリストで渡せるから? とか思ったんだけどそうでない場合でも apply
使ってることあるしなあ。なぜざんしょ?

298 :名無しさん@お腹いっぱい。:04/11/28 13:55:08
元々は直接呼んでたのが、何らかの必要があって apply を使うようになり、
その後の変更で apply である必要が無くなったんじゃないの?

299 :名無しさん@お腹いっぱい。:04/12/04 07:28:21
(pol2str "5X^2-3") >>> ((5 2) (-3 0))

入力がSTRINGで出力をリスト形式で出すようなpol2strを定義したいんですけど、
どうかいたらいいかわかります?
反対の作業はなんとなくできたんだけどこれはわからなかったです。


300 :297:04/12/04 08:42:10
>>298
遅くなったけどサンクス。そんな経緯があったのか。

301 :名無しさん@お腹いっぱい。:04/12/04 10:31:36
一気に変換するか、
一回トークンを切り出してリストに変換、あとはリスト処理。

302 :299:04/12/04 14:13:51
情報どうもっす。
色々調べたけど、TOKENに切り出す方法が分からないので諦めます。

303 :名無しさん@お腹いっぱい。:04/12/04 14:28:11
初心者なのはみえみえなんだからちゃんと教えてやれよ。


304 :名無しさん@お腹いっぱい。:04/12/04 22:08:21
----BEGIN BASE64----(font-lock-test.el.gz)
H4sICDWssUEAA2ZvbnQtbG9jay10ZXN0LmVsAI2RzW7DIBCEz/FTrHLJopZDnqdu
FQzrBAVYC0gjv30B569qWtVH77czOwMaGk8B/CxHDlk61kc5qZhIOpsmQGe9zaID
wPOBAmAkmUhFfSh8PKtoYI19j28fKKAP7y99L9bQlqCtlUVHGRCLiwbUHIzNloPU
KhEE67rVqlFp9gM7WbE6B7QhUwwy8ZgLs1CF8yoX85SjDXsZWE6RJ4rZUoKtEKLJ
4Sdb06SqUjERdXIRUMFAHXVVETkCDnMmqdnQzV1ODRHdxbWcdxri5Wf7OnxSXKS9
TVkeaT5zNAmwFbfkJ0ceNvhr0VvY3Ae3O4Ly5SqlqbR5zYB2hDt6NetWeAqOUnH1
5AeK0Bx/gi0UJsralOxOpfwMgh2+VoHH4oyRmeu5+fHWW9r7Rq2n0gfmI2xqPtle
Uy2hfK16mf1V3zcR8kqnVtX/178A0ylMGtwCAAA=
----END BASE64----

http://pc5.2ch.net/test/read.cgi/unix/1083394705/857-869
の流れでちょっとやってみたもの。

- とりあえずつつましく font-lock-keywords の末尾に追加
- でも OVERRIDE はt だったり。本当は 'keep がいいんだろうけど
- っつーか t にしててもところどころにしか色付かない。jit-lock だから?
- symbol-function の結果を直接使うんじゃ駄目なんだっけ?
- もうちょっと正規表現も格好よくしたいけど

とかいろいろ疑問があるけどまだあまりテストしてないです。もっとスマート
なのが出来たら教えて下さい。

305 :名無しさん@お腹いっぱい。:04/12/04 23:01:19
>>304
hook ってわかってるか?


306 :名無しさん@お腹いっぱい。:04/12/05 02:34:57
なんか妙にややこしいことしてるな。
(font-lock-add-keywords 'emacs-lisp-mode '((REGEXP SUBEXP (progn ...))))
みたいな感じでいいんじゃないのか。

307 :名無しさん@お腹いっぱい。:04/12/05 03:00:41
>>304
> - っつーか t にしててもところどころにしか色付かない。jit-lock だから?
my-font-lock-parse-lisp で、
(and func
(or (byte-code-function-p func)
(subrp func)))
が nil になったときにそのまま nil を返しちゃまずい。
もう一回探さないとそれ以降に色が付かないぞ。

308 :名無しさん@お腹いっぱい。:04/12/05 22:58:55
>>306
最初そっちでやっててリストの先頭に登録されるのが嫌だったんですが新ため
て見たら APPEND ってフラグがありますね。そっちに変更してみました。

>>307
ごもっとも。書いててなんか違和感あったんだけどなんで気付かなかったんだ
ろ orz

とりあえずそれなりに色付くようになりました。どもー。

309 :名無しさん@お腹いっぱい。:04/12/06 21:44:56
しつこくてスマン。間違いがあったので訂正。
>>304 の condition-case んとこは void-function だけ受けるんじゃ駄目で
すね。error で受けてやれば全部色付くようになりました。

310 :名無しさん@お腹いっぱい。:04/12/07 13:43:05
>>309
なんかいろいろ修正があったようなのですが、自分も一度使用してみたいので、
よかったら修正版 font-lock-test を navi2ch-base64-insert-file してもらえるとうれしいです

311 :名無しさん@お腹いっぱい。:04/12/07 22:35:01
----BEGIN BASE64----(font-lock-test2.el.gz)
H4sICDSvtUEAA2ZvbnQtbG9jay10ZXN0Mi5lbADdVEFu3DAMPNuvIPZiCoWA5to8
JU4Br01vhFiSK8nY+j/5QD6RS5FP9CWl6G63aex0DznlZJjiDDkzlrGjvm9aAjvr
/NQ0mDhq27TBQ4WYAL/0PtAh+Ml1sIvUwCEQuZ1SCpwZVInrFHHahzWGcQrjQP+F
95Nr1+CWOjNZ2A/TPxyTEwbvkh58e/9CCA7GmqRKADzekQMMpFlJaO8YEI5NYOKb
Cm/rGm++ooLa3X6qa7UDwYEgGesDYMNLoPO8liX7DfBASSf6nvQY/EghzfAZKtGD
tkk8IKZg3AGulCqLoqjwvGHrrSV+ke5zmddxjJCyyiiQ4a13nUnGO902kbJu5gOM
s937QezKh4DGJQpOR9+nlyto509LGop5oRM3s1MIrC6bmau46eRiZG7a9lyS/wiW
ZyHjhvPFm87nBk7nggCKlQA2EhBfLwlA7s5HCGA/J2JIR39c1uPpm924EG/fiHKJ
5aJgLolEnP4rkvN503X6nuajD12ESpplj2aRYVnU4s32XbuCau2vzKNyOu81SyS8
GiXVd54k3++rSVL9Pen6GohFRr3IZTZ4+Pn0+Pz88KP8BYGg2TyqBgAA
----END BASE64----
>>310
今のところこんなかんじに落ち着いてます。lisp なだけにかなりの部分に色
付くため1色だと逆に見難かったので3色使ってます。

312 :310:04/12/08 00:06:08
>>311 ありがとうございました
しかし、これは良くできていますね。
こうやって見てみると自分が普段どれだけ多くのsubrな関数を使用しているのかわかります。
感謝です。

313 :名無しさん@お腹いっぱい。:04/12/08 03:56:47
minibuffer で作業してるときにたまに message が表示されて
自分が入力してるのが消えるときがあるじゃないですか。
で、そんなときに消えないようにと以下の advice を付けてみたんですけど、
今いち視線が上下してよろしくない気がします。
何かいい案はないですかね?
momentary-string-display をうまく使えばいい感じになりそうな気もするけど。。。

(defadvice message (around if-minibuffer-use-momentary-string-display activate)
(if (window-minibuffer-p (selected-window))
(save-window-excursion
(save-selected-window
(select-window (display-buffer (get-buffer-create "*message on minibuffer*")))
(delete-other-windows)
(erase-buffer)
(insert (make-string (window-height) ?\n)
(format (ad-get-arg 0) (ad-get-arg 1)))
(goto-char (point-max))
(recenter))
(sit-for minibuffer-message-timeout))
ad-do-it))


314 :名無しさん@お腹いっぱい。:04/12/08 08:55:07
>>313
> minibuffer で作業してるときにたまに message が表示されて
> 自分が入力してるのが消えるときがあるじゃないですか。

漏れも、LSDBを入れたらその問題で悩みました。Fontifying... という
メッセージがじゃまをするので、~/.emacs で (setq font-lock-verbose nil)
しましたが、こういう手もあったとは。


315 :名無しさん@お腹いっぱい。:04/12/08 22:46:40
>>313
何となくわかればいいだけなら、こんな感じでは?
一発目だけポインタを移動するとか、小細工はあってもいいけど

(defadvice message (around my-message-ad activate)
(if (window-minibuffer-p (selected-window))
(let ((executing-kbd-macro t))
ad-do-it
(display-buffer "*Messages*"))
ad-do-it))



316 :名無しさん@お腹いっぱい。:04/12/08 23:47:51
>>315
ポインタってポイントのコト?


317 :名無しさん@お腹いっぱい。:04/12/09 01:29:52
結局こんなんになりました。
これだと視線の上下もないしいい感じ。
ついでに、minibuffer での isearch のときもいい感じになってくれました。
ただ signal とかの emacs の中の人が処理してるやつはやっぱりだめっぽいです。

(defadvice message (around minibuffer-workaround activate)
(if (window-minibuffer-p (selected-window))
(let ((pos (point-max)))
(when (ad-get-arg 0)
(unwind-protect
(progn
(save-excursion
(goto-char pos)
(insert "\n" (format (ad-get-arg 0) (ad-get-arg 1))))
(sit-for (or minibuffer-message-timeout 1)))
(delete-region pos (point-max)))))
ad-do-it))


318 :名無しさん@お腹いっぱい。:04/12/09 02:00:56
なんかいもごめんです。
さっきのやつの insert のとこを
(insert "\n" (apply 'format (ad-get-arg 0) (ad-get-args 1))))
に変えないとダメポです。

あと、skk と相性がわるいなぁ。


319 :名無しさん@お腹いっぱい。:04/12/10 22:21:05
http://example.jp/foo bar/~baz/
こんな url を encode して
http://example.jp/foo%20bar/%7Ebaz/
を得たいんだけど、そのものズバリな関数がありそうで見つからない。

(browse-url-file-url "http://example.jp/foo bar/~baz/")
=> "http://example.jp/foo%20bar/~baz/"

~ は encode してくれないのね。

(w3m-url-encode-string "http://example.jp/foo bar/~baz/")
=> "http://example.jp/foo+bar/%7ebaz/"

+ か(´・ω・`)
今は自力でやってるけど、どっかにあったりする?

320 :名無しさん@お腹いっぱい。:04/12/10 22:57:43
~ をエンコードすべき理由が思い当たらないんだけど

321 :名無しさん@お腹いっぱい。:04/12/10 23:22:32
同一性をチェックしたいとか?

322 :名無しさん@お腹いっぱい。:04/12/11 10:59:40
RFC1738 の時代には「+」が unreserved で「~」はエスケープが必要だった。
後に RFC2396 ができて「+」が reserved になり、「~」は unreserved に
なった。

> ~ は encode してくれないのね。
は RFC2396 に

> + か(´・ω・`)
は RFC1738 にしたがっているのだろう。



323 :名無しさん@お腹いっぱい。:04/12/11 14:27:03
つまりどれにも準拠してないってことね。


324 :名無しさん@お腹いっぱい。:04/12/11 16:19:09
え?

325 :319:04/12/12 12:55:16
発端は wget -x で件の url を取得するとああいったディレクトリを掘るんで、
それを emacs 側で知りたいってことからでした。
>>322 氏の解説のように変遷があると既存の関数でズバリな encode を期待す
るのは無理がありそうですね。自力 encode で納得しときます。
レスどーもでした。


326 :名無しさん@お腹いっぱい。:04/12/12 21:58:29
wgetってなんで ~ をエンコードしちゃうんだろうね。
だれかハックしてエンコードしないバージョンを配布してくれ。


327 :名無しさん@お腹いっぱい。:04/12/12 22:20:03
そんなんハックとはいえん

328 :名無しさん@お腹いっぱい。:04/12/13 12:21:41
一文字変えるだけ?

329 :名無しさん@お腹いっぱい。:04/12/21 22:10:29
最近Emacsを使うだけの立場から少しいじろうと思って、
「やさしいEmacs-Lisp講座」など読みました。

しかし、この板に書かれてるようなLispははるかに上でびっくりしました。
hookとかどこにもほとんど説明がないし、始めはshow-paren-modeが気に食わなくて
対応する括弧のbackgroundではなく、括弧そのものがboldでredになるようにしたい
と思ったのですが第一歩が踏み出せません。

cc-mode.elとかみれば参考になるかと思いきや、やはり難しい。。
faceというのをいじればよいことまでは分かったのですが、他の機能もごちゃごちゃ
ついているので、boldにしたりするのにどれが本当に必要なものか見分けがつきません。

みなさんはこのギャップをどこで勉強して埋められたのですか?
よろしければ教えてください。
そして、こんな自分にどうやって、そして何を勉強してよいのかアドバイスください。
よろしくお願いします。

330 :名無しさん@お腹いっぱい。:04/12/22 00:43:21
知識に上に下もないと思うけど。

「やさしいEmacs-Lisp講座」は自分も一番最初に読んだ。elispの基本を押さえている
し、かなり良い本だと思う。

自分の場合は、その知識を元に .emacs をいじったり、他人の .emacs を覗いたり、日
本語 Info で分からないこと調べたりしていくうちに、個人レベルでやりたいことはで
きるようになった。

その時は分からなくても、何ヶ月後かに調べてみたら、あっさり分かったりするので、
焦らずに知識を蓄えていくのが一番の近道ではないでしょうか。


331 :名無しさん@お腹いっぱい。:04/12/22 01:09:28
>>329
(show-paren-mode) の評価より先に
show-paren-match-face を上書きすると変えられるよ.
ちょっと paren.el のソース見たけどこんな感じ.

(defface show-paren-match-face '((t (:foreground "red" :bold t))) nil)
(show-paren-mode t)

この際だから mic-paren.el でも捜して比較してみたらどうでしょう.


332 :名無しさん@お腹いっぱい。:04/12/22 01:33:27
>>331
揚げ足取るわけじゃないけど、、、
set-face-*()で変えるほうが自然じゃない?

(show-paren-mode 1)
(set-face-foreground 'show-paren-match-face "red")
(set-face-bold-p 'show-paren-match-face t)


333 :名無しさん@お腹いっぱい。:04/12/22 01:38:24
>>332
確かにこっちのほうがスマートだね.
何でオレ, あんなふうに書いたんだろ….


334 :名無しさん@お腹いっぱい。:04/12/22 04:07:45
>>330-333
ありがとうございます!あれから少し探してみたのですが、
どうも各モードにどんな変数があるかをInfoで見つけて、
それをいじるというのがカスタマイズの初歩のようですね。


335 :名無しさん@お腹いっぱい。:05/01/07 00:10:45
diredモードで拡張子ごとに色を付けたいんですけどどうやったらいいですか?

336 :名無しさん@お腹いっぱい。:05/01/07 09:11:46
>335
俺の.emacs見てたらこんなんあった
ウザくなってコメントアウトしてたけどうまく動いてたっぽい

(font-lock-add-keywords 'dired-mode
'(
; ;source
("^.*\\.[Ee][Ll]$" . font-lock-variable-name-face)
; ;archive
("^.*\\.[Zz][Ii][Pp]$" . font-lock-builtin-face)
("^.*\\.[Gg][Zz]$" . font-lock-builtin-face)
("^.*\\.[Tt][Aa][Rr]$" . font-lock-builtin-face)
("^.*\\.[Ll][Zz][Hh]$" . font-lock-builtin-face)
; ;text
("^.*\\.[Tt][Xx][Tt]$" . font-lock-reference-face)
; ;executable
("^.*\\.[Ee][Xx][Ee]$" . bold)
; ;dot
("^.+[0-9][0-9] \\.[^.]+.*" . font-lock-variable-name-face)
))

337 :335:05/01/07 19:28:01
お〜、ありがとうございます。
バッチリ動きました。
ただexeにboldが効いてなかった様な気も・・。
Fontlockの設定とかが原因でboldに気が付かなかっただけかな。
boldを色指定に変えて使ってます。

十分満足なんですけど
拡張子だけに色を付けるとなると相当面倒ですか?
理想としては拡張子はファイル名とは別のカラムに表示して(lsの設定?)
さらに拡張子にだけ色を付けたいのですが。

つーかemacs楽しいですね。時間足りないw
ある程度Lisp覚えてがんがんカスタマイズできるようになりたいな。

338 :名無しさん@お腹いっぱい。:05/01/07 20:17:34
>>337
> 拡張子だけに色を付けるとなると相当面倒ですか?

("^.*\\.\\([Ee][Ll]\\)$" 1 font-lock-variable-name-face)
みたいにしてけばいいだけよ。詳しくは font-lock-add-keywords の
docstring を参照のこと。

> 理想としては拡張子はファイル名とは別のカラムに表示して(lsの設定?)
ちょっとやり方を思い付かないけど、逆に見難くないかね。

> つーかemacs楽しいですね。時間足りないw
> ある程度Lisp覚えてがんがんカスタマイズできるようになりたいな。
ガン(゚д゚)ガレ


339 :名無しさん@お腹いっぱい。:05/01/25 21:33:24
すいません、キーバインドの方法について質問させてください。
shift+rightにother-windowを割り当てたいのですが
;(describe-keyでは"ESC [ d"と表示されます。)
うまくいきません。global-set-key で
\M-[-d とか [M-[-d] や [ESC]-[-d等を試してみたのですがどれもだめでした。
ESC [ dはどう表記したらいいのでしょうか?

340 :名無しさん@お腹いっぱい。:05/01/25 23:45:32
>>339
その環境だと shift+right も right も一緒になってないか?


341 :名無しさん@お腹いっぱい。:05/01/26 00:03:02
shift+right と right が一緒になってるかどうかの確認の方法が分からないのですが
(何かにバインドして確認しようにもバインドの方法が分からない)
describe-keyをすると

right は right
shift+right は ESC [ c
とでます。
ちなみにF1にバインドする時にもつまづきました。
[f1] ではなく\C-ce でf1にバインドできました。
そうするとC-ceにもバインドされました。
C-ce と f1 は一緒になってるようです。

ターミナルの設定の問題なんでしょうか?






342 :名無しさん@お腹いっぱい。:05/01/26 00:37:20
スレ違いだろうが、とりあえず [?\e ?\[ ?d] とか "\e[d" とか


343 :名無しさん@お腹いっぱい。:05/01/26 00:49:47
おお、いけました。ありがとうございます。
shift+upでバッファ間を移動しまくっております。
previous-bufferみたいな関数あるかと思ったんですけどないみたいですね。残念。
書くスキルないのはもっと残念です。

どこで質問するか迷ったんですけどやっぱりスレ違いでしたか。
emacsスレで聞けばよかったです。
ありがとうございました。


344 :名無しさん@お腹いっぱい。:05/01/26 01:40:01
>>343
> shift+upでバッファ間を移動しまくっております。
> previous-bufferみたいな関数あるかと思ったんですけどないみたいですね。残念。

バッファっつーか、ウィンドウ間を移動したいんだよね?
windomove.el がいいんじゃないかと。

345 :名無しさん@お腹いっぱい。:05/01/26 01:41:01
> windomove.el
変なところに o が入った。windmove.el だ。スマソ

346 :名無しさん@お腹いっぱい。:05/01/26 02:35:31
そうか。windmove使えばいいのか。
(global-set-key [?\e ?\[ ?d] 'windmove-left)
(global-set-key [?\e ?\[ ?a] 'windmove-up)
(global-set-key [?\e ?\[ ?c] 'windmove-right)
(global-set-key [?\e ?\[ ?b] 'windmove-down)
でウインドウ間を超高速移動しまくってます。
ありがとうございました。

347 :名無しさん@お腹いっぱい。:05/01/26 09:51:41
超高速移動という響き,イイ!!

348 :名無しさん@お腹いっぱい。:05/01/27 03:17:04
どもども。いや、ホント楽になりました。
C-xo連発してたのがうそみたいです。

349 :名無しさん@お腹いっぱい。:05/02/11 20:21:31
一回のキー操作に複数の手続きを割り当てたいんですけど、例えば
(global-set-key "\C-cg" '(lambda () (begin
(forward-char)
(backward-char)))
これで一文字進んで一文字戻る(なにも起こらない)を想定してるんですが、動いてくれません
普通(global-set-key KEY COMMAND)でCOMMANDにはシンボルを想定してるみたいなんですが、
複数同時に渡せないし...

350 :名無しさん@お腹いっぱい。:05/02/11 20:30:48
(global-set-key "\C-cg" "\C-f\C-b")

351 :名無しさん@お腹いっぱい。:05/02/11 20:45:11
(interactive)
ていうかelispにbeginは無いし

352 :名無しさん@お腹いっぱい。:05/02/11 20:46:07
(define-key mode-specific-map "g"
(lambda ()
(interactive)
(forward-char)
(backward-char)))

353 :名無しさん@お腹いっぱい。:05/02/11 21:58:34
どうも、解決しました。
(ここ結構人居るんですね)
other-windowを組み合わせようとしてたんですが、
これが引数とるのに気が付かなくて二重にはまってました。
M-xから呼ぶときは引数いらないのに...いまだに意味不明です。

354 :名無しさん@お腹いっぱい。:05/02/11 22:59:58
(other-window ARG &optional ALL-FRAMES)
だから引数は必要。
M-x でいらない(ように見える)のは (interactive "p") で
(prefix-numeric-value current-prefix-arg) が渡されるから。

355 :名無しさん@お腹いっぱい。:05/02/12 01:45:40
>>353
要らない世話かも知れないけど>>354に補足すると
(interactive "p") で渡っているのは ARG の方だけね

ALL-FRAMES を指定するときは
(other-window 1 t)
のようにもう一つ引数がいるからね

詳しくは info を


356 :名無しさん@お腹いっぱい。:05/02/12 08:41:04
Lispはちょっと触った事あったんでいけるかと思ってたんですが、
Emacsの仕様もあって結構難しいですね。
ちょっと勉強してみます。

357 :名無しさん@お腹いっぱい。:05/02/19 00:17:22
(multibyte-string-p "a")
=> nil
(with-temp-buffer
(insert "a")
(multibyte-string-p (buffer-substring-no-properties (point-min) (point-max))))
=> t
HEAD でも 21.3 でもこうなるみたいなんだけどこーゆーもんなんすか?

358 :名無しさん@お腹いっぱい。:05/02/19 00:30:43
>>357
はい。

(with-temp-buffer
(set-buffer-multibyte nil)
(insert "a")
(multibyte-string-p (buffer-substring-no-properties (point-min) (point-max))))
=> nil


359 :名無しさん@お腹いっぱい。:05/02/19 00:55:48
>>358
むむ、なるほど、どうもです。
じつは任意の buffer から substring してきた文字列に multibyte (とりあえ
ずは日本語) が含まれてるかどうかを判定したいんですが、そんな場合はどう
するのが常套手段なんでしょう。思い付いたのは↓なんですが

(with-temp-buffer
(insert "あ")
(goto-char (point-min))
(if (re-search-forward "\cj" (point-max) t)
"日本語あり"
"日本語なし"))
=> "日本語なし"

(´・ω・`)

360 :名無しさん@お腹いっぱい。:05/02/19 01:12:14
(find-charset-string "abc")
=> (ascii)
(find-charset-string "abcほげ")
=> (ascii japanese-jisx0208)

(let ((str "あ"))
(if (memq 'japanese-jisx0208 (find-charset-string str))
"日本語あり"
"日本語なし"))
=> "日本語あり"

361 :名無しさん@お腹いっぱい。:05/02/19 01:21:29
(re-search-forward "\\cj" (point-max) t)

Emacs21 なら
(re-search-forward "[[:nonascii:]]" (point-max) t)
が使えたはず。

362 :名無しさん@お腹いっぱい。:05/02/19 01:27:41
Emacsのunibyte/multibyteってのはタダのバイト列として読むか
なんらかのエンコーディングで表現された文字として読むかってとこで生じる。
単に表現されたときに1バイトになるかってのは関係ない。


363 :名無しさん@お腹いっぱい。:05/02/19 01:49:37
>>362
うそー、関係あるよ。

src/alloc.c:
Lisp_Object
make_string_from_bytes (contents, nchars, nbytes)
const char *contents;
int nchars, nbytes;
{
register Lisp_Object val;
val = make_uninit_multibyte_string (nchars, nbytes);
bcopy (contents, SDATA (val), nbytes);
if (SBYTES (val) == SCHARS (val))
STRING_SET_UNIBYTE (val);
return val;
}

文字列中の文字が全て1バイトになるかを思いっきり考慮してんじゃん。

364 :名無しさん@お腹いっぱい。:05/02/19 02:29:27
はいはい。それはmake_string_from_bytesだからでしょ。
それは考慮してるんじゃなくてunibyteにするかmutlibyteにするかっていう
判定材料に使ってるだけだよ。
その関数の使われるところがどういうところかも見れば自明だと思うんだけど。


365 :名無しさん@お腹いっぱい。:05/02/19 03:06:30
自日月

366 :名無しさん@お腹いっぱい。:05/02/19 03:38:11
>>364
はいはい。じゃあ
(multibyte-string-p (string 97)) => nil
(multibyte-string-p (string 53794)) => t
を説明してみ。

367 :名無しさん@お腹いっぱい。:05/02/19 03:49:16
アホだな。Fstringってmake_string_from_bytesを使ってる例でしかないじゃん。
それはインタフェースからしてmultibyteかどうかの情報が与えられないから、
multibyteかどうかを判定するのに文字の範囲から推定するしかできないからでしょ。

逆に例えば既にmultibyteである情報源から文字列を作るとき、
要するにmultibyte bufferからsubstringする場合なんかはいちいち
中身が1バイト文字だけかどうかなんて考慮しないよ。

まあソースコード読みなよ。
Emacsでのunibyte/multibyteの扱いってものについて学習してらっしゃい。


368 :名無しさん@お腹いっぱい。:05/02/19 05:04:41
>>362
> 単に表現されたときに1バイトになるかってのは関係ない。
に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
ると言ってるのに、SINGLE_BYTE_CHAR_P だけからなる文字列も multibyte に
なり得ると反論してもしょうがないだろうに。

369 :名無しさん@お腹いっぱい。:05/02/19 05:27:37
> に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
> る
そこが問題なのか? 違うだろ。だって当たり前すぎるほど当たり前じゃん。
>>363はタダのバイト列として読むんじゃなくてEmacsの内部表現で表現された
文字列として読んでるんだから。

そこを問題にしているとしたら363の方こそナンセンス。



370 :名無しさん@お腹いっぱい。:05/02/19 07:02:02
>>366がどういう意図をもっているのか自分で説明すべきだろ。
何を根拠に何を主張したいのか書かなきゃ単なる煽りの手口。


371 :359:05/02/19 09:05:52
>>360
> (find-charset-string "abc")

>>361
> (re-search-forward "[[:nonascii:]]" (point-max) t)
おー、ありがとう。勉強になるっす。

> (re-search-forward "\\cj" (point-max) t)
うぼあ、なんたる初歩的ミス orz

372 :名無しさん@お腹いっぱい。:05/02/20 14:51:39
Emacs の multibyte, unibyte まわりって確かにわかりずらいですよねー。
試しに unibyte な文字列中に "\\cj" で検索かけてみたんですけど、結果は nil なん
ですねぇ。当然と言えば当然ですが。

(string-match "\\cj" "あいうえお")
=> 0
(string-match "\\cj" (string-as-unibyte "あいうえお"))
=> nil

(find-charset-string "あいうえお")
=> (japanese-jisx0208)
(find-charset-string (string-as-unibyte "あいうえお"))
=> (eight-bit-graphic eight-bit-control)

coding-system の binary, raw-string とかとの関係も難しい・・・。

373 :名無しさん@お腹いっぱい。:05/02/20 14:56:20
閑話休題。
iswitchb で migemo を使えるようにしてみたですよ。

(setq iswitchb-regexp t)
(setq iswitchb-use-migemo-p t)
(defadvice iswitchb-get-matched-buffers (before iswitchb-use-migemo activate)
"iswitchb で migemo を使ってみる。"
(when iswitchb-use-migemo-p
(ad-set-arg 0 (migemo-get-pattern (ad-get-arg 0)))))


374 :名無しさん@お腹いっぱい。:05/02/20 18:40:57
>>373
おおぅ、ナイスです。
ありがたく使わせていただきます。

375 :373:05/02/21 23:35:24
昔の「自慢の.emacsを貼り付けよう」スレのように活気付く事を祈って。
dired とか ibuffer で色を付けて、長いファイル名があってもそれなりに見やすくしてみる。

まずは dired:
(defun dired-font-lock-information-matcher (limit)
"dired でまん中へんに色を付けてみる matcher。"
(when (dired-move-to-filename nil limit)
(let (end)
(backward-char)
(setq end (point-marker))
(progn (beginning-of-line)
(forward-sexp (if (looking-at dired-re-mark) 2 1))
(forward-char))
(store-match-data (list (point-marker) end)))
(forward-line)))

(font-lock-add-keywords
'dired-mode
'((dired-font-lock-information-matcher . font-lock-constant-face)))


376 :373:05/02/21 23:36:57
んで ibuffer:
(setq ibuffer-fontify-information-field-list '(size mode))
(defadvice ibuffer-insert-buffers-and-marks (after ibuffer-fontify-information-field activate)
"ibuffer でまん中へんに色を付けてみる。"
(save-excursion
(ibuffer-goto-beg)
(while (not (eobp))
(let ((pos (point))
(limit (line-end-position)))
(while (and (setq pos (next-single-property-change pos 'ibuffer-field nil limit))
(< pos limit))
(goto-char pos)
(let ((buffer-read-only nil)
(field (get-text-property (point) 'ibuffer-field))
(beg pos))
(when (memq field ibuffer-fontify-information-field-list)
(setq pos (next-single-property-change pos 'ibuffer-field nil limit))
(goto-char pos)
(put-text-property beg pos
'face 'font-lock-constant-face)))))
(forward-line))))

dired-mode で、dircolors の色を使うようにすると派手でいいかもしれないとか思った。


377 :373:05/02/22 00:21:53
dircolors 使うやつができたっぽい。

(require 'dircolors)
(font-lock-add-keywords
'dired-mode
(mapcar (lambda (x)
(list
(format "\\(%s\\)$"
(mapconcat (lambda (ext)
(if (stringp ext)
(format "\\.%s" ext)
(format ".*%s.*" (cadr ext))))
(car x)
"\\|"))
`(".+" (dired-move-to-filename) nil (0 ',(cadr x)))))
dircolors-extension))


378 :名無しさん@お腹いっぱい。:05/03/20 13:59:42
(defadvice next-error (after next-error-plus-alpha activate)
(insert "OMOITSUKANAI"))
定義してgrep+next-error実行しても, OMOITSUKANAIがバッファに挿入され
ないのはどうしてなのだろうか

379 :名無しさん@お腹いっぱい。:05/03/20 18:00:24
>>378
(with-current-buffer ) を抜けたあとだから。


380 :名無しさん@お腹いっぱい。:2005/03/21(月) 13:45:50
>>379 with-current-buffer 以後でも insert を可能にする方法は何
かありますか?

381 :名無しさん@お腹いっぱい。:2005/03/21(月) 18:16:49
>>380
with-current-buffer

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

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

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)