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

このエントリーをはてなブックマークに追加
1おっす
なんとなく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

ではひとつ、コード中心の熱いバトルをよろぴく。
自慢の.emacsを貼り付けよう
http://pc.2ch.net/test/read.cgi/unix/1001393679/
>>3
これって倉庫行ってるっぽくないすか?
>>4
倉庫入ってるからこそ、
リンクが貼ってあると有難い。
しかし良スレになるかな? 自慢スレは後半失速してたからな。
入門書は
ttp://www.gentei.org/~yuuji/elisp/
がおすすめ
>>6
いきなりメジャーモードから作り始めるやつだね。
おもしろそ。

ウッス!
自慢スレの括弧の対を入れるのを参考に 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)
わたしゃ、「リスト遊び」を推すぞ。
(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行にまとめたいのですが、どうすればいいですか?
>>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))
ほしい答えはこれか?
(setq completion-ignored-extensions (append '(".class" ".exe" ".obj" completion-ignored-extensions)))
add-to-list も参照のこと。
括弧位置がおかしくない?

(setq completion-ignored-extensions (append '(".class" ".exe" ".obj") completion-ignored-extensions))
1411:03/09/19 19:51
>>13
おぉ。ほんとだ。失敬失敬。
(setq completion-ignored-extensions (append `(".class" ".exe" ".obj" ,@completion-ignored-extensions)))
1610:03/09/19 19:52
なるほど、こうやるんですね。
どうもありがとうございました。
1714=12:03/09/19 19:56
でした。(´・ω・`)ショボーン
1815:03/09/19 19:58
あー append はいらなかった。
19newbie: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 のキーバインドを覚えきらないんで(^_^;)
psgml とか。
投稿前に untabify するといいかも。
>>19
yatex付属のyahtmlとか。
今ならnxmlだな
>>21
yahtml に XHTML 向けのモードとかあるんでつか?
以前自慢スレで、存在するファイルのみを読み込む

(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)

今度はいかがでしょうか?
多くの Emacs 使いは何かする度に yes/no を聞かれるのを嫌う気がします。
2624:03/09/25 10:33
>>25
新規ファイルを開くのに、前置引数で与えるのとy-or-n-pで聞くのを迷ったん
ですが、y-or-n-p の方が自然かなと思った次第です。
>>25
(fset 'yes-or-no-p 'y-or-n-p)
>>24
贅沢を言えば、
(y-or-n-p "Not exists. New file? ")で nと答えた時にアボートせずに
ファイル名入力へ戻ってホスィ
2924: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))

>>29
イイカモ。
でもさらに贅沢を言えば
(command-execute 'my-find-file)でファイル名入力に戻った時に
前回の入力がそのまま残っていてくれるとウレシイス

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


(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))
3324:03/09/26 21:00
>>32は神!

じっくり読ませてもらいます。
ありがとうございまスタ。
こんなのも考えてみた。

(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 の最初に来ちゃうんだけどね…
3524:03/09/26 22:05
>>34
!!! interactiveの引数が関数になってる。
おお、こんなことができるのですか!
自前でinteractiveのコード文字を定義すればいいと・・・目から鱗。
ちょっと感動してます。
コンパクトになってるし。

あ… >>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)))))
3724: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があるんですけど、ここいらにパッチするし
かないんでしょうか・・・ポイント動かすだけなのに・・・

もうギブっす
3824:03/09/27 12:17
>>37
× 補完途中
○ 入力中
スンマセ
39あぼーん:あぼーん
あぼーん
4024:03/09/27 13:00
すごい安直なことを思いつきました。

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

問題続出の予感・・・
>>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)
4224:03/09/28 12:44
>>41
おお、完璧です。そうかこうすればよかったんだ。

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

を変更できるというのをはじめて知りますた。
勉強になりますです。
----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
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
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
を見て落ち込みましたので、とりあえず保留さしてもらいます。

人の環境で動くかどうか不安なんですが。
>>45
insert-file-contents を使ってファイルの前の方だけを読み込むようにして、
大きいファイルも表示できるようにした方がいい。
そうするとコード変換がちょっと面倒だけどね。
4745:03/09/30 08:11
>>46
ナルホドです。
そうすれば読み込みの時間も減らせますね。
暇を見つけてやってみます。

:: bf-mode 切 でもディレクトリ移動時にbf-mode 入 になってしまう不具合
:: を見つけてしまいますた。すんまそん。これも暇みつけて直しまふ。
>45
どっかで見たと思ったら広瀬さんのelisp本で
やってたやつだ。
4945:03/09/30 12:42
>>48
やっぱり既出でしたか。

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

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

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

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

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

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

Lispのマニュアルに載ってますか?
>51
それMeadowのフォント設定じゃない?
だったらそれはMeadow独自だから、
EmacsLispのマニュアルには載って無い。
emacs ユーザーのスキルレベルというのはどんなもんなんでしょうか。

僕はぼんやりとですが、

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

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

教えていただけると、励みになりますんで。ひとつ。
× 中級車
○ 中級者

でした。
僕はまだまだ軽四レベルです。
>>53
変なことを知りたがるなー

メジャーモードは簡単だから中級者だね。広瀬さんのページでも見てね。
上級者には ccl も求められるかも。
あと、XEmacs などの微妙な違い。
>>55
> メジャーモードは簡単だから中級者だね。
マジスカ。
cclなんてとてもなんで、当分中級を目指します。
道は険しいなぁ…
別に階級付けしなくても。
> 人の書いたelispを書き直せる
こんなん、元のlisp次第だしさ。
中級は尊い
59名無しさん@お腹いっぱい。:03/10/01 22:45
>>52

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

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

誰か教えてください。
60kaoru:03/10/02 00:23
>>59
変数として評価すると自身を返すシンボル。

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

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

> 中級は尊い
6159 :03/10/02 23:09

>>60

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

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

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

lispでは、
(eq :hage :hage)
は純粋にsymbolの比較onlyだから”軽い”ってことですか?
62kaoru: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

中級は尊い
>>62
59 じゃないけど質問です。
plist で、普通のシンボルじゃなくって :hoge とかをよく使うのはなんでですか?
自分では、わかりやすいからなのかなーとか思ってます。
It's fukin' CLism.
6559 :03/10/03 23:46

>>62

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

すっきりしました。

もう一度Emacs Lispマニュアル読み直しに逝ってくるでつ。
長い文字列をコピーすることが多いので、こんなのを作ってみました。
一応、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)とか
自分以外に便利だと思う人がいるとは思えないけど
(defun my-recenter (&optional arg)
(interactive "P")
(if (equal last-command 'recenter)
(recenter 0)
(recenter arg)
(setq this-command 'recenter)))
>>67
いちお簡単に機能ぐらい書いといたほうが。
equal は eq でいいね。
last-command が recenter と my-recenterの間で
トグルするのを利用するわけか。
>>67
reposition-window ってのもあるけどな。
>>67
これを機会に docstring 書く癖つけれ
7166:03/10/05 18:14
>>68,70
あ、僕もですね。肝心な説明を書いてませんでした。

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

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

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

----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----
7372: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を使ってる場合は処理待ち増大で操作不能になる
可能性があるかもです。リビジョン番号肥大にも要注意です。

あと、複数メンバーのプロジェクトでは使わないほうが無難だと思います。
7472:03/10/06 09:50
>>73
× RCSの場合はチェックインと同時にチェックアウトしますので
○ RCSの場合はチェックイン直後にチェックアウトしますので

でし。
いいんだけど、check inしたらアンドゥ情報が失われるというのはちょっと…
7672:03/10/13 19:49
確かに、です。
vc がよく分かってないままに書いたのがいけなかったです。
もちょっと調べます。
77名無しさん@お腹いっぱい。:03/10/14 07:00
modeによってshow-paren-mode を切り替えたいのですが
lispがわかりません どのような設定になるのでしょうか?
(add-hook 'foobar-mode (function (lambda () (show-paren-mode 1))))
>>78
(add-hook 'foobar-mode-hook #'(lambda () (show-paren-mode 1)))
でしょ?
foobar-mode でなく
foobar-mode-hook と。一般的にですが。
78-79 有難う御座います
初心者 寄せ集めでも.emacsを作れて、キーバインドができる
初級者 正規表現を操れて、簡単なelispが書ける
    listを自由自在に操れて、人の書いたelispを書き直せる
    マイナーモードやメジャーモードをスクラッチから書ける
中級者 Emacsにパッチをあてはじめる
上級者 Emacsをスクラッチから書ける
中級は尊い。
>>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)))
だじょ。
>>83
訂正するほどじゃない。
スタイルの問題でしょ。emacs/lisp/*.el 見ても両方使われてる。
#' を付けるほうが好きだけど、
nemacsからも利用する設定ファイルには使えない悲しさ。
>81 漏れはいまだ初心者でつね
>>81
上級者というのはxyzzyの亀井さんくらいのレベルなのか…。
道は遠い…というより一生かかってもムリ
初心者 寄せ集めでも女を集めて、ハーレム を作れる
初級者 性器表現を操れて、簡単なエロ本が書ける
    チムポを自由自在に操れて、人に汚された女を調教し直せる
    S モードや M モードをスクラッチから調教できる
中級者 少女の頃から育成をはじめる
上級者 女を卵子から作り始める
>>89
はい、それから〜
定義厨は失せて。
>>91
なんか Emacsスレのほうに飛び火してるみたいだが。
>>89
初心者のハードルやけに高いな、おい。
>>85
> スタイルの問題でしょ。emacs/lisp/*.el 見ても両方使われてる。

http://www.mew.org/~kazu/doc/elisp/function.html
>>94
結局「スタイルの問題」じゃないの?
>94
kazuのeispは信じられない程アレなので参考にならない。
#' ではなく ' を使うと、バイトコンパイルされない場合がある。ってことでしょ。
>>96
あ、mew 使ってないんでよく知らないんだけどどのへんがアレなの?
>>97
でもこのスレでは生のlambdaと functionで囲んだのだけ扱ってて、
quoteは関係無かったからさ。なのに 94が変な反応するから。
今日、はじめて包囲アドバイスなるものを使ってみマスタ。
強力すぎてちょっと怖いけど、試しに

;; デフォルト動作でそのウィンドウも消すようにする。
(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 ウィンドウなんかもそんな挙動になってくれるからスゴイ楽でし。

でもやっぱし怖いす。
包囲アドバイスって訳語は、日本語infoで使われちゃっていますけど、
あまり良さそうに思えないですね。語感が合わなくて。
>>96
> kazuのeispは信じられない程アレなので参考にならない。

どのへんが?
103 ◆kXMewIMy86 :03/10/24 06:28
ま、いろいろとね。。。
>>103
FUD?
>>104
そうとも言いきれなさそうだから困る。
リスト遊びの評判もだが。
>>105
広瀬さんの本はどう?
「リスト遊び」は純粋にとても良かったと思うが。
mewは使ってないからコードの評価はしないけど。
2章を頭からちょっと読んでみたが

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

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

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

とか考えた漏れは逝ってよしでつか
でつ
>>108
> 同じ lisp ばかりじゃねえんだぞと。
違う Lisp 知らない。教えて。
Scheme は Lisp じゃないし。
>>99
まだ理解できていないようで・・・
>>111
あのー、罵倒されても構いませんから、
(lambda ...)

(function (lambda ...))
で具体的に何が変わってくるのか、
もうちょっと詳しく教えてください。
俺の理解では、バイトコンパイルされてしまえば同じ。
そのままだったら、functionのほうがマクロ展開ないぶん、
微妙に速いかもしれない(俺の勝手な推測)というところなんですが。
# quoteの場合が違うのは分かっています。
それでいいんじゃないの? 個人的には (lambda ...) よりも #'(lambda ...)
のほうがパッと見たときにわかりやすいので好み。
時間がかかる処理をしていて、何かキーが押されたら中断する、ということを
考えています。試しに下のようなのを書いてみました。
(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)
.....

とやればいいのかなと思ったのですが、肝心のキーが押されたらエラーを発生
するやり方がさっぱり見当がつかないのです。
なにか良い方法を知っておられましたら、教えてやってくださいまし。
>>114
condition-case で quit 取るんじゃだめなん?
116114: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以外のキーを押したときは中断できません。
もうちょっと練ってみます。
全てのキーに signal発生させるよう設定したキーマップ使用すれば
いけるかも? signalの代わりに throwでもいいけど。
118114: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)))

中断してくれない(^^;
うーん、自分で bindした keyboard-quitと
C-g は扱いが違うって事なのかな?
120114: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以外をセンスしてくれないような感じがします
です。
121114: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になる

の様です。…もはや手詰まりか…
122114:03/10/28 10:24
ふと思い立って、
(keyboard-translate ?b ?\C-g)
とかやってみましたが、やはり中断してくれませんね。

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

# emvaders.elとかどうやってるのかな。ゲームなら割り込みみたいな処理を
してると思うんだけど。
123114:03/10/28 10:53
emvaders.elでは input-pending-pで処理してますた。
ゲーム的にはこのやり方は納得です。
にしても、ハマりすぎです。
誰かお願いです。ひとつ叩いてやってください。ガツンと。
124114: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))))

ややこしいやり方になってしまいました。
unwind-protect使ったほうがいいよ。
なぜ 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)))
でいいような。
127114:03/10/29 17:56
>>125, 126
助言、ありがとうございます。
今まで、unwind-protect は実際にどういう場面で用いるのかわかりませんでしたが、
なんかわかったような気がしますです。

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

bf-mode.elというelispをいじくっているのですが、html をw3mで表示したと
きに重いので、キャンセルの手段が欲しいと思ったのです。
C-gでいいじゃん…
ファイルへの出力ってどうやってするんですか?
とりあえずhoge.txtに"hoge\n"と書いて出力する程度でいいんですが。
write-regionでいいじゃん…
>>130
さんくす!
ググってもよく分らなかったもので。
【徹底的】プログラマーが語る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$のプログラマホモくせーな
もはや、このスレもこれまでか…
がんばってる同士はおらんのだろうか。
2ch以外で頑張ってます。
135名無しさん@お腹いっぱい。:03/12/07 17:16
たとえば、それはどこなんでしょう?
あのー質問なんですが,
あるファイルの内容を調査したい場合,Emacs Lisp だと
対象となるファイルを一旦 find-file とかで
全て読み込まなくちゃ駄目なんでしょうか…?

外部プロセスに逃げると言う手も考えましたが,
そんなものを使うよりは,Emacs Lisp のみで完結したいので…
etagsとか?
ってか、どんな調査したいのかにもよるのでは?
dired で % g
全部読まなくても
(insert-file-contents FILENAME &optional VISIT BEG END REPLACE)
でファイルの一部だけを読む事ができるよ。
140136:03/12/11 23:27
御回答どもです

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

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

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

>>139
ありがとうございます。
info読みなおしました…
今まで如何にイイカゲンに読んでたかを思い知りますた…
名前付きパイプとかも読めちゃうんすねコレ…
141名無しさん@お腹いっぱい。:03/12/26 16:20
一つの関数でλを定義する数は何個ぐらい許されるんでしょうか?
なにがしたいのか分からんが、とりあえず作ってみたら?
もっと意図を明確にしたうえで、ム板のスレで質問するのがいいと思うが。
(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 の結果が異なり
ます。
144143の続き: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サーバ市場:ビジネス利用には課題が多い
のようになることです。添削おねがいします。
なんか例示されてるのと違い、空行が入ってしまうなーと思ったら、
transient-mark-mode かどうかで挙動が違うな。
で、offにして試してみたけど、どちらも okっぽかったけれど。
146143: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 なので、それで希望の結果が出て欲しいのです。
皆様のアドバイスをいただきたく思います。よろしくお願いします。
replace-regexp を
(while (re-search-forward REGEXP nil t)
(replace-match TO-STRING nil nil))
にすれば直るはず。
特別な理由がない限り lisp program 中で replace-regexp は使わないほうが
いいです。 perform-replace を参照。
148143:03/12/27 22:46
147氏のおっしゃるように修正したところ、XEmacs, Emacs の両者で
希望の動作をしてくれるようになりました。ありがとうございます。
>>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 は まだどこにもないんでしょか。
149が訳すことにケテーイしますた。
151名無しさん@お腹いっぱい。:04/01/04 16:33
がんがれー
>>152
駄目.

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

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

故に公開したければ,全文を訳し直す必要がある.
その GPL 和訳の由来はここ。
http://www.sra.co.jp/public/doc/gnu/gpl-2j.txt
これにも同じく
> ・和文文書の本文を改変しないこと。
とある。つまり、禁止してるのは「GPL の和文本文」の改変であって、
Emacs Lisp Reference Manual の和文ではない。
そもそも、元の文書が GPL なのだから改変禁止は不可能。
恐ろしいほどの部分引用だな
asm-mode で新規作成/既存ファイル開く、でファイル先頭に;(コメント文字) が
自動的に挿入されてしまうんだけど、これを抑制する方法ないでつか?
それだけでは、うちではそんなことはないとしか言いようがないよ。
それは本当にasm-modeが入れているものなのかな?

-q つけて起動したら再現しませんでした…出直してくるぽ。

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

159156:04/01/23 11:29
まちがえて age ちゃった。 ごめんでつ。>>158>>156 です。
最近の elisp では when とか unless とか出て来るんですけど、
わたしは while と if と cond くらいしか使いません。
when, unless の利点は何ですか?
>>160
progn 使わなくていい
whenとあったとき、ifと違い条件の成立しなかった時の処理はないのだと
一目で分かる。
欠点はいらんのか
別に ifと置換えとかじゃないし、単純すぎる構文だから欠点もなにも……。
165160:04/02/02 02:55
ってことは別に無理して使わなくてもいいってことか。
マクロってよくわかんないけど subr.el 見たら、if に置き換えてるだけみたいね。

166名無しさん@お腹いっぱい。:04/02/06 02:12
navi2chなんかで、エンター押したらその行に関係する動作をする機能を作るには
何を使えばいいのでしょうか。
key map を使うのかと思ってnavi2chのソースをみたのですが、
define-key map [return] という行は見つかりませんでした。
そのレベルの質問なら、navi2chスレのほうが適切と思うが。
(define-key map "\r" 'navi2ch-article-select-current-link)
今回の場合、describe-key で returnに対応するコマンドを調べて、
それを元に grepすれば >>168が見つかりますな。
C-h w RET
w じゃなくて k だ
ある関数内で 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))

こうすべきもんなんでしょうか。なんかもっとスマートな方法ありますか?
173166:04/02/06 12:15
>>167-171
みなさんありがとうございました。
勉強になりました。
[return] ではなくて"\r"で定義してあるんですね。
>>172
> じゃ駄目なんですね。
変数じゃないならだめだよ。
175172:04/02/06 12:36
>>174
いちお変数でもあるんですけどね、って今見てみたら docstring に
Setting this variable directly does not take effect;
と書いてあった…失礼しますた。やっぱあんな方法でやるしかないのかなあ。
with-auto-compression-mode
>>176
おーありがとうです。こんなのがあったのか。感謝。
178名無しさん@お腹いっぱい。:04/02/06 22:10
emacs21のtool-bar にあるプリンタアイコンはprint-bufferですが、
これを.emacsでpostscript-print-bufferに変えたいんですが、どうやれば
良いすかね?
(setq tool-bar-map (delq (assq 'print-buffer tool-bar-map) tool-bar-map))
(tool-bar-add-item-from-menu 'ps-print-buffer "print")
でどうでしょ
空のファイルを作成したいのですがどうやればいいんでしょうか?
動作としては↓のような感じです。
% touch hoge
(hogeというファイルは存在していないとして)
(write-region (point-min) (point-min) "hoge" t)
>>181
ありがとうございました。
だれか、mmm で php-mode の indent が効かなくなるの直してくれ。
mmm と php-mode てなんか相性わるいよね。
漏れは別の不具合のせいで、結局php-mode 単体でつかってまふ。
'(1 2) '(3 4) => (4 6)
みたいにリストの各要素を足してくれるような関数ってありませんでしたっけ?
(mapcar* '+ '(1 2) '(3 4))
clだけど。
187185:04/05/01 13:29
>>186
あれこれ探してみてたんですが cl にあったのか、どうもですた。
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))))

これじゃちょっと不恰好な気がします。スマートに実装する方法ありませんか
ね。
(let ((sym (if arg1 'a-list 'b-list)))
(set sym (append arg2 (symbol-value sym))))
>>189
set ってこんな時に使えるのか。サンクスコでした。
マ板、Emacs Lispスレから流れてきました。
○×ゲームを作っていくという話題。

とりあえず、入力はこんな感じで。
(read-from-minibuffer " │○│ 
―┼―┼―
 │×│ 
―┼―┼―
 │ │  コンマで区切って2つの数字を入力してください。(例 0,0)")
何でminibuffer使う?
一瞬 gomoku.el の部品が使えないかなと思ったけど
自分で書いた方がはやそう。
○×か。最初から敷居が高いなぁ。
入力はコンマ区切りよりリストとして入力させる方が良いハックじゃないかな?
コンマはパースしなくちゃいけないし。
何も考えずに、ここまでやってみた。ボードと終了判定があるだけ。
あとは、エラーチェックの徹底と思考ルーチンかな。
長いので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)))))
しょの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))))))
あとminibufferよりも新しく編集バッファを作成してエディタ内のテキストを
操作する方が良いと思う。二次元の平面を扱うなら。
例えば以下のような感じ。

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

しょの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って何?
>>192
> 何でminibuffer使う?
> 一瞬 gomoku.el の部品が使えないかなと思ったけど
> 自分で書いた方がはやそう。
その場のノリですが、むりやり理由をつければゲーム後に画面の後かたずけとかが自動的に行われるからです。

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

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

ox-game-over-pではthrowでdolistを早抜けしているんですけど、elisp的な
定石はこれでいいのでしょうか。
ここで>>1を読んで修業すればnavi2chみたいの書けますか?
書けるよ
ネット関係のライブラリが標準で用意されているのですか?
P2P関係のものを何か作りたいのですがtcp/ip層までいじれますか?
リリースされてる版だと、Emacs Lisp からできるのは TCP の connect(2) だけ。
accept(2) へのインターフェイスは 用意されてないから P2P やりたいなら
下請けの外部プログラムが必要。
M-x namazu とする代わりに F2 キーでカーソルのある単語を検索できればと思い,
namazu.el を読んだ上で以下のように設定しました
しかしこの設定で F2 キーを叩いても,
別のバッファが開いて「32 件検索しました」 という
メッセージが出るところまで行くのですが
検索結果がでません どこを直せばよいのでしょうか
(global-set-key [(f2)]
  (lambda ()
    (interactive)
    (namazu namazu-search-num namazu-default-dir
          (current-word))) )
namazu の最初の引数は PAGE-NUM みたいなので普通は 0 でしょう。
206204: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]
namazu-search-num が 0 になってない?

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

(namazu 0 namazu-default-dir (current-word))
にしたら? ってこと。
読書メモの為に下みたいなのを挿入したいのですけども。

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)

なんかもっと綺麗に書く方法とかありますか?
>>208
> なんかもっと綺麗に書く方法とかありますか?
ispellを使う、とか
しかしそれでもfromを見つけられない罠
queequegも利用してみるとか? 試したことないけど。
そのまま翻訳にかけてみるのも手かもな
213204,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 の第一引数は同じにするものだと思いこんでいました
ありがとうございました
(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))))))))

>>214
あんがとね。
いやー、あんた最高だよ。
>>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 やってたら大きなファイルの時に
かなり遅れるかもしれんし。
速度命!ならビットパターンを表す文字列をキャッシュしといた方が簡単確実。
>>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 じゃなきゃだめ。
(do ((x 128 (rsh x 1)))
((<= x 0))
(princ (if (zerop (logand x c)) "0" "1")))
たった 256 個だから
(defconst byte-to-bit-string
(let ((v (make-vector 256 nil)))
(dotimes (i 256) ...)))
してあらかじめ作っとけばいいじゃん。
(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)))
なんかビット絡みはついてけない(´・ω・`)ショボーン
>>219
rshって、remote shellで実行するのか?

昔から思ってたんだけど、logand/logiorってRMSのチョンボだな。
logicalじゃなくてarithmaticだろ。
またnatnumpってのもあるけど、0はnatunal numberじゃない。
>>223
> 0はnatunal numberじゃない。
定義による。
0を自然数に含めることもある。
ttp://www.ss.u-tokai.ac.jp/~itai/column/three.html
>>224
そうか。
じゃMITじゃビットAND/ORもlogicalって呼ぶのかもしれないな
>>223
aithmatic じゃなくて bit-and/or operatorか。
(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)))
>>227
save-XX 2つはwith-output-to-temp-bufferの外の方がよかった。

エラーチェックなんてほとんどしてないので、上書きとかしない方がいいかも。
たいしたことではなくてすまんのだが、write-binaried-file
はwrite-file-in-binaryの方がアメ人側からするとわかりやすいとおもた。
今になって知ったんだが、hexl-modeは外部プログラムを使ってたんだな。

2進表示より、右側に全角文字を表示をして欲しいんだが、そういうことを考
えると、やっぱelispだ。
全角文字
----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----
>>232
いやー、かなり早くなったね。
>>232
すごいすごい。

せっかくなので、アドレス部の表示をファイル位置にできたりしませんか?
(insert-file-contentsでBEG ENDを指定した場合など)
ヽ(`Д´)ノ cclってナンダヨー
>>235
code convetion lang
16bit,32bit,64bit,128bit単位の表示、および
ビッグ・エンディアン、リトル・エンディアンの切り替え
もできれば、言うこと無しだが・・・
(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が
どこにあるのだか分かりません。どこにあるんでしょうか?

>>239
texinfo のソースツリーに入ってます。
ttp://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/doc/

ところで、bookshelf.jp にある私的日本語化プロジェクトは
texinfo 形式のソースがあるのかな?
>>240
texinfo でやってますので,ソースはありますけど,公開はしてません.
では公開していただけますか?
>>241
あ、texinfoのやつがあると僕もうれしい。支障なかったら公開きぼんぬです。
>> 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 にしてどんな時に便利か教えてくれ。
ほしゅ。
つか、ほしゅしなくても落ちないのでは?
連番を作るのに、こんなのを作ってるんだけど、
うまく動かない。 どこが悪いのかな…。

(do ((i 1)) ((> i 10))
(insert (format "Sequence%d\n" i))
(setq i (1+ i)))
あなたは elisper ではありませんね?
先生!
このマンコ関数はどうでしょう?
(defun manko(i)
(cond ((> i 0) (insert (format "Sequence%d\n" i)) (manko (- i 1)))
(t nil)))
(manko 10)
number-sequence
253249: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??
(do ((i 1 (1+ i)) ((> i 10))
(insert (format "Sequence%d\n" i)))
ちゃんと書きなよ。
しかし do なんか使わなくても。
256249: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)
>>249
そもそも「うまく動」いたらどうなるんだ?
期待してる結果が書いてない。
(require 'cl)

(do ((i 1 (1+ i))) ((> i 10))
(insert (format "Sequence%d\n" i)))
なんか覚えにくい構文だな。
まだloopのほうが、という気がした。
eldocでミニバッファに出るから覚えなくても書ける。
でも普通はdotimesなんかを使うとは思うんだが。
エコーエリア
262249: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のほうが、っていうなら、
サンプルを掲示してみてはどうでしょう。
言い合いをしているだけでは何にもならないじゃないですか。
「してくれないでしょうか?」の間違いではなくて?
個人的には、何故doでやってみようとしたかに興味が少しある。
264260:04/09/10 18:49:50
>>262
調べろよ、それくらい。
見て猿真似できるサンプルが出てこないと何も出来ない池沼なのかよ。
キーワードが出てくるだけで十分だろ。
# cl-macsにloopがあるとは知らんかった

そもそも「言い合い」になるほど骨のある内容じゃなかったし。
池沼というのは、マンコ関数でひっかかってる時点で明らか。>>253
266260:04/09/10 19:15:10
言われてみればその通りだった。orz
(let ((i 0))
(while (< i 10)
.....
))
とかの方が分かりやすくて好きなんだけどな
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))))
>>268
おーなかなかいいすね。使わせてもらいまっさ。
でも g + hogehoge は viper 流の (viper-buffer-search-enable) の方が好き :-)

;; しかし viper 異様に重いよなあ…。ボクのマシンがボロなだけ?(´・ω・`)
再帰好きなelisperの人は
max-lisp-eval-depth と max-specpdl-size に
どのくらいの値を設定してるの?

271268: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))))))))))
;;; 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"))
cach - throw は何のため?

(defun file-cache-not-el-list ()
(delq nil (mapcar (lambda (list)
(unless (string-match "\\.el\\'" (car list))
(car list)))
file-cache-alist)))
>>273
叩かれて強くなるためです
勉強になりました
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"))


のように展開(?)するにはどうしたら良いのでしょうか?
何をどう調べたり考えたりしたのか書いた方がいいと思うよ。
これこれを試してみたとか。

ヒントとしては、
mapc + append
宿題なのかなー?
展開後(?)の表記のしかたが悪い。
それを評価した結果になってほしいのか、まさにそれが欲しいのか。
>>275
(apply #'append
(list (list '("A" . "1") '("B" . "2"))
(list '("C" . "3"))
(list '("D" . "4") '("E" . "5"))))
>>275
http://pc5.2ch.net/test/read.cgi/unix/1083394705/405
これ書いたやつだろ。

>>276
mapcは違うと思うぞ。
281276:04/10/24 23:17:46
>>280
applyが思い浮かばなかったのさ……
282275:04/10/24 23:43:20
素早いレスありがとうございます.うまくいきました.

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

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

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

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

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

> http://pc5.2ch.net/test/read.cgi/unix/1083394705/405
> これ書いたやつだろ。
そうです.何か問題ありましたでしょうか?
283276:04/10/24 23:59:29
>>282
#'はemacs lispではほとんど'と一緒。関数にのみ使うと思っておいて。
refrence manualだけじゃなくてemacs-lisp-intro は読んだ?
284275:04/10/25 00:01:12
>> 283
まだ読んでません.どうも基礎がわかってないみたいなので,まずは
そちらから読んでみます.お世話になりました.
(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)

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

>>285
unix なら PROGRAM に & を付ければ? って話なんだろうけど。
firefox.exe のオプションか別コマンドで「firefox に url を渡してする終
了する」ってなことができるんじゃないの?
process-kill-without-query じゃない?
ごもっとも orz
Emacs 終了時に Firefox も終了したいわけじゃないんだよね。
プロセスをバックグラウンドで動かしっぱなしにするには、
BUFFER 引数を 0 にして call-process を
(call-process "C:/Program Files/Mozilla Firefox/firefox.exe" nil 0 nil url)
こんな感じで呼び出してやればいい。
290289:04/11/09 14:21:42
う、navi2ch のデフォルトフィルタにひっかかった。
>>289
( call-process "C:/Program Files/Mozilla Firefox/firefox.exe" nil 0 nil url)
291285: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)))

どうもありがとうございました。
>>290
start-process と call-process の第3引数を0にするのってそんな違いがあっ
たのか。今までどっちにするか気分で決めてた…(´Д`)
8進数を10進数に変換する関数とかあったりする?
自前でゴリゴリやるしかないスか?
逆は format でできるんだけど…。
>>293
(string-to-number (number-to-string 10) 8)
=> 8
(string-to-number (number-to-string 20) 8)
=> 16
>>294
がーん、string-to-number って基数を指定できるのか、知らなかった。
ありがとう。
(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))))
call-process を呼ぶ時って apply 使って呼んでるコードが多いんだけど、ど
うしてなの?
引数をリストで渡せるから? とか思ったんだけどそうでない場合でも apply
使ってることあるしなあ。なぜざんしょ?
元々は直接呼んでたのが、何らかの必要があって apply を使うようになり、
その後の変更で apply である必要が無くなったんじゃないの?
(pol2str "5X^2-3") >>> ((5 2) (-3 0))

入力がSTRINGで出力をリスト形式で出すようなpol2strを定義したいんですけど、
どうかいたらいいかわかります?
反対の作業はなんとなくできたんだけどこれはわからなかったです。
300297:04/12/04 08:42:10
>>298
遅くなったけどサンクス。そんな経緯があったのか。
一気に変換するか、
一回トークンを切り出してリストに変換、あとはリスト処理。
302299:04/12/04 14:13:51
情報どうもっす。
色々調べたけど、TOKENに切り出す方法が分からないので諦めます。
初心者なのはみえみえなんだからちゃんと教えてやれよ。
----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 の結果を直接使うんじゃ駄目なんだっけ?
- もうちょっと正規表現も格好よくしたいけど

とかいろいろ疑問があるけどまだあまりテストしてないです。もっとスマート
なのが出来たら教えて下さい。
>>304
hook ってわかってるか?
なんか妙にややこしいことしてるな。
(font-lock-add-keywords 'emacs-lisp-mode '((REGEXP SUBEXP (progn ...))))
みたいな感じでいいんじゃないのか。
>>304
> - っつーか t にしててもところどころにしか色付かない。jit-lock だから?
my-font-lock-parse-lisp で、
(and func
(or (byte-code-function-p func)
(subrp func)))
が nil になったときにそのまま nil を返しちゃまずい。
もう一回探さないとそれ以降に色が付かないぞ。
>>306
最初そっちでやっててリストの先頭に登録されるのが嫌だったんですが新ため
て見たら APPEND ってフラグがありますね。そっちに変更してみました。

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

とりあえずそれなりに色付くようになりました。どもー。
しつこくてスマン。間違いがあったので訂正。
>>304 の condition-case んとこは void-function だけ受けるんじゃ駄目で
すね。error で受けてやれば全部色付くようになりました。
>>309
なんかいろいろ修正があったようなのですが、自分も一度使用してみたいので、
よかったら修正版 font-lock-test を navi2ch-base64-insert-file してもらえるとうれしいです
----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色使ってます。
312310:04/12/08 00:06:08
>>311 ありがとうございました
しかし、これは良くできていますね。
こうやって見てみると自分が普段どれだけ多くのsubrな関数を使用しているのかわかります。
感謝です。
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))
>>313
> minibuffer で作業してるときにたまに message が表示されて
> 自分が入力してるのが消えるときがあるじゃないですか。

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

>>315
ポインタってポイントのコト?
結局こんなんになりました。
これだと視線の上下もないしいい感じ。
ついでに、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))
なんかいもごめんです。
さっきのやつの insert のとこを
(insert "\n" (apply 'format (ad-get-arg 0) (ad-get-args 1))))
に変えないとダメポです。

あと、skk と相性がわるいなぁ。
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/"

+ か(´・ω・`)
今は自力でやってるけど、どっかにあったりする?
~ をエンコードすべき理由が思い当たらないんだけど
同一性をチェックしたいとか?
RFC1738 の時代には「+」が unreserved で「~」はエスケープが必要だった。
後に RFC2396 ができて「+」が reserved になり、「~」は unreserved に
なった。

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

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

つまりどれにも準拠してないってことね。
え?
325319:04/12/12 12:55:16
発端は wget -x で件の url を取得するとああいったディレクトリを掘るんで、
それを emacs 側で知りたいってことからでした。
>>322 氏の解説のように変遷があると既存の関数でズバリな encode を期待す
るのは無理がありそうですね。自力 encode で納得しときます。
レスどーもでした。
wgetってなんで ~ をエンコードしちゃうんだろうね。
だれかハックしてエンコードしないバージョンを配布してくれ。
そんなんハックとはいえん
一文字変えるだけ?
最近Emacsを使うだけの立場から少しいじろうと思って、
「やさしいEmacs-Lisp講座」など読みました。

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

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

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

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

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

その時は分からなくても、何ヶ月後かに調べてみたら、あっさり分かったりするので、
焦らずに知識を蓄えていくのが一番の近道ではないでしょうか。
>>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 でも捜して比較してみたらどうでしょう.
>>331
揚げ足取るわけじゃないけど、、、
set-face-*()で変えるほうが自然じゃない?

(show-paren-mode 1)
(set-face-foreground 'show-paren-match-face "red")
(set-face-bold-p 'show-paren-match-face t)
>>332
確かにこっちのほうがスマートだね.
何でオレ, あんなふうに書いたんだろ….
>>330-333
ありがとうございます!あれから少し探してみたのですが、
どうも各モードにどんな変数があるかをInfoで見つけて、
それをいじるというのがカスタマイズの初歩のようですね。
diredモードで拡張子ごとに色を付けたいんですけどどうやったらいいですか?
>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)
))
337335:05/01/07 19:28:01
お〜、ありがとうございます。
バッチリ動きました。
ただexeにboldが効いてなかった様な気も・・。
Fontlockの設定とかが原因でboldに気が付かなかっただけかな。
boldを色指定に変えて使ってます。

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

つーかemacs楽しいですね。時間足りないw
ある程度Lisp覚えてがんがんカスタマイズできるようになりたいな。
>>337
> 拡張子だけに色を付けるとなると相当面倒ですか?

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

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

> つーかemacs楽しいですね。時間足りないw
> ある程度Lisp覚えてがんがんカスタマイズできるようになりたいな。
ガン(゚д゚)ガレ
すいません、キーバインドの方法について質問させてください。
shift+rightにother-windowを割り当てたいのですが
;(describe-keyでは"ESC [ d"と表示されます。)
うまくいきません。global-set-key で
\M-[-d とか [M-[-d] や [ESC]-[-d等を試してみたのですがどれもだめでした。
ESC [ dはどう表記したらいいのでしょうか?
>>339
その環境だと shift+right も right も一緒になってないか?
shift+right と right が一緒になってるかどうかの確認の方法が分からないのですが
(何かにバインドして確認しようにもバインドの方法が分からない)
describe-keyをすると

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

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




スレ違いだろうが、とりあえず [?\e ?\[ ?d] とか "\e[d" とか
おお、いけました。ありがとうございます。
shift+upでバッファ間を移動しまくっております。
previous-bufferみたいな関数あるかと思ったんですけどないみたいですね。残念。
書くスキルないのはもっと残念です。

どこで質問するか迷ったんですけどやっぱりスレ違いでしたか。
emacsスレで聞けばよかったです。
ありがとうございました。
>>343
> shift+upでバッファ間を移動しまくっております。
> previous-bufferみたいな関数あるかと思ったんですけどないみたいですね。残念。

バッファっつーか、ウィンドウ間を移動したいんだよね?
windomove.el がいいんじゃないかと。
> windomove.el
変なところに o が入った。windmove.el だ。スマソ
そうか。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)
でウインドウ間を超高速移動しまくってます。
ありがとうございました。
超高速移動という響き,イイ!!
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にはシンボルを想定してるみたいなんですが、
複数同時に渡せないし...
(global-set-key "\C-cg" "\C-f\C-b")
(interactive)
ていうかelispにbeginは無いし
(define-key mode-specific-map "g"
(lambda ()
(interactive)
(forward-char)
(backward-char)))
どうも、解決しました。
(ここ結構人居るんですね)
other-windowを組み合わせようとしてたんですが、
これが引数とるのに気が付かなくて二重にはまってました。
M-xから呼ぶときは引数いらないのに...いまだに意味不明です。
(other-window ARG &optional ALL-FRAMES)
だから引数は必要。
M-x でいらない(ように見える)のは (interactive "p") で
(prefix-numeric-value current-prefix-arg) が渡されるから。
>>353
要らない世話かも知れないけど>>354に補足すると
(interactive "p") で渡っているのは ARG の方だけね

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

詳しくは info を
Lispはちょっと触った事あったんでいけるかと思ってたんですが、
Emacsの仕様もあって結構難しいですね。
ちょっと勉強してみます。
(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 でもこうなるみたいなんだけどこーゆーもんなんすか?
>>357
はい。

(with-temp-buffer
(set-buffer-multibyte nil)
(insert "a")
(multibyte-string-p (buffer-substring-no-properties (point-min) (point-max))))
=> nil
>>358
むむ、なるほど、どうもです。
じつは任意の buffer から substring してきた文字列に multibyte (とりあえ
ずは日本語) が含まれてるかどうかを判定したいんですが、そんな場合はどう
するのが常套手段なんでしょう。思い付いたのは↓なんですが

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

(´・ω・`)
(find-charset-string "abc")
=> (ascii)
(find-charset-string "abcほげ")
=> (ascii japanese-jisx0208)

(let ((str "あ"))
(if (memq 'japanese-jisx0208 (find-charset-string str))
"日本語あり"
"日本語なし"))
=> "日本語あり"
(re-search-forward "\\cj" (point-max) t)

Emacs21 なら
(re-search-forward "[[:nonascii:]]" (point-max) t)
が使えたはず。
Emacsのunibyte/multibyteってのはタダのバイト列として読むか
なんらかのエンコーディングで表現された文字として読むかってとこで生じる。
単に表現されたときに1バイトになるかってのは関係ない。
>>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バイトになるかを思いっきり考慮してんじゃん。
はいはい。それはmake_string_from_bytesだからでしょ。
それは考慮してるんじゃなくてunibyteにするかmutlibyteにするかっていう
判定材料に使ってるだけだよ。
その関数の使われるところがどういうところかも見れば自明だと思うんだけど。
自日月
>>364
はいはい。じゃあ
(multibyte-string-p (string 97)) => nil
(multibyte-string-p (string 53794)) => t
を説明してみ。
アホだな。Fstringってmake_string_from_bytesを使ってる例でしかないじゃん。
それはインタフェースからしてmultibyteかどうかの情報が与えられないから、
multibyteかどうかを判定するのに文字の範囲から推定するしかできないからでしょ。

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

まあソースコード読みなよ。
Emacsでのunibyte/multibyteの扱いってものについて学習してらっしゃい。
>>362
> 単に表現されたときに1バイトになるかってのは関係ない。
に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
ると言ってるのに、SINGLE_BYTE_CHAR_P だけからなる文字列も multibyte に
なり得ると反論してもしょうがないだろうに。
> に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
> る
そこが問題なのか? 違うだろ。だって当たり前すぎるほど当たり前じゃん。
>>363はタダのバイト列として読むんじゃなくてEmacsの内部表現で表現された
文字列として読んでるんだから。

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

>>366がどういう意図をもっているのか自分で説明すべきだろ。
何を根拠に何を主張したいのか書かなきゃ単なる煽りの手口。
371359: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
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 とかとの関係も難しい・・・。
閑話休題。
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)))))
>>373
おおぅ、ナイスです。
ありがたく使わせていただきます。
375373: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)))
376373: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 の色を使うようにすると派手でいいかもしれないとか思った。
377373: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))
(defadvice next-error (after next-error-plus-alpha activate)
(insert "OMOITSUKANAI"))
定義してgrep+next-error実行しても, OMOITSUKANAIがバッファに挿入され
ないのはどうしてなのだろうか
>>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
382名無しさん@お腹いっぱい。:2005/03/23(水) 00:29:38
>>381
(defadvice next-error (after next-error-plus-alpha activate)
 (with-current-buffer next-error-last-buffer
   (insert "OMOITSUKANAI")))

なりませんけど・・・?
383名無しさん@お腹いっぱい。:2005/03/23(水) 09:16:12
>>382
(when (setq next-error-last-buffer (next-error-find-buffer))
...
384名無しさん@お腹いっぱい。:2005/03/23(水) 14:52:04
>>383
その中に入れても結局なりませんでした。。。
385名無しさん@お腹いっぱい。:2005/03/23(水) 21:36:02
>>384
最新の Emacs だと grep バッファは読み込み専用だけど,あらかじめちゃんと
書き込めるように対処はしてあるの?
386名無しさん@お腹いっぱい。:2005/03/24(木) 00:33:30
>>385
書き込みしたいのは、次のエラー箇所が見つかったファイル (この場合はマッチするファイル)に
なので、 *grep* バッファ上でではありません。。
`next-error-last-buffer' がそのファイルじゃないのですか?
387名無しさん@お腹いっぱい。:2005/03/24(木) 01:36:43
試してみると
next-error-last-buffer's value is #<buffer *grep*>
ってなるから違うみたい
388名無しさん@お腹いっぱい。:2005/03/24(木) 22:05:20
emacs 21.4 を使っています。
カーソル配下のtextのface取得方法が解からないので、教えてください。
やりたいことは、特定の単語の色の変更では無く、
その単語の所属するキーワードグループまるごと色を変更したい為、
カーソル配下の単語から、faceを特定したいということです。

お願いします。
389名無しさん@お腹いっぱい。:2005/03/24(木) 22:51:54
(get-text-property (point) 'face)
390388:2005/03/25(金) 00:51:21
>>389
thx
391名無しさん@お腹いっぱい。:2005/03/30(水) 12:38:13
Emacs には「グラフ」データ構造の library がないように思えます。
ここでプログラムしてみちゃってください。
392名無しさん@お腹いっぱい。:2005/03/30(水) 12:52:18
ム板でやると盛り上がると見た。
393名無しさん@お腹いっぱい。:2005/03/30(水) 17:48:01
>>392
ここでよくない? こういうプログラミング練習の為にこのスレッドがあるんじゃないの?
394名無しさん@お腹いっぱい。:2005/03/30(水) 18:33:00
ライブラリ的なのはあっちっしょ。好きそうな人もいるし。
395名無しさん@お腹いっぱい。:2005/03/30(水) 21:02:12
cons と car と cdr で事足りる
396名無しさん@お腹いっぱい。:UNIX時間(+0900)35年,2005/04/03(日) 07:43:30
>>395
おまえは、 「情報なんて 0 と 1 のみで事足りる」
とでも言うのか?

アホ。
397名無しさん@お腹いっぱい。:UNIX時間(+0900)35年,2005/04/03(日) 20:28:38
「ハッカーと画家」に
car, cdr, cons, quote, cond, atom, eq
だけで Lisp の関数は書けるとかって書いてあった。
四則演算はどうやってやるんだ?
398名無しさん@お腹いっぱい。:UNIX時間(+0900)35年,2005/04/03(日) 20:57:40
(t) => 1、(t t) => 2、(t t t) => 3
のように表わすことにして
(defun plus (x y)
(cond (y (plus (cons (car y) x) (cdr y)))
(t x)))
(plus '(t t t) '(t t))
=> (t t t t t)
足し算ができれば後はどうとでも。
399名無しさん@お腹いっぱい。:UNIX時間(+0900)35年,2005/04/03(日) 23:04:31
398 は効率悪すぎだから (t) => 1、(nil t) => 2、(t t) => 3 と
little endian な 2 進表記にして

(defun plus (x y &optional c)
(cond ((cond ((eq x nil) (eq y nil)))
(cond (c (cons c nil))))
((car x)
(cond ((car y)
(cons c (plus (cdr x) (cdr y) t)))
((cons (not c) (plus (cdr x) (cdr y) c)))))
((car y)
(cons (not c) (plus (cdr x) (cdr y) c)))
((cons c (plus (cdr x) (cdr y) nil)))))

(defun mul (x y)
(cond ((eq y nil) nil)
((plus (cond ((car y) x))
(mul (cons nil x)
(cdr y))))))

(plus '(t t nil t) '(t nil t)) ; 11 + 5
=> (nil nil nil nil t) ; 16

(mul '(t t nil t) '(t nil t)) ; 11 * 5
=> (t t t nil t t) ; 55
400名無しさん@お腹いっぱい。:2005/04/05(火) 10:30:07
おいおまえら、知能ベースを elisp で書けよ。
はやくしろ。
401Zeno ◆5nZQbNmQPs :2005/04/05(火) 16:08:22
Re:>400
              それはいいアイディアである
402名無しさん@お腹いっぱい。:2005/04/05(火) 17:27:56
お前なんかに誉められてもうれしくないよ
403Zeno ◆5nZQbNmQPs :2005/04/06(水) 11:34:00
Re:>402
              お前のことは誉めていない。
          知能ベースでも書いてから物を言うようにしろ
404Zeno ◆5nZQbNmQPs :2005/04/06(水) 11:43:29

Tail Recursion は未だに Elisp に実装されていない。
この事実に理由はあるのか?
405名無しさん@お腹いっぱい。:2005/04/06(水) 12:09:56
tail recursion なら実装されてますがなにか?
おまいの言いたいのは tail recursion optimization のことだろ。
理由はもちろんある。
-- 終了 --
406名無しさん@お腹いっぱい。:2005/04/06(水) 13:29:51
あんま相手すんな。
伝染るぞ。
407Zeno ◆5nZQbNmQPs :2005/04/06(水) 17:14:11
Re:>405

             じゃあお前が optimization しろ
408名無しさん@お腹いっぱい。:2005/04/06(水) 17:59:39
動的スコープの言語では末尾再帰の最適化は不可能
(defun bar ()
(fset 'foo (lambda () (print "bar"))))
(defun foo ()
(bar)
(foo))
409Zeno ◆5nZQbNmQPs :2005/04/07(木) 14:22:10

         A* サーチ・アルゴリズムの elisp バーションが
              ほしくないわけでもないな。

____________
"Self" is that which is in the process of becoming... --Zeno
Today's Lucky Number: 421
410名無しさん@お腹いっぱい。:2005/04/07(木) 23:12:09
>>409
負けたな
411sakurai osamu:2005/04/08(金) 02:23:21
http://www.club-paruparo.com/

フィリピン万個伝説よろ

windows 最高!
412名無しさん@お腹いっぱい。:2005/04/08(金) 13:01:28
ある文字列から四文字ずつ取り出してリストを作りたいのですが
どういう風にすればよいのでしょうか?

"いろはにほへとち" という風な文字列から '("いろはに" "ほへとち")
という風なリストを得たいのです。
文字列は四文字以上で4の倍数であることは保証されています。
413412:2005/04/08(金) 13:59:44
length と substring を使うと簡単にできました。
どうもすいません。
414名無しさん@お腹いっぱい。:2005/04/09(土) 21:30:09
Dired-modeのコピーとかをバックグラウンドでできませぬか?
415名無しさん@お腹いっぱい。:2005/04/13(水) 21:05:28
拡張子 .tex を開けると自動的にflyspell-modeになるようにしたくて、
ついでに辞書もデフォルト(英語)からかえたくて、以下の
コードを~/.emacs にいれたんですけど、flyspell-mode
も辞書の変換もうまくいきません。なにがだめなんでしょう?


(add-hook 'LaTeX-mode-hook 'flyspell-mode)
(setq LaTex-mode-hook
'(lambda ()
(setq ispell-personal-dictionary "~/.ispell-dico-perso")
(ispell-change-dictionary "dansk")
))

エラーのメッセージはでないんですけど、、、

416名無しさん@お腹いっぱい。:2005/04/13(水) 21:28:40
>>415
>も辞書の変換もうまくいきません。なにがだめなんでしょう?
せっかくadd-hookしたのに、次のsetqで上書きされてます。
danskに萌えたので、設定例も。
(setq LaTex-mode-hook
(lambda ()
(flyspell-mode 1)
(set (make-local-variable 'ispell-personal-dictionary) "~/.ispell-dico-perso")
(ispell-change-dictionary "dansk")
))
417415:2005/04/13(水) 21:45:32
>>416
ありがとうございます。萌えてくださって。ってちがうか。
書いて下さった設定例でやってみたんですけど、
やっぱりうまくいきません、、、辞書も、英語のままです。
なにがいったいだめなんでしょうか、、、

418416:2005/04/13(水) 21:56:59
>>417
だめでしたか。
当方ispell-modeを英語で使ったことがあるだけで、personal-dictionaryなん
て変えたこともないのでした。
せっかくなので少し調べてみます。
419415:2005/04/13(水) 22:03:09
>>418
きょ、恐縮です、、、、
わたしももうちょっといろいろやってみます。
420416:2005/04/13(水) 22:09:56
flyspell-modeだとプロセスを上げっぱなしにし、
それに付随して、辞書の指定はプロセス立ち上げ時なので、
辞書の設定を先に行う必要があるようですね。
こんなんでどうでしょうか。
(setq LaTex-mode-hook
(lambda ()
(let ((ispell-local-dictionary "dansk"))
(set (make-local-variable 'ispell-personal-dictionary) "~/.ispell-dico-perso")
(flyspell-mode 1)
)))
#自分で試してみる気はしません

421415:2005/04/13(水) 22:21:46
>>420
調べて下さってありがとうございます。m(_ _)m
ですが、やはりだめでした。。。
そもそも、なぜflyspell-modeさえ自動的にたちあがらないのは
なぜなのか、、、
もうちょっとがんばってしらべてみます。
422416:2005/04/13(水) 22:36:58
げ、そういう状態でしたか。
LaTex-mode-hook じゃなくて latex-mode-hook なのでは?
423415:2005/04/13(水) 22:49:20
>>422
あああありがとうございます!(涙
うまくいきました!
あのコードはどっかから拾ってきたものなので盲目に過信してました,,,orz

最初に書いてもらったコードのLaTex をlatexに変えることでいけました。
一応貼っておきます。

(setq latex-mode-hook
(lambda ()
(flyspell-mode 1)
(set (make-local-variable 'ispell-personal-dictionary) "~/.ispell-dico-perso")
(ispell-change-dictionary "dansk")
))
424416:2005/04/13(水) 23:12:13
>>423
プロセスを作成するのは最初のparse時であり、
ispell-change-dictionaryでispellプロセスがあれば殺す、
という処理でした。

この辺はflyspellかispellかは関係ないですね。勘違いしてました。
425415:2005/04/13(水) 23:50:34
>>424
わたしにはまだよくわかりませんが
御教授戴きありがとうございました。時間ができしだい
Lispのマニュアルも最初から最後まで読もうと思います。
426Zeno ◆5nZQbNmQPs :2005/04/16(土) 19:01:21
Reply-to:>>425
    よかったな。 Lisp の場合、フリーでダウンロードできる本が沢山ある。
                 探して読め。

____________
If T is consistent, T !|- G_T.
If T is ω-consistent, T !|- ¬G_T.
427名無しさん@お腹いっぱい。:2005/04/16(土) 20:35:55
引数で与えたローマ字文字列を、平仮名に変換してくれる関数ありませんか?
428Zeno ◆5nZQbNmQPs :2005/04/16(土) 20:39:49
Reply-to:>>427
> 引数で与えたローマ字文字列を、平仮名に変換してくれる関数ありませんか?

        そんなのあるもなにも、自分で簡単に書けるだろうが。

____________
If T is consistent, T !|- G_T.
If T is ω-consistent, T !|- ¬G_T.
429名無しさん@お腹いっぱい。:2005/04/17(日) 09:38:00
>>427
kakasi 使っていいなら kakasi.el とか skk-kakasi.el とかを参考にすると
か。
430名無しさん@お腹いっぱい。:2005/04/17(日) 17:45:37
読み込んだら文字化け!
何とかして!!
431名無しさん@お腹いっぱい。:2005/04/17(日) 17:48:49
線香と水で供養する!
432名無しさん@お腹いっぱい。:2005/04/17(日) 23:03:48
見るんじゃない 感じるんだ
そのうち文字化けでも読めるようになる
433名無しさん@お腹いっぱい。:2005/04/17(日) 23:44:43
なにその Rogue like
434Zeno ◆5nZQbNmQPs :2005/04/18(月) 12:23:06
Reply-to:>>427
> 引数で与えたローマ字文字列を、平仮名に変換してくれる関数ありませんか?

                pt を 0 で始める。
         pt を相対として、 substring で引数の文字列の
           `one-char'、`two-char'、`three-char'
                 をゲットする。

            s は empty string として初期化。

                (setq s (concat s
                   (cond
             ((string= one-char "a" ) "あ")
             ((string= one-char "i" ) "い")
                   ...
             ((string= two-char "ka" ) "か")
                   ...
                   )))
               んで、 pt を動かす。

               上の作業を繰りかえせ。
        Elisp 道場なんだから、後は自分で組み立てろバカ。


____________
If T is consistent, T !|- G_T.
If T is ω-consistent, T !|- ¬G_T.
435.Zeno ◆5nZQbNmQPs :2005/04/18(月) 12:24:07
Reply-to:>>427
> 引数で与えたローマ字文字列を、平仮名に変換してくれる関数ありませんか?

pt を 0 で始める。
pt を相対として、 substring で引数の文字列の
`one-char'、`two-char'、`three-char'
をゲットする。

s は empty string として初期化。

(setq s (concat s
(cond
((string= one-char "a" ) "あ")
((string= one-char "i" ) "い")
...
((string= two-char "ka" ) "か")
...
)))
んで、 pt を動かす。

上の作業を繰りかえせ。
Elisp 道場なんだから、後は自分で組み立てろバカ。
436名無しさん@お腹いっぱい。:2005/04/18(月) 12:48:24
二日考えた結果がそれか
437名無しさん@お腹いっぱい。:2005/04/18(月) 13:13:37
うん。何でそう書くのかって感じだな。
438Zeno ◆5nZQbNmQPs :2005/04/18(月) 13:54:18
Reply-to:>>436
                別に考えていない。

Reply-to:>>437
    相手が初心者である故、一番直観的な実装方法を書いてやっただけだ。
   実際、ストリングではなく、char 単位で比較をした方が早く処理できる。

____________
If T is consistent, T !|- G_T.
If T is ω-consistent, T !|- ¬G_T.
439名無しさん@お腹いっぱい。:2005/04/18(月) 14:06:21
ふつーに書けば
(let ((r-h-alist
'((a . あ) (i . い) (u . う) (e . え) (o . お)
(ka . か) (ki . き) (ku . く) (ke . け) (ko . こ)
(sa . さ) (si . し) (su . す) (se . せ) (so . そ))))
(defconst r-h-table
(let ((table (make-hash-table :test 'eq)))
(dolist (x r-h-alist)
(puthash (car x) (cdr x) table))
table))
(defconst r-h-regexp
(regexp-opt (mapcar (lambda (x) (symbol-name (car x))) r-h-alist))))
(defun r-h (roma)
(let ((start 0) result)
(while (string-match r-h-regexp roma start)
(if (> (match-beginning 0) start)
(push (substring roma start (match-beginning 0)) result))
(setq start (match-end 0))
(push (symbol-name (gethash (intern (match-string 0 roma)) r-h-table))
result))
(push (substring roma start) result)
(apply #'concat (nreverse result))))
こんな感じだろ。cond で比較してくなんて小学生か?
440Zeno ◆5nZQbNmQPs :2005/04/18(月) 14:16:32
Reply-to:>>439
             最適化などいくらでもできる。
     その関数をプログラム中に何度も使用のであれば、早くすればよい。
    さっきも言ったように「一番直観的な実装方法を書いてやっただけ」だ。
       吾の君ので比較した場合、どっちが直観的かは自明である。

____________
If T is consistent, T !|- G_T.
If T is ω-consistent, T !|- ¬G_T.
441名無しさん@お腹いっぱい。:2005/04/18(月) 14:31:47
ローマ字とかなの対応リスト作ったほうが直感的だよ。
442名無しさん@お腹いっぱい。:2005/04/18(月) 14:32:27
中学生じゃなかったっけ
443名無しさん@お腹いっぱい。:2005/04/18(月) 14:34:59
>>440
おツムの程度がずいぶんお粗末ですねえ。
444名無しさん@お腹いっぱい。:2005/04/18(月) 15:11:40
438 が最適化されていると感じるのなら
(defconst r-h-alist
'(("a" . "あ") ("i" . "い") ("u" . "う") ("e" . "え") ("o" . "お")
("ka" . "か") ("ki" . "き") ("ku" . "く") ("ke" . "け") ("ko" . "こ")
("sa" . "さ") ("si" . "し") ("su" . "す") ("se" . "せ") ("so" . "そ")))
(defconst r-h-regexp
(regexp-opt (mapcar #'car r-h-alist)))
(defun r-h (roma)
(let ((start 0) (result ""))
(while (string-match r-h-regexp roma start)
(setq start (match-end 0))
(setq result (concat result
(cdr (assoc (match-string 0 roma) r-h-alist)))))
result))
これで理解できるかな。
ローマ字にマッチする正規表現を検索し、結果をひらがなとの対応表から引く。
one-char two-char とやらを cond でだらだら比較するよりずっと「直観的」
じゃないか。
445名無しさん@お腹いっぱい。:2005/04/18(月) 15:39:00
ローマ字綴りが変でマッチしない時の処理を加えねば。
446名無しさん@お腹いっぱい。:2005/04/18(月) 15:53:42
式が違っているのに、算盤使うか電卓使うかで喧嘩されてもなあ
447名無しさん@お腹いっぱい。:2005/04/18(月) 16:04:31
コードも出してこないのに、口先だけで煽られてもなあ
448名無しさん@お腹いっぱい。:2005/04/18(月) 17:24:31
アンサーノーと電卓の奇屍
449名無しさん@お腹いっぱい。:2005/04/18(月) 20:46:10
Zeno ◆5nZQbNmQPs やこれに類似したレスは池沼コテなので、スルー推奨
450名無しさん@お腹いっぱい。:2005/04/18(月) 22:41:34
もう少しいじれば n=(ry くらい言い出すのではなかろうか。
451名無しさん@お腹いっぱい。:2005/04/23(土) 10:15:07
Zeno ◆5nZQbNmQPs (笑)
452名無しさん@お腹いっぱい。:2005/04/24(日) 17:21:08
「em → emacs」 のabbreviation展開が定義してあるとして、
text-mode や emacs-lisp-mode などで例えば
( em
の後に expand-abbrev を実行すれば展開がされるのですが、
(em
の後に expand-abbrev を実行しても、emacs への展開がされません。

どうすれば、後者の場合にも展開がなされるようになりますか?
453名無しさん@お腹いっぱい。:2005/05/02(月) 22:11:39
今日の日付2005-05-02から一日前とか二日前の日付をゲットする
うまい方法ある?なんか普通にプログラムすると、汚くなりそうなので
454名無しさん@お腹いっぱい。:2005/05/02(月) 22:49:46
current-timeにオフセット指定できたらなー。
455名無しさん@お腹いっぱい。:2005/05/02(月) 22:55:51
time-date.elのtime-addとか使ってみるとか?
456名無しさん@お腹いっぱい。:2005/05/02(月) 23:51:02
457名無しさん@お腹いっぱい。:2005/05/03(火) 16:57:33
float-time は?
458457:2005/05/03(火) 16:59:41
全然読んでなかった。キャンセルします。
459453:2005/05/03(火) 19:00:32
>>456
サンクス。
460名無しさん@お腹いっぱい。:2005/05/29(日) 18:46:12
すみません,きわめて初歩的な質問です.

setq で,関数側の名前空間に lambda 関数をセットするにはどうしたら良い
のでしょうか?つまり,(defun square (x) (* x x)) と同じことを setq で
やるにはどうしたら良いでしょうか?

Common Lisp (というか,xyzzy Lisp)では
(setq square #'(lambda (x) (* x x))) でできるのですが.
461名無しさん@お腹いっぱい。:2005/05/29(日) 18:58:14
fset
462名無しさん@お腹いっぱい。:2005/05/29(日) 19:00:09
        ∧ ∧
       (σ・∀・)σ  460 ゲッツ!!
        \  \
       /    \
       ∪ ̄ ̄ ̄\)
463460:2005/05/29(日) 19:10:01
>>461
ありがとうございます.(fset 'square (lambda (x) (* x x))) でうまく行き
ました.それにしても,名前空間は本当にややこしいですね.このあたりは,
Scheme が本当に楽だと思います.

>>462
騙りはやめてください.私はアスキーアートを貼ったりすることに興味はあり
ません.
464名無しさん@お腹いっぱい。:2005/05/29(日) 19:14:17
>>460
騙りじゃないYO。

 |:::|::|__    、-'''"´ ̄ ̄`"''''-、   __|_::::||
__|::::|::|_|_   / /       \ \|::::||;;;||..  ___ .___
m|::|::|::::|_/   ● ,,.  .,, ●    ヽ:||::::::_|__|_ | |iiii
::::||::::|;;;;;|.     (__人__)     |目;;‖|≡| ̄|iiii
::::||::::|旦''-、、,,,,,,______,,,,,,、、-'' 超巨大ショボーン
465名無しさん@お腹いっぱい。:2005/05/29(日) 19:21:52
関数の名前空間にlambda関数をセットするって意味わからん
466460:2005/05/29(日) 19:22:01
訂正です.xyzzy-Lisp で,(setq square #'(lambda (x) (* x x))) という書
き方ができると書きましたが,間違いでした.これだと変数側の名前空間にセッ
トされるだけでした.ごめんなさい.しかし,xyzzy ではどう書くのだろう...
fset もないみたいだし.

>>464
すみませんでした.ただ,どうも私は,「番号ゲット」の人と,アスキーアー
トが苦手なのです.前者は全く意義がわからないし,後者は w3m ではアスキー
アートはきちんと表示されませんし.
467名無しさん@お腹いっぱい。:2005/05/29(日) 19:36:39
お前の好みをここに書くことに意義はあるのか。
468460:2005/05/29(日) 20:40:11
>>467 遅くなりました.個人的には意義があると思っております.

道端で大音量の音楽をかけている人がいたとして,そういう人に「私はその種
の行為を好まない」と伝えることには,意義があるというのと同じです.

もちろん,それを聞いてその人が音楽を止めるかはその人の自由ですし,周囲
の第三者が一連の流れをどう受け取るかも,それぞれの自由です.
469名無しさん@お腹いっぱい。:2005/05/29(日) 20:43:23
道端じゃなくてライブハウスでもそうするのかな?
470460:2005/05/29(日) 20:57:21
>>469
なるほど,良い例えですね.ライブハウスなら私はそれをしないでしょう.た
だし私は,その比喩に乗っかるなら,ライブハウスには行きません.

私は UNIX 板などの専門板は道端(ないしは公共空間)と考えており,ラウン
ジやニュース速報板などをライブハウスだと考えているということです(だか
らその種の板には行きません).

しかし,その受け取り方が正しいかはわかりません.というより,こういうも
のに正しいということは存在しません.ただし,その場の第三者の支持をより
多く受ける意見のほうが選択として望ましいでしょう.

以上です.しかし,この種の意見をたくさん書くのは,明らかにこのスレにとっ
て望ましくないですね.これで終わりにします.すみません.
471名無しさん@お腹いっぱい。:2005/05/29(日) 21:41:54
書いてて自己矛盾してるのに気付かないもんかね、まったく。
472名無しさん@お腹いっぱい。:2005/05/29(日) 22:00:32
結論: 句読点に , や . を使うやつはおかしなひとがおおい
473名無しさん@お腹いっぱい。:2005/05/29(日) 22:02:07
この辺で雑談終わりにしないか
474名無しさん@お腹いっぱい。:2005/05/29(日) 22:10:04
>>472
私も句読点は「,」「.」にしてるよ.日本語の論文誌では
そう指定されることが多いから,私の周りでもそういう人は多い.
君はきっとそんな世界とは無縁なんだろうね.


475名無しさん@お腹いっぱい。:2005/05/29(日) 22:18:53
texの時だけそうしてる。
476名無しさん@お腹いっぱい。:2005/05/29(日) 22:21:42
大学院に行くやつはたいてい就職できなかったやつ。
477名無しさん@お腹いっぱい。:2005/05/29(日) 22:44:20
TeXの場合はその方が見栄えがいいから「, 」「. 」だけど、それとてASCIIコードの方だしなあ。
なんにせよ、場もわきまえずに関係の無いことをグダグダと垂れ流し、
挙句の果てには「私も」なーんて他人の振りして自己弁護するような池沼だということだけは分かった。
478460 203-179-90-199.cust.bit-drive.ne.jp:2005/05/29(日) 22:59:38
ID がでないので証拠はありませんが,私は>>470 を最後に書き込みはしてお
りません.私の書き込みは,fill-region で整形してありますので,句読点以
外でも見分けがつくのではないかと思います.私の批判をなさるのは皆さんの
自由ですが.

(それにしても,私はよく自作自演の誤解を受けます.理由はわかりませんが,
>>474さんには申し訳ありません)

ただ一点だけ,>>471 の書き込みの「自己矛盾」という言葉が何を指している
のか,しばらく考えましたがどうしてもわかりません.よろしかったら,矛盾
点をご指摘いただけたら幸いです.皮肉でなしに,真剣に知りたいのです.

もし,お教えする価値がないと思われましたら,このレスを最後に,スレ本来
の流れに戻していただければ幸いです.
479名無しさん@お腹いっぱい。:2005/05/29(日) 23:04:19
460よりもこいつ↓の方が断然好ましいと思う。つか気に入った。
 |:::|::|__    、-'''"´ ̄ ̄`"''''-、   __|_::::||
__|::::|::|_|_   / /       \ \|::::||;;;||..  ___ .___
m|::|::|::::|_/   ● ,,.  .,, ●    ヽ:||::::::_|__|_ | |iiii
::::||::::|;;;;;|.     (__人__)     |目;;‖|≡| ̄|iiii
::::||::::|旦''-、、,,,,,,______,,,,,,、、-'' 超巨大ショボーン
480名無しさん@お腹いっぱい。:2005/05/29(日) 23:05:45
xyzzy-lispってなぁ…
481名無しさん@お腹いっぱい。:2005/05/29(日) 23:24:45
>>477
> TeXの場合はその方が見栄えがいいから「, 」「. 」だけど、それとてASCIIコードの方だしなあ。

日本語の論文では,ASCIIでなくて全角の「,」「.」を指定されるんだけど.
君はほんとに何も知らないんだね.Fランク大の出身者でしょうな.


> なんにせよ、場もわきまえずに関係の無いことをグダグダと垂れ流し、
> 挙句の果てには「私も」なーんて他人の振りして自己弁護するような池沼だということだけは分かった。

最早このあたりになると哀れというか見っともないというか・・・
自作自演じゃないんだけどね.まあ,君のような頭の悪そうな人に
どう思われてもかまわないけど (笑)

482名無しさん@お腹いっぱい。:2005/05/29(日) 23:37:09
結論: 句読点に , や . を使うやつはおかしなひとがおおい
483名無しさん@お腹いっぱい。:2005/05/29(日) 23:42:41
>>481 は学歴しかとりえがない社会不適合者かな?
大学はこういうやつを隔離しておくところ。
ずっと入院して、永遠に退院してこないでください。:-)
484名無しさん@お腹いっぱい。:2005/05/29(日) 23:43:59
いつまで続けんのよ。
485名無しさん@お腹いっぱい。:2005/05/29(日) 23:44:02
>>481
これはどっちのキャラで読んだらいいのかな。
フシアナしてないから「弁護する他人」キャラ?
>>479
いいよな。初めて見た。
486名無しさん@お腹いっぱい。:2005/05/29(日) 23:44:19
:-) ←とかいう顔文字を使う奴が自分は社会に適合できてると思ってるのが笑える
487名無しさん@お腹いっぱい。:2005/05/30(月) 01:19:50
なんで山崎スレでテストしてんだ>>478は。
http://pc8.2ch.net/test/read.cgi/unix/1111372352/17
488名無しさん@お腹いっぱい。:2005/05/30(月) 02:22:12
>>481
日本語の論文って、あんた、Gランク大ですか?
島国根性まるだしですね。
489名無しさん@お腹いっぱい。:2005/05/30(月) 07:10:51
>>488
はあ? いま日本語の論文の話題をしてるんだろ?
なんで突然英語の論文の話題になるの? ふつーは論文を英語で
書いてるよ,そんなの言うまでもないじゃん.
得意げに島国根性だってよ (苦笑).馬鹿と話すと疲れるね.



490名無しさん@お腹いっぱい。:2005/05/30(月) 07:49:04
>>489
(add-hook 'yatex-mode-hook
(lambda ()
(require 'skk)
(setq skk-kutouten-type 'en)))
とでもしとけ。
491名無しさん@お腹いっぱい。:2005/05/30(月) 09:16:54
結論: 句読点に , や . を使うやつはおかしなひとがおおい
492名無しさん@お腹いっぱい。:2005/05/31(火) 02:23:52
日本でまともな研究しているやつっているの?
493名無しさん@お腹いっぱい。:2005/05/31(火) 16:16:20
まともな研究したいやつは皆アメリカへ行く。
494Zeno ◆5nZQbNmQPs :2005/06/01(水) 21:51:38

                    :)
________________________________________________________
セオドア・カジンスキー 「産業社会とその未来」 (aka. マニフェスト) の抜粋
http://www.cnn.com/US/9509/unabomber/09-19/am/excerpt.html
495名無しさん@お腹いっぱい。:2005/06/14(火) 21:04:19
M-x で呼び出せる関数書いたんですが、
それに C-u を前置しても4回連続で実行とかしてくれません
ESC [任意の数字] でも同じ
複数回連続動作させたい場合は、何か特別な事をしなくちゃならないんでしょうか?
496名無しさん@お腹いっぱい。:2005/06/14(火) 21:20:07
(interactive "p")
497名無しさん@お腹いっぱい。:2005/06/14(火) 21:25:33
>>495
特別なっつーか、引数を自分のやりたいように処理してやんなきゃ。
その前置引数を見てその回数だけ繰り返すように関数を書かないと駄目っしょ。
C-u を前置すると Emacs が勝手に繰り返してる訳じゃなくって、C-u が渡さ
れたら繰り返すように関数が作ってある訳で。
498名無しさん@お腹いっぱい。:2005/06/14(火) 22:11:40
>>496-497
すんません。そのようですね
http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp_12.html#SEC130
今この辺見て勉強してるんですが、何故だかうまくいかねっす
もう少しやってみます
499名無しさん@お腹いっぱい。:2005/06/14(火) 22:28:00
(defun hoge (n)
(interactive "p")
(dotimes (i n)
(insert "hoge")))
500498:2005/06/14(火) 23:26:34
一応解決しました
ifの使い方で躓いてただけだった
perlとかCみたいに{}で複数行をひとまとめにできないんで

>>499
ありがとうございます
dotimesなんてものもあるんですね

関数もっと知ってれば結構書けるんじゃないかな、とか思っちゃってる俺
ネット上に結構充実したリファレンス(しかも日本語訳されてる)とかあるし、
金出さなくても勉強できそう
501名無しさん@お腹いっぱい。:2005/06/15(水) 00:46:14
emacs lisp は info のヘルプが超便利だと思うよ。
502名無しさん@お腹いっぱい。:2005/06/15(水) 01:28:29
そだね
いろんな日本語のinfoを捜して、
それ読むだけでもいいんじゃない
503名無しさん@お腹いっぱい。:2005/06/23(木) 13:33:40
lisp 以下のソースを見たらいいんじゃない?
使用したい function の使用例として。
504名無しさん@お腹いっぱい。:2005/06/25(土) 10:23:50
文字列で与えられたシンボルを束縛したいんだけどどうやればいいでしょうか。

font-lock-mode => t

(let* ((bound-str "font-lock-mode")
(intern-soft bound-str))
font-lock-mode)
=> t

これじゃ駄目だし orz
505名無しさん@お腹いっぱい。:2005/06/25(土) 10:32:34
eval すればいい
(let ((bound-str "font-lock-mode"))
(eval `(let ((,(intern bound-str) nil))
font-lock-mode)))
=> nil
よく使うならマクロに
(defmacro hoge (str value &rest body)
(let ((sym (intern (eval str))))
`(let ((,sym ,value))
,@body)))
(let ((bound-str "font-lock-mode"))
(hoge bound-str nil font-lock-mode))
=> nil
506名無しさん@お腹いっぱい。:2005/06/25(土) 11:09:42
>>505
おおー、できました。
eval すりゃいいのか…ってまだよく理解できてないけど。感謝。
507名無しさん@お腹いっぱい。:2005/06/26(日) 18:11:07
eval 必要ないみたい。
(defmacro let-string (str-value-list &rest body)
`(let ,(mapcar (lambda (sval)
(list (intern (car sval)) (cadr sval)))
str-value-list) ,@body))
(let-string (("font-lock-mode" nil)
("test" 11))
(cons font-lock-mode test))
=> (nil . 11)
508名無しさん@お腹いっぱい。:2005/06/26(日) 18:24:34
eval 無いと
(let ((bound-str "font-lock-mode")) (let-string ((bound-str nil)) ...))
みたいに使えないよね。
文字列リテラル書けるのなら最初からシンボルにすればいいんだから、
よそから持って来た文字列に値を束縛したいって話なんじゃないの?
509名無しさん@お腹いっぱい。:2005/06/26(日) 19:24:09
すみません、書いてから気付きました。
510名無しさん@お腹いっぱい。:2005/08/07(日) 01:07:26
hoge という関数が定義されているか調べるにはどのように書けばよいのでしょ
うか?
511名無しさん@お腹いっぱい。:2005/08/07(日) 01:22:09
(fboundp 'hoge)
512名無しさん@お腹いっぱい。:2005/08/17(水) 15:11:54
Linux板のAtok Wnnスレで放置されたんで作ってみた。
(defun to-hankaku ()
"change current word from zenkaku to hankaku"
(interactive)
(save-excursion
(push-mark)
(backward-word 1)
(japanese-hankaku-region (region-beginning) (region-end))
(pop-mark)))
(global-set-key "\M-n" 'to-hankaku)

どなたか叩いてくだひゃい。
本当に聞きたいのはWnn7eggで半角カタカナ入力できるか否かなんだが
513名無しさん@お腹いっぱい。:2005/08/17(水) 16:07:04
普通、関数内部の処理では mark は使わない。
mark は基本的に、ユーザーが手動で region 指定したり移動したりするためのもの。
移動コマンドなんかで、あとでユーザーが使えるように push-mark しとくとか、そういうときに使う。

普段の処理で使うのは marker のほう。
でもこの場合は、その場で region 指定するだけだから、 marker も使わないで済みそうかな。

(save-excursion
(let ((end (point)))
(backward-word 1)
(japanese-hankaku-region (point) end)))

みたいな。
514名無しさん@お腹いっぱい。:2005/08/17(水) 17:00:47
>>513
ありがとさんです。regionといっても
markしなきゃいけないわけじゃないんですね。
えらくすっきりしました。
またなんかあったらよろしく
515名無しさん@お腹いっぱい。:2005/08/21(日) 20:15:39
質問なんですが、例えば(decode-time)の結果のようなリストを
これまた例えば(sec minute hour day month)のような変数(のリスト)に
一気に代入するようなコマンドってないもんでしょうか。
Perlでいう
($sec, $minute, $day, $mon, $year) = localtime();
みたいなイメージなんですが。

あと、Emacs-Lisp Farm ていうMLがあるようですが
過去ログって見れないんでしょうか?
516名無しさん@お腹いっぱい。:2005/08/21(日) 21:07:43
間違った使い方な気がするけど、multiple-value-setqとか?
ログはMLはいってからコマンドメール投げれば取得できるよ。
517名無しさん@お腹いっぱい。:2005/08/21(日) 21:31:55
>>515
(apply (lambda (sec minute hour day month year dow dst zone)
...)
(decode-time))
とか CL 使うなら
(destructuring-bind
(sec minute hour day month year dow dst zone)
(decode-time)
...)
518名無しさん@お腹いっぱい。:2005/08/21(日) 21:55:07
>>516,517
レスどうもっす。
(setq num '(1 2 3 4))
(multiple-value-setq (a b c d) num)
みたいに簡単にできるのですね。助かります。
「間違った使い方」つうのが気になるけど、、。

(apply (lambda (sec minute hour day month year dow dst zone)
(message "%d年%d月%d日%d時%d分" year month day hour minute sec)
)
(decode-time))
として動くのは確認しました。が、当方未だラムダ式とかよくわかっていないので
じっくり考えてみようと思います。
とりあえずapplyのドキュメントを丸のみすれば
「(decode-time)で返されたリストを引数(リスト)としたlambda式が実行された」
ということですね?
519名無しさん@お腹いっぱい。:2005/08/21(日) 23:12:02
間違った使い方な気が……っていうのは、
elispには多値はないのにmultiple-value-*を使ってるから。
520Zeno ◆5nZQbNmQPs :2005/08/23(火) 11:25:55


            ユニバーサルな解釈など存在しない為
             間違った使い方など存在しない


_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
521名無しさん@お腹いっぱい。:2005/08/23(火) 12:55:11
そういう考えだとあらゆる価値が平等に無意味になって
思考停止に陥るお。
522名無しさん@お腹いっぱい。:2005/08/23(火) 13:10:54
思考する前に馬鹿を殺そう
523Zeno ◆5nZQbNmQPs :2005/08/23(火) 21:34:07
Reply-to:>>521
          知っていた (る) 人の文調に似ている・・・
             君は吾がそう思っている人物か?

> そういう考えだとあらゆる価値が平等に無意味になって
> 思考停止に陥るお。

       人間は無限近くのチョイスを全て吟味するパワーはない為、
      結局はプラグマティク、若しくは他人が選んでいるチョイスを
                 選んでしまう。

   ただ 520 は「Lisp のような自由度の高い -- 故に創造性の必要とされる --
     言語でただ一つの解釈を強要するのは間違っているのではないのか」
            ということを伝えたかっただけだ。

> Reply-to:>>522
                  お前誰だよ
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
524名無しさん@お腹いっぱい。:2005/08/23(火) 21:53:28
520と523がみえない
525名無しさん@お腹いっぱい。:2005/08/24(水) 00:18:17
見えないのが気になるならフィルタ使わないほうがいいよ
526521:2005/08/24(水) 04:51:42
よくわからんがニューハーフに知り合いはいないよ。
527名無しさん@お腹いっぱい。:2005/08/24(水) 11:37:34
ゴキブリを見て見ぬふりする愚かさ
528名無しさん@お腹いっぱい。:2005/08/24(水) 13:29:28
今は一匹なんだから叩いてつぶしちゃうよりは、
どっかに行くのを待ってもらった方がいい。
529Zeno ◆5nZQbNmQPs :2005/08/24(水) 13:45:30
Reply-to:>>524 お前もな
Reply-to:>>526
> よくわからんがニューハーフに知り合いはいないよ。
                 人違いのようだ

Reply-to:>>528 お前誰だよ
_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
530名無しさん@お腹いっぱい。:2005/08/24(水) 14:20:22
Reply-to:>>529
                う   ざ   い

_________________
If T is consistent then T !|- R_T
If T is consistent then T !|- ¬R_T. -- John B. Rosser
531名無しさん@お腹いっぱい。:2005/08/24(水) 16:44:22
インライン関数を変更した際、
それを呼出している関数(バイトコンパイル済み)に反映させる
手軽な方法はないでしょうか?
いちいち定義してるとこに飛んで評価するのは面倒なもので。
532名無しさん@お腹いっぱい。:2005/08/29(月) 14:30:23
>>531
unload-featureとか使えない?
わたし自身、一度も使った事が無いから
良く分かんないけど。
533名無しさん@お腹いっぱい。:2005/08/31(水) 09:25:32
テキストファイルを Emacs でバッチ処理して結果を stdout に吐きたいんです
が、

--- testout.el ---
(defun testout (file)
(insert-file-contents file)
;; なんか処理する とりあえずここではなにもしない
(princ (buffer-string)))
--- testout.el ends here ---

emacs -Q --batch -l testout.el --execute='(testout "in.txt")' > out.txt

とした時に、in.txt にある日本語が out.txt では化けてしまいます。(各文字
の頭に '\222' が付くみたい、ascii は大丈夫)

ちゃんと動かすにはどうすりゃいいでしょうか。
534名無しさん@お腹いっぱい。:2005/08/31(水) 10:32:55
a) coding systemを設定する。
b) testout.elの中でout.txtに書く。

535名無しさん@お腹いっぱい。:2005/08/31(水) 10:38:22
>>533
set-terminal-coding-system
536名無しさん@お腹いっぱい。:2005/08/31(水) 10:44:24
stdout がファイルの場合は terminal-coding-system は無視されて
emacs-mule になるよ。なので 534 の b のようにするしかない。
537533:2005/08/31(水) 18:13:37
>>534-536
むむ、write-file するしかないのかあ。フィルタの類ではないとはいえちょっ
と意外な気も。まあ、関数内でファイルに書いてもなんとかなるのでそうしま
す。サンクスでした。
538名無しさん@お腹いっぱい。:2005/09/01(木) 17:23:05
encode-coding-string したものを princ するのはだめか?
(未確認)
539名無しさん@お腹いっぱい。:2005/09/01(木) 23:28:29
>>538
おお、なるほど。

(princ (encode-coding-string (buffer-string) 'euc-jp))

でやってみたら大丈夫なようです。エンコードが決め打ちなのが格好悪いです
が、まぁしょうがないかな。ありがとうございました。
540名無しさん@お腹いっぱい。:2005/09/01(木) 23:45:04
terminal-coding-systemにすれば?
541名無しさん@お腹いっぱい。:2005/09/02(金) 00:11:15
>>540
emacs -Q --batch --execute='(print (terminal-coding-system))'

で japanese-iso-8bit が返ってきますね。.emacs 読んでなくても大丈夫なの
か。terminal-coding-system 使うことにします。どうもでした。
542ヽ(´ー`)ノ ◆.ogCuANUcE :2005/09/02(金) 00:35:37
>>541
ロケール見てるっぽいね。

$ LC_ALL=C emacs -Q --batch --execute='(print (terminal-coding-system))'

だと nil だったから。nil の時だけ us-ascii にしておけば問題ないと思う。
543名無しさん@お腹いっぱい。:2005/09/02(金) 09:32:49
>>539

入力ファイルと同じ coding-system にしたいのであれば,
insert-file-contents した直後の last-coding-system-used を
使うというのはどうだろう。
544名無しさん@お腹いっぱい。:2005/09/04(日) 13:45:39
Elispを初めて改造してみたのですが
うまく行きませんでした

changeが設定されていれば、nonにchangeを入れたいのですが
以下のように書いたところうまくいきませんでした
間違っているでしょうか?

(if change
(setq non change))
545544:2005/09/04(日) 13:49:30
ちなみに、
(setq change 'hoge)
のように設定されていると、うまくどうさします
546544:2005/09/04(日) 13:51:48
解決しました
変更しない場合は
(setq change ')
として、変数は作成しておかないとダメなんですね

変数が無い場合も正しく動作するようにはできないでしょうか?
547名無しさん@お腹いっぱい。:2005/09/04(日) 14:04:21
質問は上げとけ
548名無しさん@お腹いっぱい。:2005/09/04(日) 14:17:23
>>543
なるほど。今回のは元ファイルと常に同じって訳でもなかったんですが、そう
限定できる場合はいいかもしれませんね。アドバイスどうもです。

>>546
よくわからんが

(and (boundp 'change) change
(setq non change))

とか?
549名無しさん@お腹いっぱい。:2005/09/05(月) 15:14:56
>>546
そんな構文あるのかー!
と思って思わず確認しちゃったよ。
550名無しさん@お腹いっぱい。:2005/09/06(火) 09:40:12
emacs-cvs 使おうと思ったら、its とやらが含まれてないっぽいんんだけど、
どうしたらいい?
551名無しさん@お腹いっぱい。:2005/09/06(火) 09:52:04
あ、みっけた。
552名無しさん@お腹いっぱい。:2005/09/06(火) 12:38:05
>>550
tamgao入れれ。
553名無しさん@お腹いっぱい。:2005/09/06(火) 13:27:48
>>552
emcws あてますた。
Makefile.in は手でなおして、configure は autoconf で作りなおしますた。

tamago と emcws ってどっちがいいの?
554名無しさん@お腹いっぱい。:2005/09/06(火) 13:52:42
tamago
555名無しさん@お腹いっぱい。:2005/09/15(木) 03:44:22
Elispはじめて間もないのですが、質問です。
ある変数に入っている文字コードを判別するのって
どうやればいいのでしょうか??
例えば、

(setq hoge1 "ほげ" hoge2 "hoge")

ここで、hoge2 に入っている文字列がローマ字であるかどうかだけ
分かれば、もしくは hoge1 に2バイト文字が入っているかどうかが
分かれば分かればいいのですが・・・

get-text-property あたりを見ているのですが・・・
ご教授お願いします。
556名無しさん@お腹いっぱい。:2005/09/15(木) 04:06:20
>>555
その目的なら multibyte-string-p でよさそうな気がする。
正規表現で調べるって手もあるだろうけど。
557名無しさん@お腹いっぱい。:2005/09/15(木) 04:07:42
「ローマ字であるかどうかだけ」
これは、「アルファベットのみからなる」と置き換えてもいいの?
558名無しさん@お腹いっぱい。:2005/09/15(木) 04:09:45
そーいえばset-buffer-multibyteの使い方よくわからん
559名無しさん@お腹いっぱい。:2005/09/15(木) 04:27:26
>>556
全然よくない。
560555:2005/09/15(木) 10:03:45
皆様、レスありがとうございます。
>>557さんの言うとおり、入っている文字列が
ただ単に日本語かまた違うものかを判別したいだけ
なので”アルファベットのみからなる”と
置き換えても構わないと思います。

すみません、よろしくお願いします。
561名無しさん@お腹いっぱい。:2005/09/15(木) 10:10:12
Ro-maji hyouki no nihongo wa dousuruno?
562名無しさん@お腹いっぱい。:2005/09/15(木) 10:10:53
hoge が、アルファベットのみで構成された文字列かどうか調べるなら、

(string-match "\\`[A-Za-z]+\\'" hoge)

charset で調べるなら、

(let ((charsets (find-charset-string hoge)))
(catch 'done
(while charsets
(unless (memq (car charsets)
'(ascii eight-bit-control eight-bit-graphic))
(throw 'done t))
(setq charsets (cdr charsets)))
nil))

とか?
563555:2005/09/15(木) 10:34:56
おお、素早いレスありがとうございます!!
今試して見ます!!
564555:2005/09/15(木) 10:50:33
>>562
おお、出来ました!!
正規表現での判別と文字そのものの判別ですか〜
なるほどなるほど。どうもありがとうございます。
勉強になりました。
565名無しさん@お腹いっぱい。:2005/09/15(木) 11:32:24
カテゴリ使って
(string-match "\\Ca" "abc")
=> nil
(string-match "\\Ca" "あいうえお")
=> 0
566名無しさん@お腹いっぱい。:2005/09/15(木) 19:09:26
再度書き込みすみません。
例えば、以下のように関数の続きとして>>562さんのコードを
使いたいのですが、(let を外してしまうと
上手く動いてくれません。let は局所的変数宣言でしたよね?

(defun .....
.
.
(setq hoge (split-string "name1 name2 name3"))
(setq name_s (length hoge) name_n 0 mew-from-sex 1)
(if (let ((charsets (find-charset-string (nth name_n hoge))))
(catch 'done
(while charsets
(unless (memq (car charsets)
'(ascii eight-bit-control eight-bit-graphic))
(throw 'done t))
(setq charsets (cdr charsets)))
nil))
(setq people 0)
(setq people 1))
.
)
よろしくお願いします。。。
567名無しさん@お腹いっぱい。:2005/09/15(木) 19:17:35
(let を外したいのは何故?
568名無しさん@お腹いっぱい。:2005/09/15(木) 19:27:46
関数の始めにいっきに let で変数宣言したくて、

(let ((charsets (find-charset-string (nth name_n hoge))))
も含めて宣言しようと外したのですが。。。
569名無しさん@お腹いっぱい。:2005/09/15(木) 19:42:22
多段let撲滅
570名無しさん@お腹いっぱい。:2005/09/15(木) 19:45:03
該当の部分を函数にする
途中に let がある事に慣れる
(let (charsets)
...
(if (progn
(setq charsets (find-charset-string ...

のどれか
571名無しさん@お腹いっぱい。:2005/09/15(木) 19:54:27
>>569
参考までに教えて欲しんだけど
1. 実行速度
2.可読性
のいづれかの理由によるものでしょうか? それとも他の理由?
572569:2005/09/15(木) 19:55:16
>>571
いや、俺はちょっと皮肉(?)ってみただけで。
573名無しさん@お腹いっぱい。:2005/09/15(木) 19:57:03
えっと、以下のようにするということでしょうか??

(let (charsets) hoge name_s name_n people mew-from-sex
(setq hoge (split-string "name1 name2 name3"))
(setq name_s (length hoge) name_n 0 mew-from-sex 1)
(if (progn setq charsets (find-charset-string (nth name_n hoge))
(catch 'done
(while charsets
(unless (memq (car charsets)
'(ascii eight-bit-control eight-bit-graphic))
(throw 'done t))
(setq charsets (cdr charsets)))
nil))
(setq people 0)
(setq people 1)))
574名無しさん@お腹いっぱい。:2005/09/15(木) 19:58:15
うわ、空白がすごくみずらいですね。。。
すみません。。
575名無しさん@お腹いっぱい。:2005/09/15(木) 19:58:33
>>573
letの使い方理解してないぞ
576名無しさん@お腹いっぱい。:2005/09/15(木) 20:01:27
あ、申し訳ないです。
変数リストを()でひとまとめにしていなかったですね。

(let (charsets) hoge name_s name_n people mew-from-sex

こんな感じでしょうか??
577名無しさん@お腹いっぱい。:2005/09/15(木) 20:02:36
こうでした、何度もすみません。
(let ((charsets) hoge name_s name_n people mew-from-sex)
578名無しさん@お腹いっぱい。:2005/09/15(木) 20:50:17
初心者は setq 禁止
579名無しさん@お腹いっぱい。:2005/09/15(木) 21:34:54
Emacs をわたし色に染めて♪ の人は自殺しそうでしたがまだ生きてますか?
580名無しさん@お腹いっぱい。:2005/09/15(木) 21:46:13
>>579
なにがあったの?
581名無しさん@お腹いっぱい。:2005/09/17(土) 06:30:27
LISPのクラスを取るか迷っている初心者ですが、LISPが出きると、どういうことができるようになるのか教えてください。
582名無しさん@お腹いっぱい。:2005/09/17(土) 08:00:56
>>581
特にない。
583名無しさん@お腹いっぱい。:2005/09/17(土) 08:54:52
>>581
普通のやつらの上を行ける。
584名無しさん@お腹いっぱい。:2005/09/17(土) 11:44:54
>>583
どういう点で?
585名無しさん@お腹いっぱい。:2005/09/17(土) 13:42:35
586名無しさん@お腹いっぱい。:2005/09/17(土) 14:05:26
>>581
クラスって大学か何かか。
EmacsLispでCLOSみたいなもんを誰か作ったのかと思った。
587名無しさん@お腹いっぱい。:2005/09/17(土) 14:29:15
学校の授業という意味です。
588名無しさん@お腹いっぱい。:2005/09/17(土) 14:44:13
>>585
ありがとうございます。読みました。
中で「Lispはパワフルな言語だとは知っているけど」等、LISPは凄いと絶賛していますが、
具体的にどう凄いのかってのが、どんなところで使われているのかってのが分からないのですが…。
LISPが出きると、どういうときにそれを活かせますか?

この授業は卒業のため取らなければならない科目ではないのですが、
将来役に立つのなら、取って見ようかなと迷っています。
589名無しさん@お腹いっぱい。:2005/09/17(土) 15:16:50
学生なのに自分からは何も調べようとしないやつには、どんなことであろうと将来役に立たない
590名無しさん@お腹いっぱい。:2005/09/17(土) 15:17:55
lisp なんかできたとして、将来研究所とかに行かない限り用途ないのでは?
perl なり php なり使えたほうがバイトも出来ておとく。
591名無しさん@お腹いっぱい。:2005/09/17(土) 15:41:04
perlなんか授業でやるか?
592名無しさん@お腹いっぱい。:2005/09/17(土) 16:06:14
perlの授業あります。
将来はネットワークエンジニア希望です。
593sage:2005/09/17(土) 17:56:43
>>592
いらないんじゃね?
594名無しさん@お腹いっぱい。:2005/09/17(土) 17:59:54
久しぶりに2chに来たらsageるつもりがageちまった。
595名無しさん@お腹いっぱい。:2005/09/17(土) 18:06:49
とりあえず、この板ってのは古い知識しか持たない老人が多いので、
こんな場所で進路相談をするのは不適切なんじゃないかなと思う。
596名無しさん@お腹いっぱい。:2005/09/17(土) 20:58:02
将来役に立つかっつったら微妙だわな。
だけど大学において考え方を学ぶ、学び方を学ぶって意味ではlispはおすすめ
かもしれず。
関係ないけど、「出きる」って変換は気持ち悪いな。
597名無しさん@お腹いっぱい。:2005/09/17(土) 21:02:25
LISPを使って(応用して)なにをするかによるだろう。

単純に、LISPを勉強するだけなら独学で(Emacs使ってるうちに)勉強
できるよ。なにしろ、単純な言語だからな。

インタプリタの作成とかまでやるんだったらいいんじゃないかな?
言語仕様が簡単だから結構楽しいと思うよ。
598名無しさん@お腹いっぱい。:2005/09/17(土) 21:07:32
> 将来役に立つかっつったら微妙だわな。
> だけど大学において考え方を学ぶ、学び方を学ぶって意味ではlispはおすすめ
> かもしれず。

関係ないけど、気持悪い書き方だな。
599名無しさん@お腹いっぱい。:2005/09/17(土) 21:24:34
だいたい、Emacs Lispの板でLispについて訊いても……
600名無しさん@お腹いっぱい。:2005/09/17(土) 21:27:13
> 訊

おじさん、何でこんな漢字つかってるの?
601名無しさん@お腹いっぱい。:2005/09/17(土) 22:20:25
602名無しさん@お腹いっぱい。:2005/09/17(土) 22:25:40
>>601
一時帰宅が許されたのですか。病状も多少はよくなったようで、
御同慶の至り。
603名無しさん@お腹いっぱい。:2005/09/18(日) 00:46:55
Emacs Lispの板???
604名無しさん@お腹いっぱい。:2005/09/18(日) 02:21:31
返事が遅れました。初心者に付き合っていただいて、ありがとうございます。
LISPがC言語とどう違うのか教えてください。
言語が違うってのは略。利点や使う場面等。
UNIXと深い関係にあるのですか?
605名無しさん@お腹いっぱい。:2005/09/18(日) 02:22:56
Lisp なんかつかうやつはばかです。ということじゃないかな。
606名無しさん@お腹いっぱい。:2005/09/18(日) 02:37:36
ム板のlispスレできいたら?
607名無しさん@お腹いっぱい。:2005/09/18(日) 03:20:23
とりあえず初心者装った釣りでないならバカでしょう
知ってか知らずかかまうね、ここの人は
608名無しさん@お腹いっぱい。:2005/09/18(日) 17:53:19
使う場面: スクリプティング用途
  例:
   Emacsのカスタマイズ
   Gimpのプラグイン (script-fu)
   ゲーム作り (AisleRiotのルールとかtrackballsのステージとか)
   WMのカスタマイズ (http://scwm.sourceforge.net/ とか)
   uimの各種IMの実装
利点:
  クロージャとマクロが使える

いや、「LispとCがどう違うか」なんて言ってる奴にマジレスするなんて
我ながら釣られているとしか思えないが…
609名無しさん@お腹いっぱい。:2005/09/18(日) 18:15:22
C 使えれば、ライブラリ使っていろんなもの開発できるしなぁ。
610名無しさん@お腹いっぱい。:2005/09/18(日) 23:22:31
複雑なことをやろうとすると、
結局Cで未完成なLISP(略
611名無しさん@お腹いっぱい。:2005/09/18(日) 23:24:42
どれだけ lisp な製品が世の中に出ているかもあわせて考えるべきんじゃないかと。
612名無しさん@お腹いっぱい。:2005/09/19(月) 13:02:46
>>611
誰かがクラッシュバンディクーの中でlispが動いているとか言っていた
613名無しさん@お腹いっぱい。:2005/09/19(月) 13:24:27
建築系でメジャーな AutoCAD も lisp でカスタマイズする。
Emacs みたいに lisp interpreter をコアにしてるのか?
614名無しさん@お腹いっぱい。:2005/09/20(火) 02:30:22
ってか、俺としてはむしろ、LispとCの共通点の方が知りたい。
615名無しさん@お腹いっぱい。:2005/09/20(火) 11:43:27
>>612
ゲームはメモリ管理がシビアだから既存の物を使えないんで、
1から実装することになって、結局、実装の容易なlispになるんだろう。
616名無しさん@お腹いっぱい。:2005/09/20(火) 11:48:46
617名無しさん@お腹いっぱい。:2005/09/20(火) 12:24:10
>>616
正直、PythonやRubyが普及している今となってはlispを使う意味はないよなぁ。

その記事で、オブジェクトの永続化とか動的バインドとかで、すごい助かった
って言ってるけど、それなら別にlispでなくてええやん。Pythonでええやん。
618名無しさん@お腹いっぱい。:2005/09/20(火) 13:23:54
まとめると、lisp なんか使う奴はバカですってことか。
619名無しさん@お腹いっぱい。:2005/09/20(火) 13:24:50
別に Python でなくてもええやん。
620名無しさん@お腹いっぱい。:2005/09/20(火) 14:16:29
いつまでもこのスレでこの話を扱ってる奴が知障
621名無しさん@お腹いっぱい。:2005/09/20(火) 21:40:31
池沼がこのスレに粘着するから、
そんなこと書いてはいけません。
622名無しさん@お腹いっぱい。:2005/09/22(木) 05:23:11
Lisp 道場らしくいこう。

java のソース上で、find-file-at-point したときに、クラスに対応したファイルを探
してみる。

制限:
- 同じソースツリー上にあるものだけが対象。
- 今見てるソースと同じディレクトリにクラス名と同じパッケージがあったりするとダメ
だったりする。

次のレスからソース。
623622:2005/09/22(木) 05:24:27
;; その1
(require 'ffap)

(eval-when-compile
(require 'cl))

(defun ffap-java-package-to-path (package-or-fqcn)
(replace-regexp-in-string "\\." "/" package-or-fqcn))

(defun ffap-java-import-list ()
(save-excursion
(goto-char (point-min))
(let (list)
(while (re-search-forward "import\\s-+\\(.+\\)\\s-*;" nil t)
(push (match-string 1) list))
(nreverse list))))

(defun ffap-java-src-directory ()
(save-excursion
(goto-char (point-min))
(if (re-search-forward "package\\s-+\\(.+\\)\\s-*;" nil t)
(let ((package (match-string 1)))
(replace-regexp-in-string
(concat (regexp-quote (ffap-java-package-to-path package)) "$") ""
(directory-file-name default-directory)))
default-directory)))
624622:2005/09/22(木) 05:25:17
;; その2

(defun ffap-java-mode (name)
(let ((class (car (split-string name "\\.")))
(import-list (ffap-java-import-list))
(src-directory (ffap-java-src-directory)))
(or
(catch 'found-class
(dolist (import-class import-list)
(when (string-match (concat "\\." (regexp-quote class) "$")
import-class)

(throw 'found-class
(expand-file-name
(concat (ffap-java-package-to-path import-class)
".java")
src-directory)))))
(ffap-locate-file
name '(".java")
(delq nil
(cons
"."
(mapcar (lambda (import-class)
(when (string-match "\\.\\*$" import-class)
(expand-file-name
(ffap-java-package-to-path
(replace-match "" nil nil import-class))
src-directory)))
import-list)))))))
625622:2005/09/22(木) 05:26:45
;; 設定
(add-to-list 'ffap-alist '(java-mode . ffap-java-mode))

これでおしまい。
素直に jde とか gtags 使えよって話もあるけどね。
ちょっと開いたソースのクラスを追ったりするのには使えると思う。
626名無しさん@お腹いっぱい。:2005/09/24(土) 12:38:06
>>622
おっ、これ結構つかえる。あんがと
627622:2005/10/08(土) 02:57:34
淋しすぎるから、ちょっとだけネタ投下。

nxml ネタその1
昔どっかに書いた気もするけど、無理矢理 mule-ucs と共存させるにはこんな感じに修
正すればそれっぽくいける。
ただし、どんな問題が起きるか分からないから自己責任でやる事。
;; 何かあるから無効にしてるハズだから。

--- nxml-mode-orig/nxml-mode.el
+++ nxml-mode/nxml-mode.el
@@ -33,8 +33,8 @@
-(when (featurep 'mucs)
- (error "nxml-mode is not compatible with Mule-UCS"))
+;; (when (featurep 'mucs)
+;; (error "nxml-mode is not compatible with Mule-UCS"))

--- nxml-mode-orig/rng-auto.el
+++ nxml-mode/rng-auto.el
@@ -26,8 +26,8 @@
-(when (featurep 'mucs)
- (error "nxml-mode is not compatible with Mule-UCS"))
+;; (when (featurep 'mucs)
+;; (error "nxml-mode is not compatible with Mule-UCS"))
628622:2005/10/08(土) 03:01:50
nxml ネタその2
自分で mime-charset の名前を定義できるようにする。
ari さんの cp932.el を使えばカンペキ。

(defvar nxml-mime-charset-coding-system-alist
'(("windows-31j" . shift_jis)
("cp932" . shift_jis)
("ms932" . shift_jis)))

(defadvice nxml-mime-charset-coding-system
(after nxml-mime-charset-coding-system-use-alist activate)
(unless ad-return-value
(setq ad-return-value
(cdr (assoc-ignore-case (ad-get-arg 0)
nxml-mime-charset-coding-system-alist)))))

629名無しさん@お腹いっぱい。:2005/10/21(金) 12:16:09

バッファリストをソートしようと
こんな感じにしたけど、全部のバッファが表示されない。。

(defadvice buffer-list (around buffer-list-around activate)
(sort ad-do-it
'(lambda (b1 b2)
(string< (buffer-name b1) (buffer-name b2)))))


defadvice 良く分からん。
Elispも。
630名無しさん@お腹いっぱい。:2005/10/21(金) 16:32:23
make-variable-buffer-localとdefvaraliasの
合の子みたいなのってできないでしょうか。
デフォルトでは変数Bは変数Aの値を使うけれど、
setqされるとAの値を変更するのではなく、
以後は独立した値を持つ、と。
631名無しさん@お腹いっぱい。:2005/10/21(金) 16:38:22
ムリ。
632名無しさん@お腹いっぱい。:2005/10/21(金) 16:50:26
(or B A) で代用か
633名無しさん@お腹いっぱい。:2005/10/21(金) 17:29:55
make-local-variable?
634名無しさん@お腹いっぱい。:2005/10/21(金) 17:37:53
>>629
buffer-listは表示なんかしない。

何がしたいのかよくわからんが、list-buffersでの並びを制御したいのだったら
list-buffers-noselectをadviceするべきだと思う。
635名無しさん@お腹いっぱい。:2005/10/21(金) 19:49:11

したいことは、C-xC-bのとき
ソートしたいなーと思ったんだけど。

list-buffers-noselect の中で buffer-list を呼んでるんで
いいと思ったが、だめか。。
636名無しさん@お腹いっぱい。:2005/10/21(金) 20:10:55
>>635
(setq ibuffer-default-sorting-mode 'alphabetic)してibuffer使っとけ。
637名無しさん@お腹いっぱい。:2005/10/21(金) 20:23:34
list-buffers 使いやすいか?
638名無しさん@お腹いっぱい。:2005/10/21(金) 20:59:36
Oh Thanks.

ところで、ibuffer ってファイルだけ
表示って可能か?

C-uC-xC-b っぽいこと。
639名無しさん@お腹いっぱい。:2005/10/26(水) 16:58:28
初歩的な質問だと思いますが,
xemacsで
/home/mako/jikken/userFiles/690562.txt
など,
/homeではじまり.txtで終るファイル
へのパスが書かれていた場合,
そのパスの上でマウスの中ボタンをクリックすれば,
xemacsでそのファイルを起動できるようにする方法を
教えてください.

あまりLISPにくわしくないので,記述法など詳細に教えて頂ければ
助かります.

googleで検索したところ,URLをマウスの中ボタンをクリックすれば,
ブラウザで起動できるようにする方法は,
(autoload 'browse-url-at-mouse "browse-url"
"Ask a WWW browser to load a URL clicked with the mouse." t)
(add-hook 'mew-message-mode-hook
(function
(lambda()
(local-set-key [mouse-2] 'browse-url-at-mouse)
)))
でできるという事は分かりました.
これを,txtファイル,XEMACSで起動という形に出来れば最高なのですが.

またいろいろ調べていると,thingatptやfiberという
プログラムを使うと出来そうなのですが,そこからどうすれば良いのかが
分かりません.明日までに出来るようにしてと頼まれているので,
急いでいます.

宜しくお願い致します.
640名無しさん@お腹いっぱい。:2005/10/26(水) 17:44:52
よろしくお願い致します.
急いでいます.
641名無しさん@お腹いっぱい。:2005/10/26(水) 17:45:58
すみません.
自己解決しました.
642639:2005/10/26(水) 19:05:10
解決はしていません.
よろしくお願い致します.
643名無しさん@お腹いっぱい。:2005/10/26(水) 19:14:58
Emacs Lisp道場っつーネタかよそれ。しかもすげー自己中。そしてバカ。

小学生が大学生の電気工学の授業中に乗り込んでいって
これができる回路を作ってください。明日までに提出する自由工作なんです。よろしく。
ついては電子工作に詳しくないので回路や作り方も懇切丁寧に教えてください。
というみたいな行動を自分がしているというのは認識しているか? >>639
644名無しさん@お腹いっぱい。:2005/10/26(水) 19:57:32
Emacs 22だとlist-buffersではWindowsのエクスプローラとかみたいに
見出しをクリックして並べ替えできるようになってるんだけど、
ibufferは旧態依然なので見劣りしてしまうね。
645名無しさん@お腹いっぱい。:2005/10/26(水) 22:19:06
クリック
646名無しさん@お腹いっぱい。:2005/10/26(水) 23:28:46
>>644
Emacsの上でまでマウスを使いたくない派の俺としては、旧態依然としていても
, や s a とかでソートのモードが変更できる ibuffer の方が100万倍使いやすいわけだが。
647名無しさん@お腹いっぱい。:2005/10/26(水) 23:42:04
マウスでできる != マウスでしかできない
648名無しさん@お腹いっぱい。:2005/10/27(木) 01:58:41
>>639 が「自分はヌルーされている」と気付くのはいったいいつかな?(ワクテカ(AA略
649名無しさん@お腹いっぱい。:2005/10/27(木) 10:40:24
俺もマウスは嫌いだが、Diredの中のファイルは
マウスで他のアプリにドロップしたくなる。
650名無しさん@お腹いっぱい。:2005/10/27(木) 12:17:30
そもそもマウス刺さってないし。
651名無しさん@お腹いっぱい。:2005/10/27(木) 13:49:43
kill-ring-save は 'invisible 属性のテキストもコピーしてしまいますが、
'invisible 属性のない普通のテキストのみをコピーするようにするにはどうすれ
ば良いでしょうか?
652名無しさん@お腹いっぱい。:2005/10/28(金) 01:25:52
>>649
Windows だったら CraftDrop と組み合わせればいけるよ。
653名無しさん@お腹いっぱい。:2005/10/28(金) 02:15:52
>>651
でっちあげてみた。
ただ、複数の invisible 属性があるような場合だとうまく動かない。
たとえばこんなの
(concat "a" (propertize "b" 'invisible 'test1) (propertize "c" 'invisible 'test2) "d")

(defun kill-ring-save-without-invisible (beg end)
(interactive "r")
(kill-ring-save beg end)
(let ((kill (car kill-ring))
new-kill pos)
(when (get-text-property 0 'invisible kill)
(setq kill
(substring kill
(or (next-single-property-change 0 'invisible kill)
(length kill)))))
(while (setq pos (next-single-property-change 0 'invisible kill))
(setq new-kill (concat new-kill (substring kill 0 pos)))
(setq kill
(substring kill
(or (next-single-property-change pos 'invisible kill)
(length kill)))))
(setq new-kill (concat new-kill kill))
(kill-new new-kill t)))
654名無しさん@お腹いっぱい。:2005/10/28(金) 05:44:14
複数の invisible 属性に対応してみた。

(defun kill-ring-save-without-invisible (beg end)
(interactive "r")
(kill-ring-save beg end)
(let ((kill (car kill-ring))
(pos 0)
new-kill)
(while (> (length kill) 0)
(setq pos (or (next-single-property-change 0 'invisible kill)
(length kill)))
(unless (get-text-property 0 'invisible kill)
(setq new-kill (concat new-kill (substring kill 0 pos))))
(setq kill (substring kill pos)))
(kill-new new-kill t)))
655名無しさん@お腹いっぱい。:2005/10/28(金) 10:25:41
>>652

だんな!

このご恩は一生わすれませんぜ!
マウス使わないでOKなとこもGoodですぜ!
656名無しさん@お腹いっぱい。:2005/10/28(金) 13:03:48
どこが道場なんだ?
657名無しさん@お腹いっぱい。:2005/10/28(金) 13:28:05
ここ。
658名無しさん@お腹いっぱい。:2005/10/28(金) 14:03:40
六三郎
659名無しさん@お腹いっぱい。:2005/10/28(金) 15:52:28
>>653-654 さん
お返事ありがとうございます。

多分その関数は 21.3 までなら動くでしょうが、22.* では動かないかと思います。
(22 では (get-char-property pos 'invisible) が invisible 属性のテキストに対してうまく機能しないので。)

まあでもなんとか自力でやりたいことを達成することができました。
お世話になりました
660名無しさん@お腹いっぱい。:2005/10/28(金) 16:08:26
んじゃ22で動くようにしたものを貼ってよう。giveはするがtakeはしない?
661名無しさん@お腹いっぱい。:2005/10/28(金) 16:09:02
まちがった、giveとtakeが逆だった……orz
662659:2005/10/29(土) 00:04:49
>>660 san
そうですよね。

;; [ 2005-10-28 (00:38) ]
(defun kill-ring-save-visible (beg end)
(interactive "r" )
(let ((s "") from to)
(save-excursion
(save-restriction
(narrow-to-region beg end)
(setq from (goto-char (point-min)))
(while (not (eobp))
(if (point-invisible-p)
(progn
(setq to (point))
(setq s (concat s (buffer-substring-no-properties from to)))
(end-of-visible-line)
(setq from (point)))
(forward-char)))
(if (> (setq to (point)) from)
(setq s (concat s (buffer-substring-no-properties from to))))
(kill-new s)))))

invisible になるまで1文字ずつ進まないようにしてるので、ここら辺はもうちょっと
速くなるかもしれません。
663659:2005/10/29(土) 00:06:03
1文字ずつ → 1文字ずつしか
664名無しさん@お腹いっぱい。:2005/10/29(土) 02:29:21
22 で確認
(defun kill-ring-save-visible (begin end)
(interactive "r")
(let ((r '()) (p begin) n)
(while (and (setq n (next-single-property-change p 'invisible nil end))
(> n p))
(unless (get-text-property p 'invisible)
(push (buffer-substring p n) r))
(setq p n))
(kill-new (apply #'concat (nreverse r)))))
665659:2005/10/29(土) 14:06:12
>>664san
やっぱり自分の環境ではその関数も全く機能しません。

emacs-version
=> GNU Emacs 22.0.50.1 (i386-mingw-nt5.1.2600)
of 2005-07-11 on A208752
666名無しさん@お腹いっぱい。:2005/10/29(土) 18:56:32
next-single-property-change が nil を返した時の処理が抜けてるせいかな。
(defun remove-invisible (s)
(interactive "r")
(let ((r '()) (p 0) n)
(while (and (setq n (next-single-property-change p 'invisible s))
(> n p))
(unless (get-text-property p 'invisible s)
(push (substring s p n) r))
(setq p n))
(unless (get-text-property p 'invisible s)
(push (substring s p) r))
(apply #'concat (nreverse r))))
(remove-invisible (concat "a" (propertize "b" 'invisible 'test1) (propertize "c" 'invisible 'test2) "d"))
=> "ad"
になる?
GNU Emacs 22.0.50.2 (i386-unknown-freebsd6.0, X toolkit, Xaw3d scroll bars) of 2005-10-29
だと期待どおりの動作をするが。
667659:2005/10/29(土) 20:35:40
>>666
はい、今評価してみた所、 "ad" になりました。

>>662 に追加:
すみません、肝心な関数を貼るのが抜けていました。 >>662 の側に置いてあげて下さい。

(defun point-invisible-p ()
(line-move-invisible-p (point)))


↑でも使用してある通り、 `line-move-invisible-p' であれば invisible をうまく見つける
ことができるのですけどね。。。

(defun line-move-invisible-p (pos)
"Return non-nil if the character after POS is currently invisible."
(let ((prop (get-char-property pos 'invisible)))
(if (eq buffer-invisibility-spec t)
prop
(or (memq prop buffer-invisibility-spec)
(assq prop buffer-invisibility-spec)))))


668名無しさん@お腹いっぱい。:2005/10/29(土) 23:16:07
もしかしてこーゆーこと?
(defun invisible-p (position &optional object)
(let ((invisible (get-char-property position 'invisible object)))
(if (eq buffer-invisibility-spec t)
invisible
(catch :result
(dolist (prop (if (consp invisible) invisible (list invisible)))
(when (or (memq prop buffer-invisibility-spec)
(assq prop buffer-invisibility-spec))
(throw :result t)))))))

(defun kill-ring-save-visible (begin end)
(interactive "r")
(let ((r '()) (p begin) n)
(while (and (setq n (next-single-char-property-change p 'invisible
nil end))
(> n p))
(unless (invisible-p p)
(push (buffer-substring p n) r))
(setq p n))
(unless (invisible-p p)
(push (buffer-substring p end) r))
(kill-new (apply #'concat (nreverse r)))))
669659:2005/10/30(日) 05:21:17
>>668
そうそれです。完璧に動作しました! しかも速度も高速ですね。
buffer-invisibility-spec が鍵を握るのはわかって
いたのですが、今コードを解釈する時間がない為、連絡だけさせていただきました。
670名無しさん@お腹いっぱい。:2005/10/30(日) 06:24:23
>>659 で言っていたうまく機能しないと言うのは見えているものまで一緒に消えちゃっ
ていたと言う事でOK?
671670:2005/10/30(日) 06:34:20
少しわかりずらいな。
つまり、
(with-current-buffer (window-buffer (display-buffer (get-buffer-create "*test*")))
(erase-buffer)
(add-to-invisibility-spec '(test1 . t))
(insert (concat "a" (propertize "b" 'invisible 'test1) (propertize "c" 'invisible 'test2) "d")))
をした結果の *test* buffer の中身に対して kill-ring-save-visible を実行した結果が
=> "acd"

となって欲しかったという事でいい?
672名無しさん@お腹いっぱい。:2005/10/30(日) 19:48:20
もしかすると text-property -> char-property で overlay が認識される
ことで解決したってことかも。
何にせよ、Emacs 22 だからというより設定のせいっぽいが。
(デフォルトでは buffer-invisibility-spec は 22 でも t だし
invisible な overlay も存在しない)
673名無しさん@お腹いっぱい。:2005/10/30(日) 22:50:13
あるソフトウェア独自の簡単なスクリプト言語に対応するメジャーモードを作りたいのですが、
コメント部の色をかえるにはどうしたらいいのでしょうか?
コメントはC言語の /* が @cs に、*/ が @ce になったような感じです。複数行可。
comment-start と comment-endにそれぞれ値をセットするばいいだけというわけではないのでしょうか?
よろしくお願い致します。
674名無しさん@お腹いっぱい。:2005/10/31(月) 11:27:48
Emacs Lisp神社
675名無しさん@お腹いっぱい。:2005/11/01(火) 02:51:02
>>673
それっぽく色を付けるならこんな感じかな。
modify-syntax-entry でコメント開始/終了文字の1文字目と2文字目を指定する。
実は Emacs で3文字以上からなるコメント文字を扱うのは結構面倒臭い。
どこかにお手軽に扱える elisp が転がってないかな?

(defvar hoge-mode-syntax-table nil)
(unless hoge-mode-syntax-table
(setq hoge-mode-syntax-table (make-syntax-table))
(modify-syntax-entry ?@ ". 13" hoge-mode-syntax-table)
(modify-syntax-entry ?c ". 24" hoge-mode-syntax-table))
(defvar hoge-font-lock-keywards nil)
(defun hoge-mode ()
(interactive)
(kill-all-local-variables)
(setq comment-start "@cs")
(setq comment-end "@ce")
(set-syntax-table hoge-mode-syntax-table)
(set (make-local-variable 'font-lock-defaults) '(hoge-font-lock-keywards))
(setq mode-name "Hoge")
(setq major-mode 'hoge-mode))

676675:2005/11/01(火) 03:17:06
強引にやってみた。
複数行にマッチするのは font-lock で激しくすすめられてないっぽいけど、おーけー
としとく。
実は hoge-font-lock-comment-matcher は内部で comment-start, comment-end を使う
ようにすると色んな mode で使えて嬉しいかもしれないとか思った。

(defvar hoge-font-lock-keywards nil)
(defvar hoge-font-lock-syntax-keywords '((hoge-font-lock-comment-matcher (1 "!") (2 "!"))))

(defun hoge-font-lock-comment-matcher (limit)
(let (beg end)
(when (re-search-forward "@cs" limit t)
(setq beg (cons (copy-marker (match-beginning 0))
(copy-marker (match-end 0))))
(when (re-search-forward "@ce" limit t)
(setq end (cons (copy-marker (match-beginning 0))
(copy-marker (match-end 0))))
(set-match-data
(list (car beg) (cdr end) (car beg) (cdr beg) (car end) (cdr end)))
t))))

(defun hoge-mode ()
(interactive)
(kill-all-local-variables)
(setq comment-start "@cs")
(setq comment-end "@ce")
(set (make-local-variable 'font-lock-defaults) '(hoge-font-lock-keywards))
(set (make-local-variable 'font-lock-syntactic-keywords) hoge-font-lock-syntax-keywords)
(setq mode-name "Hoge")
(setq major-mode 'hoge-mode))
677名無しさん@お腹いっぱい。:2005/11/01(火) 21:34:42
非同期にHTTPサーバとXMLなどのデータをやりとりする仕組みで、
ユーザイベントに動的に反応して、半リアルタイムに挙動を変える
ようなUIのelispって何かある?
678名無しさん@お腹いっぱい。:2005/11/01(火) 21:46:00
ajax ですか?
679名無しさん@お腹いっぱい。:2005/11/01(火) 23:08:31
emacs-w3m
680677:2005/11/02(水) 13:49:44
>>678
Ajaxのelisp版を想定中。alax? aelax?

>>679
少なくとも現状のままでは、「非同期」ではなく動的ではないと思う。
681名無しさん@お腹いっぱい。:2005/11/02(水) 14:24:42
slime
682名無しさん@お腹いっぱい。:2005/11/12(土) 21:34:51
リストを連結する関数は何ですか。
RubyでいうとArray#joinです。
683名無しさん@お腹いっぱい。:2005/11/12(土) 22:39:40
>>682
mapconcat
684名無しさん@お腹いっぱい。:2005/11/16(水) 14:10:37
re-search-forward で「カーソルのある位置から」マッチさせることって出来ないの?

(looking-at REGEXP) 使ってみたけど、(match-string 0) 使ったら
(args-out-of-range 0 0) って言われた。
685名無しさん@お腹いっぱい。:2005/11/16(水) 18:23:41
(with-temp-buffer
(insert "hoge")
(goto-char (point-min))
(and (looking-at "hoge") (match-string 0)))
=> "hoge"
686名無しさん@お腹いっぱい。:2005/11/17(木) 00:03:45
普通にre-search-forwardするのと、事前にチェックした(point)を組み合わせる。
687名無しさん@お腹いっぱい。:2005/11/17(木) 03:08:58
save-excursion と save-current-buffer の使い分けはどうすればいい?
688名無しさん@お腹いっぱい。:2005/11/17(木) 04:04:48
pointやmarkをどうするか次第
689名無しさん@お腹いっぱい。:2005/11/18(金) 11:51:29
faceを少しだけ明るく(もしくは暗く)する関数ってないですか?
(color-values "color-name")した値を加工して、そのままset-face-backgroundしようとしたら
stringpじゃねぇよボケ、と言われました。何か良い方法はないでしょうか。
690689:2005/11/18(金) 11:51:57
質問age
691名無しさん@お腹いっぱい。:2005/11/18(金) 12:18:02
28秒
692名無しさん@お腹いっぱい。:2005/11/18(金) 12:34:04
なんで実際に書いたコードを隠すんだ?
stringp云々って根本的におかしなことやったとしか思えないんだけど
693688:2005/11/18(金) 13:31:54
>>692
根本的におかしいことやってるのは分かってるので、何か良い方法を教えてほしい、
という質問なんですが。

(defun more-bright-color (color)
(mapcar '(lambda (n) (* n * 1.1)) (color-values color))
)

(make-face 'brightly-face)
(set-face-background 'brightly-face (more-bright-color "khaki"))

> Debugger entered--Lisp error: (wrong-type-argument stringp (65535 65021 39578))
694名無しさん@お腹いっぱい。:2005/11/18(金) 13:42:01
>>693
色は、"#00aaff"みたいにすればいいんだよ。
695名無しさん@お腹いっぱい。:2005/11/18(金) 13:46:07
>>693
brighter
696名無しさん@お腹いっぱい。:2005/11/18(金) 14:11:42
これでいいかな。

(defun more-bright-color (color)
(apply #'format
(append '("#%02x%02x%02x")
(mapcar '(lambda (n)
(floor (min 255 (/ (* n 1.1) 256))))
(color-values color)))))
697688:2005/11/18(金) 14:16:40
>>694
なるほど。

>>696
今手元で同じような関数が出来た。目的を達成することが出来ました。
ありがとう。
698名無しさん@お腹いっぱい。:2005/11/18(金) 15:45:49
>>696
brighter だっつってんだろが。
"more bright" なんて英語通じないっつーの
699名無しさん@お腹いっぱい。:2005/11/18(金) 16:01:04
不自然だと感じるけど通じるよ
700名無しさん@お腹いっぱい。:2005/11/18(金) 16:05:38
>>698
"brighter" とだけレスされても日本語通じないっつーの。
「brighter だと英語としておかしい」とキチンと書けばいいのに。
701名無しさん@お腹いっぱい。:2005/11/18(金) 16:31:47
>700
よっぽど悔しかったんだね
702名無しさん@お腹いっぱい。:2005/11/18(金) 16:41:35
>>701
おまいも大人げないよ
スレが荒れるからヤメれ
703696:2005/11/18(金) 16:45:33
>>696
appendいらなかったな。

>>701
>>700は俺じゃないぞ。
704名無しさん@お腹いっぱい。:2005/11/21(月) 09:49:47
Perlのjoinにあたる関数ってないですか。今はこうしてます。

(defun join-string (s seq)
(reduce '(lambda (x y) (concat x s y)) seq))
705名無しさん@お腹いっぱい。:2005/11/21(月) 09:59:01
mapconcatか。reduceなんてシラネ。
706名無しさん@お腹いっぱい。:2005/11/22(火) 19:24:37
例えば

emacs yarou
hello emacs kun to lisp yarou

のようなラインがバッファ内にあったと仮定して、 M-x foo を実行すると
Line containing:
というプロンプトがミニバッファにでて、
emac li <RET>
と打ちこむと、 "emac" と "li" のサブストリングを含むライン (この場合は 2行目)
を occur などでマッチする関数 foo がほしいのですが。。。作って。。。
707名無しさん@お腹いっぱい。:2005/11/22(火) 21:27:04
正規表現でいいじゃん
708名無しさん@お腹いっぱい。:2005/11/22(火) 21:38:21
正規表現でいいだろう
709名無しさん@お腹いっぱい。:2005/11/22(火) 22:35:38
正規表現でいいような気がする
710名無しさん@お腹いっぱい。:2005/11/22(火) 22:42:25
正規表現でいいと思われ。
711名無しさん@お腹いっぱい。:2005/11/22(火) 22:48:41
正規表現じゃ大変だ
712名無しさん@お腹いっぱい。:2005/11/22(火) 23:15:19
正規表現ってのはどうだ
713名無しさん@お腹いっぱい。:2005/11/22(火) 23:19:25
もういいから。
714名無しさん@お腹いっぱい。:2005/11/23(水) 00:11:44
もういいよ。
715名無しさん@お腹いっぱい。:2005/11/23(水) 02:36:12
もういいな。
716名無しさん@お腹いっぱい。:2005/11/28(月) 00:18:36
(defun foo(str)
"HG"
(interactive "sLine containing:")
(if (not (string= str "emacs li"))
(message "not found!")
(if (not (re-search-forward "emac.*li" nil t))
(message "not found!!")
(message "found!")
)))
717名無しさん@お腹いっぱい。:2005/12/13(火) 13:47:33
ライブラリのリビジョンに応じて設定を変えたい場合なんかに便利かなと

(setq get-revision-number-line-limit 20)

;; 1.1.1.1 には対応してない
(defun get-revision-number (library)
(let* ((file (locate-library (concat library ".el")))
(buf-exists-p (get-file-buffer file))
(buf buf-exists-p)
rev)
(unless buf-exists-p
(setq buf (find-file-noselect file)))
(save-match-data
(with-current-buffer buf
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(let (search-limit)
(forward-line get-revision-number-line-limit)
(setq search-limit (point))
(goto-char (point-min))
(when (re-search-forward (concat "$Id: "
(regexp-quote (concat library ".el"))
",v " "\\([0-9]+\\.[0-9]+\\)" " ")
search-limit t)
(setq rev (string-to-number (match-string 1)))))))))
(unless buf-exists-p
(kill-buffer buf))
rev))
718名無しさん@お腹いっぱい。:2005/12/14(水) 00:43:34
emacs-version
"22.0.50.1"

Diredのバッファ名のように、
mode-lineのcvsのリビジョンの部分だけ色を変えたいのですが、

(setq-default mode-line-format
       `(" "
        ;;mw32-ime-mode-line-state-indicator
        mode-line-mule-info mode-line-modified " "
        mode-line-buffer-identification
        (vc-mode ,(propertize vc-mode 'face '(:foreground "blue" :background "red")))
        " " global-mode-string (-3 . "%p") " " "-%-"))

これを.emacsで評価すると、mode-lineでは.emacsのリビジョンが赤くなりますが、
別のバッファにうつっても.emacsのリビジョンが赤くなってしまいます。

着色しないときのようにファイル毎にそれぞれのリビジョンを表示するには、
どうしたら良いでしょうか?
719名無しさん@お腹いっぱい。:2005/12/14(水) 05:34:22
(setq-default mode-line-format
'(" "
;;mw32-ime-mode-line-state-indicator
mode-line-mule-info mode-line-modified " "
mode-line-buffer-identification
(vc-mode (:eval (propertize vc-mode 'face '(:foreground "blue" :background "red"))))
" " global-mode-string (-3 . "%p") " " "-%-"))
720名無しさん@お腹いっぱい。:2005/12/15(木) 00:31:01
>>719
できました。便利な属性(?)があるんですね。
721名無しさん@お腹いっぱい。:2005/12/15(木) 01:28:18
どんなタイミングでevalされるの?
722名無しさん@お腹いっぱい。:2005/12/20(火) 08:53:44
Vim の dircolors.vim みたいな ~/.dir_colors 編集用メジャーモードを作ったので晒してみます。
begin-base64 644 dircolors-mode.el.gz
H4sICJBGp0MAA2RpcmNvbG9ycy1tb2RlLmVsAK1Y0W7bNhR9z1cQ6oPlDfLk
8DoG4qBBazuNUccqHD/sQUChWHSmWZYySU4aYOi/DFCH/cMG7HFFCwzYZwx7
2/YBIyXbSUhfUwbmIBAl3nPu5Tk0KbPT6RA/SKZxGCeptYh91mAhsciF922c
EHFPZrzB/CALomvy/qsGj35bhh8cmD6bTZdpFi8kEuubOJ6TKAgPCDE2XSWf
6GoYvOM4u79hpCbuxd11Ei9vSM33Mq9eUs+8KZOJ74LQn3qJb4lODquZZkbM
Y14kEwSRT4xnZ/xj20a9Xhcl1AuuWy/ZScUT7+jdUZBtPy3lSdatgKZU+1Uc
+iTT40DC8cGyJAwiVgXc2rfKtpQtiG5ZkjLrNvBZXCEjtXdZBLb4M/QssliS
0bYtG72V5XAXi22r02UrC9130m1lkW2UahHVVGBp6XSpxHKk06USizxVFF2q
sIA8X6686fyJLlXUBeXL9Zil6nwBeb5ItVRzGmSnpVr+D5aq8wXk+aLoUolF
ni+KLpVY5Pmi6CKzbFm8V8uusmyvnuO4JoJranCA4ECDayG4lgbXRnDt3TiK
6EI1ulBEF6rRZbW0qrhDDY4iOKrBIT5QjQ8U8YFqfFgtkSruSIND/KMa/wDx
DzT+AeIfaPwDxD/Q+AeIf6DxDxD/QOMfIP6Bxj9A/AONf4D4B2v/MGB6H2Xe
O8sLgzQrlzjj7XuDNIhxZ9SJefpMNE+KphuJ9nO+1m15TX7M0zDwfLM4yqww
ns6tObu/ixM/XWV13RPXNSf98YXrft91hs6YX/uDV+eTl4MJbzpvJgNndOm6
ddd9LgpUmFYjJfyzphs544sXQ44+Gwz7/NIbCNbhYPRaMI7fnL8Y8cbF4PJy
MHpVhJ05/HLpdEVAzymKeDkUN93zoqCv+939Shj2zyZdpyeyj8VoVu3+qFe2
qnJ94bqNU9e9+3IVv/v9f41q7I04se3t8Zut6iGyiUQ2lUhAIkGJbCGRLSWy
jUS25UiKjIgqI6LIiKgyInqIRB4qkRSJpEokohJVVKKISlRRiR4hkUdKJKIn
VfQERE9Q9ARET1D0BERPUPQERE9Q9ARET1D0BERPUPQERE9Q9AREz/WSvG0V
VVfHXWvpwrtBDi04mndusMtIgvJf1AJV5dhEHH2YQZSxxJtmwa3YSviDeRCG
fLEPRbFeaPHiAu8qZKmgNZf8d3f5XFSoFl1SLLw5k+Ck9iAAL9tbhlnJmLLs
O6L2FWKLT6dDJk7POSb5p/yf/LcnuxHJP3/649d/879//pj/mH/88NOHP3/4
Jf/MI//Kfz99RFEztXuVkLv437GLkit2HUQRF9KKZ5Y48KjXN1n2yVFpK96a
bSNZkSLyFowYvXVe40HRhfC/nBDSi0MRkyyj4mQsJbWMvcsejspECvMmicXh
ior8Dy4122KlEwAA
====
723722:2005/12/20(火) 09:04:41
それで、いくつか作ってて疑問な点があったので聞いてみたいのですが

* 123行目で SYNTAX-ALIST 引数に dircolors-mode-syntax-alist を使うと
 (直前でコメントアウトしてあるコードのことです)
 font-lock が発動した際に型が違うと言われてしまうのですが、これは何故なんでしょうか?

* defface で face を定義した後、同名の変数を defvar する操作は必須ですか?
 自分の環境では省略しても問題ないように見えるんですが、ネットで見掛けるコードでは
 何故かわざわざ defface, defvar を並べて書いてるのでちょっと不安です。
 必要なのであれば、その理由も教えて頂けるとうれしいです。
 というかもしかして face と普通の変数ってスコープが違ったりしますか?
724722:2005/12/20(火) 09:08:14
すみません、>>723で嘘書いてしまいました。
defface の後の defvar を省略すると face が有効にならないみたいです。
これって何故なんでしょうか?
725名無しさん@お腹いっぱい。:2005/12/21(水) 00:51:58
deffaceはfaceの定義、defvarは変数の定義

たとえば dired.elの
(defface dired-header '((t (:inherit font-lock-type-face))))
(defvar dired-header-face 'dired-header)

dired-headerという名前で定義したfaceを用意しておいて、
dired-header-faceに代入しておく。
実際にfaceを決定するところではdired-header-faceを使用する。

elispコード内でdired-headerを直接指定していたら、
もしもあとでdired-header-faceを変えたくなったときに、
dired-headerを上書きするかコードを書き変えないといけないけど、
変数を経由するようにしておけば、別のfaceを定義してその変数に代入してあげればいい。


そういう意味で、paren.elなんかはfaceを直接overlayしているので、
faceの色や字体を変えたいときは、set-face-x系を使って
faceの設定を上書きしてあげないといけないね。
726名無しさん@お腹いっぱい。:2005/12/21(水) 07:12:14
> そういう意味で、paren.elなんかはfaceを直接overlayしているので、
> faceの色や字体を変えたいときは、set-face-x系を使って
> faceの設定を上書きしてあげないといけないね。

それで何か不都合あんの?
727名無しさん@お腹いっぱい。:2005/12/22(木) 00:55:23
ほとんどの人は上書きしてしまって不都合ないと思いますよ。
起動後にfaceを変えるってあまりないですよね。

でもまぁ、setqでちょこちょこ変えたい人には箱があったほうがいいですし、
それくらいのレベルだと思います。
728名無しさん@お腹いっぱい。:2006/01/10(火) 20:35:07
はじめまして。Emacs LISPの勉強をしている高校生です(はじめたばかりです。すみません)。
カレントバッファに対して文字列の検索や置換をする関数は見つけられたのですが、
文字列そのものを引数にとるような同様の関数はありますでしょうか。
具体的には、ある入力文字列から、決められた文字を取り除きたいのです。
729名無しさん@お腹いっぱい。:2006/01/10(火) 21:12:04
M-x apropos
その程度で質問してるようじゃ先が思いやられるよ
730名無しさん@お腹いっぱい。:2006/01/10(火) 21:40:19
なんでそんなに見下した態度取るんだ?
高校生か、がんばれよーでいいじゃん。
731名無しさん@お腹いっぱい。:2006/01/10(火) 21:43:34
replace-regexp-in-string とかでええのか?
または string-match して substring してみたり適当に
732名無しさん@お腹いっぱい。:2006/01/10(火) 23:25:20
read-string が知りたかったりして。
733名無しさん@お腹いっぱい。:2006/01/11(水) 00:57:18
オレも最初 read-from-minibuffer かと思った
734名無しさん@お腹いっぱい。:2006/01/11(水) 02:34:19
>731
replace-regexp-in-string、これです!ありがとうございました。
>729
今後はしばらく"M-x apropos"で調べていけそうです。Emacs LISPのこういうインタラクティブな感じがとっても好きです。
しょーもない質問をしてすみませんでした。そしてありがとうございました。
その他の方々もありがとうございました!

735名無しさん@お腹いっぱい。:2006/01/12(木) 18:54:34
time-stamp.elを使ってるとundoの時に不満ない?
timestamp部分はundoできなくなるけど、こんな事してみた。
(defadvice time-stamp-once (around cannot-be-undone activate)
(let ((buffer-undo-list t))
ad-do-it))

後から気付いたんだけど、redo.elを入れてたのをすっかり忘れてた。
ちゃんと使っていればそのような不満はあまり感じなかったかもしれない。
736名無しさん@お腹いっぱい。:2006/01/12(木) 20:01:00
>>735
Meadow meme だかに似たようなのがあったね。
737名無しさん@お腹いっぱい。:2006/01/12(木) 20:14:23
738名無しさん@お腹いっぱい。:2006/01/12(木) 21:14:55
>>734
まあマジレスすると mode-info 入れとけ。
ttp://www.namazu.org/~tsuchiya/elisp/mode-info.html
739名無しさん@お腹いっぱい。:2006/01/13(金) 03:30:34
行の中で最初の「空白/タブではない文字」にカーソルを移動したいんですが、どうすればいいですか?
740名無しさん@お腹いっぱい。:2006/01/13(金) 08:22:49
>>739
see back-to-indentation
741名無しさん@お腹いっぱい。:2006/01/13(金) 09:31:16
>>740
ありがとう。助かりました。
742名無しさん@お腹いっぱい。:2006/01/15(日) 03:13:49
>>738
734じゃないけど、mode-info は最新の CVS の Emacs だとコンパイルできない
ようです。過去にこのスレでパッチが出ていたんだけど、もう古くなっていま
した。。。最新のパッチがあれば投下して頂けないでしょうか?
743名無しさん@お腹いっぱい。:2006/01/16(月) 13:00:13
url.el の使い方が分からない…。

(let ((url (url-generic-parse-url "http://www.example.org/")))
    (url-retrieve url (lambda ()
                        (url-store-in-cache (current-buffer)))))
744名無しさん@お腹いっぱい。:2006/01/16(月) 13:00:47
途中送信してしまった…。

これでキャッシュの保存をしてくれるかと思ったけどしてくれなかった。
どうすればいいんだ???
745名無しさん@お腹いっぱい。:2006/02/04(土) 21:09:59
http://d.hatena.ne.jp/teny/20060204#p1

こういうのを見ると、emacs lispも技術の途切れて
壊滅的状態にあると思わざるを得ない。
746名無しさん@お腹いっぱい。:2006/02/04(土) 22:05:10
>>745
おまえの日本語も技術の途切れて壊滅状態だな。
747名無しさん@お腹いっぱい。:2006/02/04(土) 22:17:34
>>745
その題目って、何度も再発明されてるな。
748名無しさん@お腹いっぱい。:2006/02/04(土) 22:36:05
単に再発明した人がいるというだけなのにその帰結かよ。
749名無しさん@お腹いっぱい。:2006/02/04(土) 22:47:05
っていうか、バグバグじゃん。ちゃんとテストしてないな。
750名無しさん@お腹いっぱい。:2006/02/04(土) 23:08:53
まぁblogはある意味ここよりもゴミが多かったりするし。
751名無しさん@お腹いっぱい。:2006/02/04(土) 23:32:41
しかしまあはてなでEmacsはやりだしたってので
それじゃ俺も使ってみるかってな人間が増えるのはいいことだ。
うざい質問も増えるかもしれないけど
そのうち育ってステキなパッケージ作ってくれるやもしれんし。
752名無しさん@お腹いっぱい。:2006/02/04(土) 23:43:21
バグを見つけたなら、指摘コメントしてやるといいよ。
753名無しさん@お腹いっぱい。:2006/02/06(月) 22:59:07
>6のtexinfoが
{}のエスケープが無くてmakeinfoできないんだけど、
俺だけ?パッチ作ったんだけど、作者に送った方が良い?
754名無しさん@お腹いっぱい。:2006/02/07(火) 08:26:36
>>745
これを見ていろいろ調べていて、
「[ANNOUNCE] Emacs modules for Perl programming」
http://www.uni-giessen.de/faq/archiv/perl-faq.emacs-lisp-modules/msg00000.html
というドキュメントを見つけて(おのれ、今までこれの存在を知らなかった)

「Emacs Tiny Tools Project hoimepage」
http://tiny-tools.sourceforge.net/
というものの存在を知ってガクゼンとしました。

通常、いろいろな人が作っているのをかき集めて組み合わせて実現して
いる機能をそっくり提供する、別系統のツールのセットですよね。
このTiny Toolsを使っている人っています?
755名無しさん@お腹いっぱい。:2006/02/07(火) 16:15:09
使ってはいないけど、たまに参考にしたり。
コード、ドキュメント共に。
756名無しさん@お腹いっぱい。:2006/02/09(木) 12:31:30
(standard-display-ascii ?@ [?#])
を評価すると,(当然ですが) モード関係なしで全ての @ が # で表示されてしまいます.
ここで,上の動作をある特定のモードのみでやるにはどうすればよいのでしょうか?
757名無しさん@お腹いっぱい。:2006/02/09(木) 17:43:03
(make-local-variable 'display-table)
758名無しさん@お腹いっぱい。:2006/02/10(金) 00:07:01
>>757 (make-local-variable 'buffer-display-table) だろが
759名無しさん@お腹いっぱい。:2006/03/02(木) 18:50:16
mcomplete を使っている諸君!
例えば、例えばだ…

M-x describe-function を実行し、
mcomplete の [Substring match] に向かって
process-coding-system
と入力するとエラーが出るよな?
ELisp 勉強中の俺が、
恥を覚悟でパッチを作ってみたんだ。
あってるかな?

--- mcomplete.el
+++ mcomplete.el
@@ -1281,8 +1281,10 @@
(tails-alist (mapcar #'(lambda (item)
(string-match regexp item)
(list (substring item (match-end 0))))
- completions)))
- (concat str (try-completion "" tails-alist)))))))
+ completions))
+ (comp (try-completion "" tails-alist))
+ (tailstr (if (eq comp t) "" comp)))
+ (concat str tailstr))))))
760名無しさん@お腹いっぱい。:2006/03/02(木) 21:02:30
うー、そのパッチはとてもただしいのだが、
ここにはってしまったためにさいようできません。。。
761名無しさん@お腹いっぱい。:2006/03/02(木) 21:47:55
(ノ∀`)アチャ-
762名無しさん@お腹いっぱい。:2006/03/02(木) 22:49:07
マルチライセンスで別のところにも貼ればいいんでは。
763759:2006/03/02(木) 23:14:08
GPL に違反してしまうのか?
パッチという形式をとっているからいけないのか?
無知は罪だ。勉強してから出直します。ごめん。
764名無しさん@お腹いっぱい。:2006/03/03(金) 02:53:55
navi2ch スレでもそういう認識になってるけど、
例えば匿名で運営してる自分のウェブページに掲載したらどうなるの?
初出の出所が不明だから不許可になる?
そもそも著作権侵害は親告罪だし、
メーリングリストでのパッチだって完全な出所証明は非常に難しいし、
出所が証明できたからってどっかからぱくってないことは証明できないし、
採用者の了見しだいでなんとでもなりそうな気がするよ。
765名無しさん@お腹いっぱい。:2006/03/03(金) 04:18:16
>>764
出所不明とかそういう問題じゃないよ。

2ch だと、投稿時にいくつかの項目に対して同意を求められるでしょ。
この中に、運営が指定する第三者に対して、一切の権利を許諾しないって項目がある。
これは GPL に矛盾するから、これに同意して 2ch に投稿されたものは、 GPL ソフトウェアにマージできないの。

自分のウェブページとかの場合なら、 GPL に矛盾する規定をしてなければ問題ない。
だから navi2ch スレとかだと、そういう規定がない Wiki とかを利用してる。
766名無しさん@お腹いっぱい。:2006/03/03(金) 04:35:24
便乗質問させてください。
すれ違いかと思いつつ、前から聞いてみたかったので書きます。

gzip & base64 とかでencodeして張った場合、どうなるんでしょう。
767名無しさん@お腹いっぱい。:2006/03/03(金) 07:18:24
GPL と 2ch の規約は矛盾するだろうけど、
じゃあ、そもそもが GPL のコードを 2ch に張るとどうなるのかと考えると、
それは GPL 違反ではあるが、
張ったがために 2ch がコードの利用の権限を持つようになるわけじゃないよね。

ということは、本人が GPL として作ったコードを 2ch に張った場合、
張った行為は GPL あるいは 2ch 利用規約違反だけど、
張っただけで 2ch のものになって GPL として使えなくなるわけではないんでは?
768名無しさん@お腹いっぱい。:2006/03/03(金) 09:22:24
2ch にあるパッチを当てた物を GPL として配布してもかまわないと思う人は
自分で配布すればいいじゃないか。
片手間で開発してるような場合、GPL 違反だと言ってる連中がいるってだけで
面倒そうだから取り込むのはやめようって気になるんじゃないかな。
769名無しさん@お腹いっぱい。:2006/03/03(金) 09:46:09
>>766
貼る形式の問題ではない。
770名無しさん@お腹いっぱい。:2006/03/03(金) 10:39:04
思うんなら自分でやればっていわれても、話にならないな。
まあスレ違いだしやめよう。
771名無しさん@お腹いっぱい。:2006/03/03(金) 12:04:01
誰かが別の場所でGPLで公開してるパッチを第三者が勝手に
2chに貼った場合とか
772名無しさん@お腹いっぱい。:2006/03/03(金) 12:08:04
>>771
それのどこが問題?
773名無しさん@お腹いっぱい。:2006/03/03(金) 12:18:33
そのパッチを本人がプロジェクトに寄付する気になったとき
とりこめるかどうか
774名無しさん@お腹いっぱい。:2006/03/03(金) 12:46:56
第三者が何かしたからといって、パッチ作製者の権利が失われるわけないじゃん。
そうでないなら、ML とかに流れてるパッチを 2ch に転載しまくるだけで
そのプロジェクトの開発を妨害できちゃうよ。
775名無しさん@お腹いっぱい。:2006/03/03(金) 13:08:30
匿名サイトに置いてあるパッチを2chに貼った場合、
本人によるものか別の人によるものかも分かんねーしな
776名無しさん@お腹いっぱい。:2006/03/03(金) 13:48:32
強いて言えばパッチの作者に
「ヘンなシバリのある掲示板に勝手に貼るなよ」
って文句言われる可能性はあるな。
777名無しさん@お腹いっぱい。:2006/03/03(金) 14:20:49
文句言われる言われないはどっちでもいい。
問題はそのパッチをマージする事が可能かどうかだ。
778名無しさん@お腹いっぱい。:2006/03/03(金) 14:23:41
マージするかどうかは
開発元とパッチ作者との間の問題。
2ch に貼るのは
2ch 管理人と投稿者とパッチ作者の間の問題。
両者に関係はない。
779名無しさん@お腹いっぱい。:2006/03/04(土) 00:28:59
続きはこちらで

ライセンスあれこれ
http://pc8.2ch.net/test/read.cgi/unix/1032702590/
780名無しさん@お腹いっぱい。:2006/03/09(木) 19:58:10
ある変数に EUC-JP や Shift_JIS などの文字コードの文字列が入っている状態で、
その文字コードを UTF-8 に変換したい場合は、どうしたら良いのでしょうか?
781名無しさん@お腹いっぱい。:2006/03/09(木) 20:08:35
ccl
782名無しさん@お腹いっぱい。:2006/03/10(金) 22:12:33
>>781
ありがとう。
でも、全然使い方が分からないわ orz
783名無しさん@お腹いっぱい。:2006/03/21(火) 09:49:25
こんなの見つけたお
ttp://www.okisoft.co.jp/esc/lecture/emacslisp.pdf

知識ゼロからのとっかかりにはいいんではないかと思う
784名無しさん@お腹いっぱい。:2006/03/21(火) 13:12:22
ほかにも「やさしい Lisp の作り方」とかあるね
ttp://www.okisoft.co.jp/esc/whitepaper.html
あと、これは一部で有名だけど「美人プログラミングスタイル」とか
785名無しさん@お腹いっぱい。:2006/03/28(火) 10:55:02

以下の機能をmajar-modeに実装する方法でつまづいています。

「一行につき全角文字20文字まで、それを越えたら自動的に折り返して次の行へ」

行幅を全角20文字で整形したいだけなのですが・・・

truncate**系 とか fill-** 系とかの変数をうまく使えばいいのだろうかと試行錯誤しているのですが、錯誤ばかりで自滅気味です。わたしアタマワルイ。

だれか助けてー。
786名無しさん@お腹いっぱい。:2006/03/28(火) 13:19:47
>>785
先に決め事が必要になる。

(1) 半角文字の扱い
(2) 空白文字の処理
(3) 禁則処理(行頭、行末)

まともにやると、かなりめんどい。
787名無しさん@お腹いっぱい。:2006/03/28(火) 13:39:20
>>785
単に
(set-fill-column 40)
(auto-fill-mode t)
って話?

>>786 みたいな問題もあるし
仕様を見直した方がいい気がする。
788ゼウス:2006/04/03(月) 13:19:19

おい、お前等

789名無しさん@お腹いっぱい。:2006/04/12(水) 01:27:25
CやC++ファイルの編集での普通(gnuのモード)のインデントで、
字下げが少ない時はスペースでインデントしてくれるんですが、
tab幅以上の字下げの時にtabでインデントしてしまい困ってます。

これをスペースでインデントするようにするにはどうしたら良いでしょうか。
790名無しさん@お腹いっぱい。:2006/04/12(水) 02:11:47
(set-variable 'indent-tabs-mode nil)
(setq-default indent-tabs-mode nil)

…10年以上使ってるけどこれでいいかな
791名無しさん@お腹いっぱい。:2006/04/12(水) 08:06:40
eshell 上で mysql の返答 (standard output) がしっかり
表示されるようにするにはどうソースを修正したらいいか教えろ
お前等ならわかるだろ
792名無しさん@お腹いっぱい。:2006/04/14(金) 04:06:36
やっぱわかんねーのか。。。
eshell のソースはかなり複雑だから仕方ねーのかもな
793名無しさん@お腹いっぱい。:2006/04/14(金) 08:33:53
わかるだろうけどおまえのためにわざわざ調べる気にはならんってだけ。
794名無しさん@お腹いっぱい。:2006/04/14(金) 08:48:40
>>793
お前自分の言ってる事矛盾してる
知ってんだったら調べる必要ないだろが
795名無しさん@お腹いっぱい。:2006/04/14(金) 09:05:09
調べればわかるんだろ
796名無しさん@お腹いっぱい。:2006/05/11(木) 11:34:11
各種*.confみたいな
項目: 要素
的設定ファイルを読み込んでalistに溜め込んで行くようなのを考えてるんですが
なかなかすっきりしません。
一項目一要素でとりあえずいいんですが、
やっぱりなにかしらのバッファで開いてbuffer-substringしていくしかないんでしょうか。
797名無しさん@お腹いっぱい。:2006/05/11(木) 23:30:31
しかないっつーかEmacsのファイル入力はバッファで開くのが普通なんだが。
798名無しさん@お腹いっぱい。:2006/05/11(木) 23:33:22
バッファで開かないでファイルをlispでストリームとして扱う方法ってあるの?
数百メガの巨大ファイルをいじるとき便利っぽいけど。
799名無しさん@お腹いっぱい。:2006/05/12(金) 04:55:14
tmpなバッファにinsert-file-contents。
find-file-noselectするよりは処理が軽いそうな
800名無しさん@お腹いっぱい。:2006/05/12(金) 05:10:22
>>798
Common Lisp な xyzzy ならできるが、Emacs は不可能。
801名無しさん@お腹いっぱい。:2006/05/12(金) 08:14:54
xyzzy は Common Lisp じゃない。cl ですら実装されてるのに
(mapcar (lambda (x) (typecase x
(integer "整数")
(string "文字列")
(t "その他")))
'(10 3.3 "ほげ"))
こんなのが動かないし。
802名無しさん@お腹いっぱい。:2006/05/13(土) 20:51:42
>>801
それだけ?他にもあるでしょ。おせーて。
803名無しさん@お腹いっぱい。:2006/05/14(日) 11:40:22
-batch
で別個に動かすのはどうでしょう?
804名無しさん@お腹いっぱい。:2006/05/14(日) 14:05:01
>>798
insert-file-contents系で分けて読むとか、catあたりをstart-processしてfilterで読むとか。

テキストの場合マルチバイト文字の切れ目の処理が必要になるとちょっといやらしいかも
805名無しさん@お腹いっぱい。:2006/06/24(土) 12:07:52
>>801
適当だけど。

(defmacro?typecase?(check?&rest?type-list)
??(let?((#1=#:case))
???????(dolist?(item?(reverse?type-list)?#1#)
?????????(push?(if?(eq?(car?item)?t)
???????????????????`(t?,(cadr?item))
?????????????????`((subtypep?(type-of?,check)
?????????????????????????????',(car?item))
?????????????????????????????,(cadr?item)))
???????????????#1#))
????(cons?'cond?#1#)))
806805:2006/06/24(土) 12:12:09
あらら。。もう一回。

(defmacro typecase (check &rest type-list)
(let ((#1=#:case))
(dolist (item (reverse type-list) #1#)
(push (if (eq (car item) t)
`(t ,(cadr item))
`((subtypep (type-of ,check)
',(car item))
,(cadr item)))
#1#))
(cons 'cond #1#)))
807名無しさん@お腹いっぱい。:2006/08/30(水) 05:12:50
未編集のリードオンリーのバッファ上で、何かあるタイミングで、
recenter すると変更フラグが立つことがある。
という現象に遭遇した人いないですか、とか聞いてみようと思った。
が、recenter の前に、(sit-for 0) を入れたら解決したみたい。
808名無しさん@お腹いっぱい。:2006/10/15(日) 22:07:25
Emacs21とか22とかになると、デフォルトでいろんな機能が
組込まれてしまったので (occurとかgrepとか、検索もパワーアップしたり)、
新しい機能を作る機会が減って、最近このスレッドが寂しいのかなぁ、
などと思ったりした。

まとめサイトや紹介サイトも増えたしね。
ネタが出てくることを願って期待sage。
809名無しさん@お腹いっぱい。:2006/10/21(土) 21:51:36
ちまちまと一年以上かけて作ってきたが、とうとうやる気が無くなったので晒すテスト。
使い方はソース読んでくれ。

ttp://grinocat.googlepages.com/yawn.el
810名無しさん@お腹いっぱい。:2006/10/21(土) 23:01:47
ネ(・∀・)申!
811名無しさん@お腹いっぱい。:2006/10/22(日) 04:18:27
>>809
すげぇ。すげぇよ、あんた。
812名無しさん@お腹いっぱい。:2006/10/27(金) 01:00:59
w3みたいなもの?
動かせない(´;ω;`)
813<sage>:2006/11/06(月) 19:07:50
この板の趣旨とは、ちょっと内容がずれてますが、教えて下さい。

shell-command-to-string 関数を使って、perl を呼び出そうとしていますが、
日本語引数を渡すとどこの段階でか分かりませんが、文字がばけます。

(shell-command-to-string "c:/Perl/bin/perl.exe e:/work/0my/scripts/test.pl てすと表示")

で、「test.pl」 では、

my $outfile = "e:/work/0my/scripts/test.txt";
my $out;

open ($out, "> $outfile") || die ("couldn't open $outfile to write into.");
print ($out $ARGV [0]);
close($out);

で、"test.txt" を shift_jis とかで開いても化けています。

DOS 上で日本語引数は、問題なく処理されるので、Elisp から、
perl に渡されるときに壊れると解釈していますが、どうすればいいのでしょう?
814名無しさん@お腹いっぱい。:2006/11/06(月) 21:51:47
>>813
> perl に渡されるときに壊れると解釈していますが、どうすればいいのでしょう?
表の後に\を付ける、とか?
815sage:2006/11/07(火) 00:20:27
>>814
レスサンクス。

表のあとに\マークってことは、「てすと表\示」って感じにですか? 
日本語文字は何を入れてもだめなので、それでもだめだと思います。

気になるのは、エンコーディングがどうやって認識されるかです。
elisp -> shell -> perl と引数として指定された文字列が渡されると思いますが、
このプログラム間のエンコードは、どうやって指定するのかが、よく分かりません。

おそらく日本語 OS 下では、デフォルトが shift_jis になると思いますが、
これは、elisp からシェルの間も同じかな?
816名無しさん@お腹いっぱい。:2006/11/07(火) 00:31:14
process-coding-system とか coding-system-for-write とか?
817名無しさん@お腹いっぱい。:2006/11/07(火) 00:45:40
>>816 さんありがとう
(setq coding-system-for-write 'sjis)
でうまくいきました。m(_ _)m
818名無しさん@お腹いっぱい。:2006/11/07(火) 00:48:11
819名無しさん@お腹いっぱい。:2006/11/07(火) 01:04:52
>>818
この変数に対して値をグローバルに設定すべきではないということですね。
了解、let を使います。
820名無しさん@お腹いっぱい。:2006/12/13(水) 14:58:06
emacs上でschemeの勉強しているんですが、
emacsのコメント行のインデントのしかたが気に入らないので
直したいと思っているのですが、
どこから始めたらいいのか、
さっぱり分かりません。

とりあえず
scheme-modeが定義されている場所の調べ方を教えていただけませんか?
821名無しさん@お腹いっぱい。:2006/12/13(水) 15:38:18
>>820
> scheme-modeが定義されている場所の調べ方を教えていただけませんか?
find-function

> emacsのコメント行のインデントのしかたが気に入らないので
確かに comment-dwin は腐ってるからな
822名無しさん@お腹いっぱい。:2006/12/14(木) 22:57:50
>>820
つ Gauche
823名無しさん@お腹いっぱい。:2007/01/14(日) 02:16:27
初歩的な質問で聞き難いのですが教えて下さい。
バッファ中の文章の特定の文字を置き換えるようなコードを
作りたいのですが、condを使うのかifとprognを使うのかよく分かりません。
たとえば、文章中の”Red Hat”なら”赤帽”、”Vine”なら”葡萄”、”Windows”なら
”窓”というようにバッファ中の文章を変えたいです。
824名無しさん@お腹いっぱい。:2007/01/14(日) 02:19:30
>>823
replace-stringじゃだめなん?
825名無しさん@お腹いっぱい。:2007/01/14(日) 02:26:41
複数の文字列を一括して置換とかかな
826名無しさん@お腹いっぱい。:2007/01/14(日) 02:33:07
>>824
検索関数(search-forward)などでマッチした文字列を
replace-matchなどで変えようと思ったのですが、条件分岐が
よくわからなくて・・・

>>825
たぶん、そんな感じです。
827名無しさん@お腹いっぱい。:2007/01/14(日) 02:36:59
まずは仕様をきっちり決めれ。
「たぶん、そんな感じ」じゃなんだかわからん。
828名無しさん@お腹いっぱい。:2007/01/14(日) 02:42:02
基本事項なんだぜ?
(info "(elisp)Conditionals")
(info "(elisp)Combining Conditions")
829名無しさん@お腹いっぱい。:2007/01/14(日) 02:49:31
ありがとうございます。もう少し読んでみます。
830823:2007/01/14(日) 03:25:03
レス下さった方々、どうもありがとうございました。
非常に無駄な処理をしていますが、望む結果が得られました。

(defun change-font ()
(interactive)
(let ((p (point)))
(goto-char (point-min))
(while (not (eobp))
(if (search-forward "Led Hat" nil t) (replace-match "赤帽")
(forward-line 1)))
(goto-char (point-min))
(while (not (eobp))
(if (search-forward "Vine" nil t) (replace-match "葡萄")
(forward-line 1)))
(goto-char (point-min))
(while (not (eobp))
(if (search-forward "Windows" nil t) (replace-match "窓")
(forward-line 1)))
(goto-char p)))

過去ログ読んで勉強してきます。
831名無しさん@お腹いっぱい。:2007/01/14(日) 05:53:52
一行に2回出てきたらだめじゃね?
832名無しさん@お腹いっぱい。:2007/01/14(日) 11:47:06
検索語を \\| で分けて match-string で抜き出し cond で振り分けろ
833823:2007/01/14(日) 13:38:34
>>831
いえ、ちゃんと置き換えてくれました。

>>832
ご教授ありがとうございます。しばらくにらめっこします。
834名無しさん@お腹いっぱい。:2007/01/14(日) 14:59:07
教授じゃなくて教示
835名無しさん@お腹いっぱい。:2007/01/15(月) 00:23:16
> >>833
> > 一行に2回出てきたらだめじゃね?
>>831
> いえ、ちゃんと置き換えてくれました。

ホントに?
試していないけど VineVine とかいう行があったらダメっぽく見える。

836名無しさん@お腹いっぱい。:2007/01/15(月) 01:09:45
`XWindows' も `X窓' になりそうだし、`divine' も `di葡萄' になりそう。
(後者は `case-fold-search' の値によるけど)
837823:2007/01/15(月) 19:50:39
>>835
>>836
ご指摘ありがとうございます。例外処理(?)を考えていませんでした。
まだ>>832さんの方法で出来ていないしどんだけバカなんだろ私・・・
838名無しさん@お腹いっぱい。:2007/01/16(火) 06:46:15
自分で頑張れてるのだから、頭が悪いとは思わないけどな。
やりつけないことは何でも最初は大変だ。
>>832, >>836とも正規表現が必要だし。

まず>>830の改善点としては(forward-line 1)、これは置換が終わったら次へ進む
ってことで入れたのだろうけど、次の行じゃなくて置換したテキストの直後に
移動すれば十分な筈。ところがreplace-match自身が

Leave point at the end of the replacement text.

という動作をしてくれる。

>>836は、正規表現を使うと「単語の先頭」という位置にだけ合うパターンが
使えるのでそれを使う。必要なら同様に「単語の末尾」というのも使える。
正規表現による検索はre-search-forward.

ここまでで一応、要求は満たされるんじゃないのかな。


>>832は正規表現を使うと「AまたはBまたはC」にマッチするパターンというのが
書ける。それで検索して、その後でそれがAだったかBだったかCだったかを調べ、
対応する文字列(A'なりB'なりC'なり)に置換するという方法。
これだとバッファの先頭から検索を始めるのが一回で済む。
839名無しさん@お腹いっぱい。:2007/01/16(火) 08:06:14
save-excursion も教えたれよ。
840名無しさん@お腹いっぱい。:2007/01/16(火) 10:05:53
replace-regexp を使う。
841名無しさん@お腹いっぱい。:2007/01/16(火) 11:37:35
>>840
This function is usually the wrong thing to use in a Lisp program.
842名無しさん@お腹いっぱい。:2007/01/16(火) 12:59:54
(defun foo (alist)
  (let ((regexp (regexp-opt (mapcar #'car alist) 'words))
        (table (make-hash-table :test 'equal))
        (normalize (if case-fold-search #'downcase #'identity)))
    (dolist (pair alist)
      (puthash (funcall normalize (car pair)) (cdr pair) table))
    (save-excursion
      (while (re-search-forward regexp nil t)
        (let ((new (gethash (funcall normalize (match-string 0)) table)))
          (replace-match new))))))
843名無しさん@お腹いっぱい。:2007/01/16(火) 15:22:17
ほとんどの漢字も普通にword syntaxだから全然だめだな
844名無しさん@お腹いっぱい。:2007/01/16(火) 16:47:50
俺、elispでハッシュとか使ったことねーや
845名無しさん@お腹いっぱい。:2007/01/17(水) 00:50:09
オレも make-hash-table ってのははじめてみたけど、
elispのハッシュってのはcdr要素数1のalistと解釈して、だいたいおk?
846名無しさん@お腹いっぱい。:2007/01/17(水) 01:15:55
論理的にはOKだけど、計算量がぜんぜん違うよ?
何かアルゴリズムの入門書を読んだほうがよさげ
847名無しさん@お腹いっぱい。:2007/01/17(水) 02:15:15
最近知ったんだけど、バイトコンパイルした結果って
直接実行もできるんだね。

(defun fn(x)
(* x 2))
(byte-compile 'fn)
#[(x) "\211\\\301\\\207" [x 0] 2]

(#[(x) "\211\\\301\\\207" [x 0] 2] 10)
20
848名無しさん@お腹いっぱい。:2007/01/17(水) 05:48:58
ワロタ
つくづくエディタなんだな
849名無しさん@お腹いっぱい。:2007/01/17(水) 06:23:03
つまらん
850名無しさん@お腹いっぱい。:2007/01/17(水) 14:28:00
お前等の中にシリコンバレーで働いてる人いる?
851名無しさん@お腹いっぱい。:2007/01/17(水) 23:10:28
emacsで文字のフォントの大きさを変えるにはどうしたらよいですか?
852名無しさん@お腹いっぱい。:2007/01/17(水) 23:41:26
もしemacs lispがstatic scopeだったら果たしてどうだったろうか
853名無しさん@お腹いっぱい。:2007/01/21(日) 00:40:22
>>851
fontset
854名無しさん@お腹いっぱい。:2007/03/28(水) 18:57:13
(゚Д゚≡゚д゚)
855名無しさん@お腹いっぱい。:2007/03/29(木) 01:39:37
>>854
うちの .Xdefault には, 未だに
> Emacs.Font: fontset-12 bold
> Emacs.Fontset-0: -shinonome-gothic-bold-r-*-*-12-*-*-*-*-*-fontset-12 bold
> Emacs.Fontset-2: -shinonome-gothic-bold-r-*-*-14-*-*-*-*-*-fontset-14 bold
...
> Emacs.Fontset-11: -shinonome-gothic-medium-r-*-*-24-*-*-*-*-*-fontset-24 medium
てなものが残ってて機能しているが...
856名無しさん@お腹いっぱい。:2007/04/12(木) 10:48:03
emacs ilspでwebプログラミング可能?
857名無しさん@お腹いっぱい。:2007/04/12(木) 11:29:20
>>856
「webプログラミング」っていうとどの辺の話?
858名無しさん@お腹いっぱい。:2007/04/12(木) 11:45:50
ttp://www1.odn.ne.jp/ymtz/tips.html#wwwsvr

こういうことだったりして
859名無しさん@お腹いっぱい。:2007/04/12(木) 11:57:35
AllegroServe とかそういう話かなぁ。
elisp じゃないけど。
860名無しさん@お腹いっぱい。:2007/04/12(木) 13:32:42
elservなんてのがあったなー。
もっとまともなのも多分あるだろうけど興味無いので知らない。
861名無しさん@お腹いっぱい。:2007/04/12(木) 15:16:27
emacsがwebサーバーになるのですね。もはやなんでもありですね。
elispはphpで作成するのと同様のwebプログラミングは可能でしょうか?
掲示板とか、アンケートなど。

862名無しさん@お腹いっぱい。:2007/04/12(木) 15:18:15
>>861
アクセスのたびに Emacs 呼ぶってこと?
まぁ不可能じゃないんじゃね。
やる気は起きないけど。

>>859 じゃだめなん?
863名無しさん@お腹いっぱい。:2007/04/13(金) 04:31:21
単純にphpスクリプトを書けるか?と聞けば
遊ばれずに済んだであろう>>861
864名無しさん@お腹いっぱい。:2007/04/13(金) 09:45:15
そういう質問じゃないっしょ。
865名無しさん@お腹いっぱい。:2007/04/13(金) 15:06:43
>>861
もちろん同様のことは可能。もちろん同様にはできないけどな。
866名無しさん@お腹いっぱい。:2007/05/13(日) 16:17:55
定期的に M-x hoge を実行するにはどうしたら良いのですか?
答えが駄目なら、誰かヒントだけでも教えてくれないでしょうか。
867名無しさん@お腹いっぱい。:2007/05/13(日) 17:55:49
timer
868名無しさん@お腹いっぱい。:2007/05/15(火) 01:21:02
23
という数値を16進数数値として扱い、
"35"にする方法はどんなのがあるでしょうか?

(let ((n 23))
(format "%d" (string-to-number (number-to-string n) 16)))

これは思いつきましたが、もちょっと簡単にならんかな、と。
869名無しさん@お腹いっぱい。:2007/05/15(火) 06:39:30
じゅうぶんかんたんだとおもう
870名無しさん@お腹いっぱい。:2007/05/15(火) 10:48:34
>>868
#x23
871名無しさん@お腹いっぱい。:2007/05/15(火) 11:08:26
>>868
なんで元が数値なんだろ。
3a とかの入力は考えなくていいの?
872名無しさん@お腹いっぱい。:2007/05/15(火) 20:18:46
>>870
(read (concat "#x" n))
か。なんかびみょーに感じる。この表記がいけるのってemacs21以降あたり?
873名無しさん@お腹いっぱい。:2007/05/16(水) 00:01:09
数値を concat できたのか…
874名無しさん@お腹いっぱい。:2007/05/16(水) 00:22:21
ごめん。emacs21からはムリなはず。
875866:2007/05/20(日) 00:46:22
駄目だ分からない。
run-at-time 使おうにも hoge をどう指定したら良いのか不明……lisp は難しい orz
例えば、.emacs にどう書けば、自動で M-x hoge できますか? ; emacs の引数から起動するのではなくて。
あとは、start-process と while と sleep-for 辺りを組み合わせれば可能な気はするんだけど……さっぱり orz
週末に数時間しか PC に触れられないのは、現代社会をは思えない環境 orz
876名無しさん@お腹いっぱい。:2007/05/20(日) 00:52:00
run-with-timer 使うんじゃないの?
何がわからないのかがよくわからない
877名無しさん@お腹いっぱい。:2007/05/20(日) 00:53:00
もしかして M-x から指定してるものが関数名だってことを知らないとか?
878名無しさん@お腹いっぱい。:2007/05/20(日) 03:58:00
(setq hoge-timer (run-with-timer 0 1 'hoge))
(defun hoge ()
(interactive)
(message (current-time-string)))
(defun hoge-cancel ()
(interactive)
(cancel-timer hoge-timer))

M-x hoge
=>Sun May 20 03:56:18 2007
879lispp?:2007/05/20(日) 14:40:44
LISPを学習して1週間目の者ですが、

(progn
(setq wara 10)
(setq waru 0)
(/ wara waru)
)
でエラーが発生します。

(if (equal waru 0)...)でなくて、catch??? throw???のような例外処理で対応したいのですが、
可能でしょうか?

880名無しさん@お腹いっぱい。:2007/05/20(日) 14:50:53
881名無しさん@お腹いっぱい。:2007/05/20(日) 17:00:06
>>879
condition-case

elisp.infoのControl Structuresを参照。
Lispではcatch/throwの例外処理とsignal/condition-caseのエラー処理は別物
である点に留意されたし。
882名無しさん@お腹いっぱい。:2007/05/20(日) 17:12:06
xyzzy使っているのですが、 condition-caseで関数がないと表示されます。
883名無しさん@お腹いっぱい。:2007/05/20(日) 17:17:31
板違い
884名無しさん@お腹いっぱい。:2007/05/28(月) 20:48:43
EmacsでのLispのプログラムについての質問です。
リストAとして((a b c) (d e f) (g h i))というリストがあるとして、このリストの中の要素であるリストの
最後の要素を返す関数を作る場合どうしたらいいでしょうか?
885名無しさん@お腹いっぱい。:2007/05/28(月) 21:33:40
>>884
各要素の cdr を見ていって、それが nil なものを返せばいいんじゃないの。
そういう話でない?
886名無しさん@お腹いっぱい。:2007/05/28(月) 21:37:09
>>884
(car (last (car (last '((a b c) (d e f) (g h i))))))
887名無しさん@お腹いっぱい。:2007/05/28(月) 21:47:12
884の補足ですが、
リストAを引数として(c f i)を返すような関数を定義したいのです。
また、リストAの要素がもっと多い場合にも対応できるようにしたいのです。
888名無しさん@お腹いっぱい。:2007/05/28(月) 21:52:54
>>887
(mapcar (lambda (x) (car (last x))) A)
889名無しさん@お腹いっぱい。:2007/05/28(月) 22:00:23
>>888
見たことないコマンドが多いのですが・・・。
初心者なのでもう少し分かりやすくしていただけるとありがたいのですが。
890名無しさん@お腹いっぱい。:2007/05/28(月) 22:16:26
標準の関数くらい自分でしらべろよ。
891名無しさん@お腹いっぱい。:2007/05/28(月) 22:17:51
そういった関数を使わないで定義したいんです。
892名無しさん@お腹いっぱい。:2007/05/28(月) 23:42:03
lambda とか mapcar 使わないで lisp のプログラム書くのは
逆に難しいと思うぞ。
893名無しさん@お腹いっぱい。:2007/05/29(火) 00:06:38
それは無理な話だ
894名無しさん@お腹いっぱい。:2007/05/29(火) 00:08:04
ごめん
>>893>>891へね
895名無しさん@お腹いっぱい。:2007/05/29(火) 00:11:56
おk。mapcar も lambda も car も廃止してやったぞ。last は使わせてくれて…

(require 'cl)
(defun fun-887 (lst)
(loop for element in lst
collect (first (last element))))

last も禁止ならこうだ。

(require 'cl)
(defun fun-887 (lst)
(loop for element in lst
collect (first (reverse element))))
896名無しさん@お腹いっぱい。:2007/05/29(火) 00:16:23
>>895ありがとうございました
もう一つ聞きたいのは、数nとリストを引数として取り、
リストのn番目の要素を返す関数を定義したいのですが、
この関数を再帰を使って定義するにはどうしたらいいでしょう
897名無しさん@お腹いっぱい。:2007/05/29(火) 00:24:12
(defun list-ref (lis n)
(if (zerop n)
(car lis)
(list-ref (cdr lis) (- n 1))))
898名無しさん@お腹いっぱい。:2007/05/29(火) 00:43:50
899名無しさん@お腹いっぱい。:2007/05/29(火) 00:46:01
最近なんでもかんでも聞く人多くない?
900名無しさん@お腹いっぱい。:2007/05/29(火) 01:19:24
mapcar を独自に定義しようとするとどう書ける?
901名無しさん@お腹いっぱい。:2007/05/29(火) 01:29:48
>>896
再帰使うまでもない。

(defun list-ref (lis n)
(nth (1- n) lis))
902名無しさん@お腹いっぱい。:2007/05/29(火) 01:52:11
(defun my-mapcar (func list)
(let ((rest list) (results ()))
(while (not (null rest))
(setq results (cons (funcall func (car rest)) results))
(setq rest (cdr rest)))
(nreverse results)))

とかかな。
903名無しさん@お腹いっぱい。:2007/05/29(火) 02:01:06
setq とか cons を使いたくないんですとか来た場合に備えておこう。

(require 'cl)
(defun my-mapcar-2 (func lst)
(loop for elem in lst
collect (funcall func elem)))
904名無しさん@お腹いっぱい。:2007/05/29(火) 02:04:56
>>898 つうか、そゆのは大抵自分では考えないだろうし、調べないだろうし、向上心もないだろうし、礼儀も知らないだろうし、
人の忠告も聞かないだろうから。さっさと答を与えればそれ以上しつこく聞いてこない軽い荒らしだと思って対応するが吉。
905名無しさん@お腹いっぱい。:2007/05/29(火) 02:05:17
cl は宗教上の理由でちょっと……。
906名無しさん@お腹いっぱい。:2007/05/29(火) 02:09:23
自分も書いてみた。リストしか考慮してない。
あんまり慣れてないからどっかまずいところあるかも・・・(自分への免罪符

(defun my-mapcar (func list)
  (defun my-mapcar-iter (func list rtn)
    (if (null list)
        rtn
      (my-mapcar-iter func (cdr list)
                      (setq rtn (cons (funcall func (car list)) rtn)))))
  (my-mapcar-iter func list '()))
907名無しさん@お腹いっぱい。:2007/05/29(火) 02:11:39
defunの中でdefunするのはじめて見た。
908名無しさん@お腹いっぱい。:2007/05/29(火) 02:11:55
あー、 reverse すんの忘れたorz
909名無しさん@お腹いっぱい。:2007/05/29(火) 02:18:25
Schemer の方ですか? Emacs Lisp じゃー再帰は実用的じゃないお。
しかも defun は internal define と違ってグローバルだし…。
910名無しさん@お腹いっぱい。:2007/05/29(火) 02:23:05
>>898の質問者はもうダメだろうね。レポートは突破できても試験は無理そうだ……。
授業二三回でればいいだろうになぁ。まったく聞いてなかったんだろうな。授業料無駄だったね。
911名無しさん@お腹いっぱい。:2007/05/29(火) 02:58:34
>>909
最近、ちょっと scheme で遊んでたもので・・・。

> Emacs Lisp じゃー再帰は実用的じゃないお。
調べてみたところ、再帰回数が max-lisp-eval-depth で制限されてる、
末尾再帰が最適化されない、のようなことがあるのですね。

> しかも defun は internal define と違ってグローバルだし…。
M-x help f で関数のリスト見たら、my-mapcar-iter があって驚きました。

よくよく考えてみたら、setq はいらなかった。
なんでつけたんだろう。
まずいところ多すぎorz
912名無しさん@お腹いっぱい。:2007/05/29(火) 07:07:10
>>905
改宗すればおk
913名無しさん@お腹いっぱい。:2007/05/29(火) 10:07:37
cl 使えば flet で関数内関数使えるよ。
914名無しさん@お腹いっぱい。:2007/05/29(火) 12:55:46
flet を使って書き直すなら、こんなかんじでしょうか。
たしかに my-mapcar-iter が隠れた。これ便利かも。

(require 'cl)
(defun my-mapcar (func list)
  (flet ((my-mapcar-iter (func list rtn)
          (if (null list)
              (reverse rtn)
            (my-mapcar-iter func (cdr list)
                            (cons (funcall func (car list)) rtn)))))
    (my-mapcar-iter func list '())))
915名無しさん@お腹いっぱい。:2007/05/29(火) 22:24:57
…再帰するなら labels じゃねーとダメなんじゃね? cl のバグ?
ズバリこうだろ。while 版より短い!! 俺のバイク小屋ハァハァ

(defun my-mapcar (func lst)
(let ((result nil))
(dolist (e lst)
(push (funcall func e) result))
(nreverse result)))
916名無しさん@お腹いっぱい。:2007/05/29(火) 22:27:10
なんとなく nreverse なしのループで書いてみた
(defun my-mapcar (fun list)
  (let* ((result (list nil))
         (x result))
    (while list
      (setcdr x (list (funcall fun (car list))))
      (setq x (cdr x) list (cdr list)))
    (cdr result)))

>>915
flet を macroexpand してみればわかるよ
まあしょうがないんだろうけどちょっと気持ち悪いよね
917名無しさん@お腹いっぱい。:2007/06/02(土) 08:50:13
ずびまぜん。

elispで 16進数文字列を整数に変換する楽な方法ってありません?
(hoge "64") => 100
ってなるような。
(defun hoge (s)
(string-to-number (concat "#x" s)))
とかじゃ 0が返ってきてしまいました。
918名無しさん@お腹いっぱい。:2007/06/02(土) 08:59:28
(defun hage (s)
(string-to-number s 16))

(hage "64")

100 ウマー
919名無しさん@お腹いっぱい。:2007/06/02(土) 09:16:44
おお、そんなところに &optional があったとは...
infoをもっとちゃんと読むべきでした。
どうも有難うございました。
920名無しさん@お腹いっぱい。:2007/06/02(土) 16:36:52
921名無しさん@お腹いっぱい。:2007/06/02(土) 21:22:45
知ってる人も多いだろうけど C-h f めちゃくちゃ便利だよ。
関数定義してるソースの該当部分にも飛べる。
922名無しさん@お腹いっぱい。:2007/06/03(日) 00:27:47
emacs22でも、mode-infoも動いてくれるしね。
923名無しさん@お腹いっぱい。:2007/06/10(日) 19:00:25
あるオブジェクトに対し、car-safeが非nilとなる時
cdrでなくcdr-safeを使うべき局面ってある?
924名無しさん@お腹いっぱい。:2007/06/10(日) 23:36:38
>>923
car-safe が non-nil なら対象は list ってことだから、そんな局面はない、
と思う。
925名無しさん@お腹いっぱい。:2007/06/27(水) 22:28:03
同じ名前の変数 (defvar hoge)と関数 (defun hoge ())が定義されているとき、
変数だけ定義を消すことってできますか?

(unintern 'hoge) だと、両方消えてしまうので。
926名無しさん@お腹いっぱい。:2007/06/27(水) 22:36:59
makunbound
c.f.
fmakunbound
927名無しさん@お腹いっぱい。:2007/06/27(水) 22:45:39
ぬりがとう。

ところでこれ何て読むのですか?
(エフ)メイク・アン・バウンドでいいんかな?

思い出されるcreat()。
928名無しさん@お腹いっぱい。:2007/06/27(水) 23:18:45
>ところでこれ何て読むのですか?
なんでしょうね?

>思い出されるcreat()。
なるw
929名無しさん@お腹いっぱい。:2007/06/29(金) 01:06:36
defconstしてるものには、時に大文字のシンボルを使ってみるのも一興かなと
ふと思った。
たぶんウザいだろうけど。
930名無しさん@お腹いっぱい。:2007/08/07(火) 22:22:42
EmacsがXで動いているときだけ、
C-zでアイコン化しない様にしたいと思っています。
Xで動いているのかterminalで動いているのか判別するには
どうしたらよいのでしょうか。
931名無しさん@お腹いっぱい。:2007/08/07(火) 22:29:27
window-system
932930:2007/08/07(火) 22:33:57
>931
ありがとうございます。
とりあえず、
(if window-system (global-set-key "\C-z" 'shell))
としてみました。
933名無しさん@お腹いっぱい。:2007/08/21(火) 05:23:38
M-x shell
を.emacsファイルの読み込み時に動作させるにはどうしたらよいのでしょうか。
934名無しさん@お腹いっぱい。:2007/08/21(火) 10:02:38
本当に文字通りそうしたいのならば
(shell)
と書く。
935名無しさん@お腹いっぱい。:2007/08/21(火) 12:13:59
>>934
できました。ありがとうございました。
936名無しさん@お腹いっぱい。:2007/08/26(日) 17:18:02
(global-set-key [?\C-;] 'なにか)
とか
(global-set-key "\C;" 'なにか)
とやってもエラーがでて動きません。
;をjにしたら動いたので”なにか”が間違っていることはいないと思います。

C-;やC-, C-. へのバインドを指定するにはどうしたらよいのでしょうか
どなたか教えていただけないでしょうか?
937名無しさん@お腹いっぱい。:2007/08/26(日) 19:00:19
[(control ?;)]

設定程度の質問なら、次回からelispスレじゃなくてemacsスレ行きな。
938名無しさん@お腹いっぱい。:2007/08/26(日) 21:58:08
>>937
ありがとうございます
今後は気をつけます
どうもすいませんでした

そのようにしても動きはしませんでしたが、
それはターミナルからの接続の仕様らしいと分かったので、
別のキーを割りあてることにします
939名無しさん@お腹いっぱい。:2007/08/26(日) 22:06:20
man ascii
で出てくるコントロールコード以外の
コントロールキーの組み合わせ以外は
端末じゃ動かないよ。
940名無しさん@お腹いっぱい。:2007/08/26(日) 22:09:03
まちがえた。以外が一つ多かった。
941名無しさん@お腹いっぱい。:2007/08/28(火) 01:55:47
(func "/usr/bin/emacs" "/")
=> ("usr" "bin" "emacs")

こんな感じで、文字列からトークンを抽出する好い奴を
何方か識りませぬか?
942名無しさん@お腹いっぱい。:2007/08/28(火) 02:03:17
普通に1文字ずつチェックすれば良いじゃない。
943名無しさん@お腹いっぱい。:2007/08/28(火) 03:14:56
split-string
944名無しさん@お腹いっぱい。:2007/08/28(火) 19:47:13
>>943
幸あれ。
やっぱりあるよね。token で探してたよ

>>942
普通?とりあえずこんなん書いてた

(lambda (string delimiter)
(let* ((iter (lambda (str dlm lst)
(if (and (string-match dlm str) (substring str (1+ (string-match dlm str)) nil))
(funcall iter
(and (string-match dlm str) (substring str (1+ (string-match dlm str)) nil))
dlm
(cons (substring str 0 (string-match dlm str)) lst))
(cons (substring str 0 (string-match dlm str)) lst)))))
(funcall iter string delimiter ())))
945名無しさん@お腹いっぱい。:2007/10/27(土) 01:27:05
下記のような独自スクリプトのメジャーモードを作っています。
function:
if hoge == 0 {
hogehoge;
}
elseif hoge ==1 {
if hoge2 == 0 {
hogehoge2;
}else{
hogehoge3;
}
}
end;
階層は上記のif文のみです。
自動インデントをつけたいのですがどうすればいいでしょうか?
946945:2007/10/28(日) 08:47:43
補足です。generic-x.elを使って作っています。
947名無しさん@お腹いっぱい。:2007/10/30(火) 10:08:00
buffer-local-variableなるものがあるそうですが、
.emacs.elなどでsetq-defaultで設定した値は、
新しいバッファを作る度にバッファごとの値のコピーが作られてしまうんでしょうか。

カスタマイズ性から見るとsetq-defaultの方が使い易そうなのですが、
パフォーマンスに悪影響がでないか心配なんです。
948名無しさん@お腹いっぱい。:2007/10/30(火) 20:29:39
make-variable-buffer-local されてるような変数の話だよね。
これは setq とかで書き換えた時点で、その buffer に local な変数が作られるってシステム。
書き換えるまではどの buffer でも初期値を参照してて、 setq-default はこの初期値を書き換える。
それ自体がコピーの原因になったりはしないはず。
949名無しさん@お腹いっぱい。:2007/11/16(金) 08:26:40
call-processとかの外部コマンド呼び出し関数で
コマンドの出力(標準出力)を文字列もしくは文字列リストで
返すようなものってないでしょかね?
いちいちバッファに出すのがとても無駄に感じる時がある
950名無しさん@お腹いっぱい。:2007/11/16(金) 22:17:04
set-process-filter
951名無しさん@お腹いっぱい。:2007/11/29(木) 10:04:56
みなさん、乙です。

コードの中で読み易さを上げるためダブルクオート中の文字列を改行して書きたいのですが、
その改行自体はコード上では無効にしたいのですが、どうすればいいですか?


(message "
listA,
listB,
listC")

これが以下のようにmini-buffer に出力して貰いたいのですが、

listA,listB,listC

そんな方法ありますか?
952名無しさん@お腹いっぱい。:2007/11/29(木) 11:08:37
>>951
(message (concat
"listA,"
"listB,"
"listC"))
953名無しさん@お腹いっぱい。:2007/11/29(木) 12:39:04
>>951
(message "\
listA,\
listB,\
listC")
954名無しさん@お腹いっぱい。:2007/11/30(金) 05:59:54
>>952, 953
サンクス。C と同じことできたのね。試せよオレ。
955最近始めたEMACS LISP:2007/12/24(月) 01:01:38
こんなのがあった。
(defvar zic-new-shell-buffer 0)
(defun zic-create-shell (n)
(interactive "P")
(shell)
(if n (setq zic-new-shell-buffer n))
(while
(get-buffer (concat ""
(int-to-string zic-new-shell-buffer)))
(setq zic-new-shell-buffer (1+ zic-new-shell-buffer)))
(rename-buffer
(concat "" (int-to-string zic-new-shell-buffer))))
(global-set-key "\C-cz" ' zic-create-shell)
上とは関係ないけど、ご教授をよろしくお願いいたします。
以下のデータ(リージョン)を呼んで ("XXX" "YYY" "ZZZ")のように
kill-ringに入れる関数の作り方教えてください。とうか作ってください。
他力本願ですみません。
ほげほげ、HOGEHOGE、ホゲホゲはデータの中に一回しか出てきません。
ほげほげ、HOGEHOGE、ホゲホゲは行の先頭にあるとはあkぎりません。
XXX、YYY、ZZZは、ほげほげ、HOGEHOGE、ホゲホゲの直後にあり、
XXX,YYY,ZZZ文字列長さは不定です(20文字以内)。
"ほげほげ"を探し、”XXX”(次のブランクの手前まで)をkill-ringに格納したいのです。
つまり、複数の特定文字列の後ろにある数文字の切り出しを自動化け
したいわけです。
検索ワードのほげほげ、HOGEHOGE、ホゲホゲは,alistに事前登録でかまいません。
●データ(リージョン)
ほげほげ:XXX @@@@
HOGEHOGE:YYY @@@@
ホゲホゲ:ZZZ @@@@
つづく。。
よろしくお願いいたします。
956名無しさん@お腹いっぱい。:2007/12/24(月) 01:11:46
分かりやすく書こうという努力が見られない
957Zeno ◆5nZQbNmQPs :2007/12/24(月) 10:28:04

>>955
吾はお前のレスをほとんど読んでいないが、リストの内容をキルリングに入れたいのであれば
関数の最後あたりに (kill-new (format "%S" L)) としておけ (Lはリスト)。

958名無しさん@お腹いっぱい。:2007/12/24(月) 18:52:35
>>955
やりたいのはこういうことかな? 入門書やマニュアル読んでるうちに書けるようになると思うよ。
(defvar hogehoge-keys '("ほげほげ" "HOGEHOGE" "ホゲホゲ"))
(defun hogehoge (start end)
(interactive "r")
(let (result)
(save-excursion
(save-restriction
(narrow-to-region start end)
(dolist (x hogehoge-keys)
(goto-char (point-min))
(when (re-search-forward (concat x ":\\(.+?\\) ") nil t)
(push (match-string-no-properties 1) result)))))
(when result (kill-new (format "%S" (nreverse result))))))
959名無しさん@お腹いっぱい。:2007/12/25(火) 07:55:32
firefox があるこの時代の (emacs-)w3m の存在意義を200字以内に書け。
960名無しさん@お腹いっぱい。:2007/12/25(火) 08:16:18
悪い、↑のは誤爆だ。
961名無しさん@お腹いっぱい。:2007/12/25(火) 13:31:26
Visual Studio, Office, Internet Explorer があるこの時代の (emacs-)w3m の存在意義を200字以内に書け。
962名無しさん@お腹いっぱい。:2007/12/26(水) 15:55:05
elinks><;
963名無しさん@お腹いっぱい。:2007/12/31(月) 01:25:06
>>961
slime 使って lisp を coding/debug している時に Common Lisp Hyper Spec を
読むために存在している.
964名無しさん@お腹いっぱい。:2007/12/31(月) 19:03:33
>>961
白痴みてーにマウスをカチャコチョclick!click!とかしねーですむべ?
965名無しさん@お腹いっぱい。:2008/01/01(火) 14:30:07
激しくニッチな用途ワロタ
966名無しさん@お腹いっぱい。:2008/01/02(水) 14:33:53
("abc" "def" "ghi") のどれかが
"de" を含むなら t 含まないなら nil を返す関数を書きたかったのですが
↓まで書いて力尽きました…。

(mapcar (lambda (f)
(if (string-match "de" f) t))
'("abc" "def" "ghi"))

戻り値の論理和をとればうまくいくんじゃないかと思ったんですが
logior は引数としてinteger しかとらないし
真偽値に対して論理和を行う関数は見つけられませんでした…。

どうすればできるのかアドバイスお願いします
967名無しさん@お腹いっぱい。:2008/01/02(水) 15:22:07
(defun hoge (re list)
  (catch :loop
    (dolist (x list)
      (if (string-match re x)
          (throw :loop t)))))
968名無しさん@お腹いっぱい。:2008/01/02(水) 15:32:10
(require 'cl)
(not
(apply 'every
`(null ,(mapcar (lambda (x)
(if (string-match "de" x) t))
'("abc" "def" "ghi")))))
こんなのを書いてみた。complementって無いのね。
969名無しさん@お腹いっぱい。:2008/01/02(水) 15:32:44
catch/throwやclのblock/return
970名無しさん@お腹いっぱい。:2008/01/02(水) 15:37:45
>>968 everyよりはsomeじゃない?
971名無しさん@お腹いっぱい。:2008/01/02(水) 16:39:54
わざわざ cl 使わなくてもできるんじゃね?
>>967
とか,
(dolist (i '("abc" "def" "ghi") nil)
(when (string-match "de" i)
(return t)))
とか...
972名無しさん@お腹いっぱい。:2008/01/02(水) 16:58:36
(not (null (string-match "de" (mapconcat 'identity '("abc" "def" "ghi") "¥0"))))
Lispレベルでループしないし、string-matchも1回しか実行しないから、
データによってはこんな風にした方が速いかもよ。
973名無しさん@お腹いっぱい。:2008/01/02(水) 17:01:14
>>972
目から鱗。 mapconcat なんてものがあったんだ
974名無しさん@お腹いっぱい。:2008/01/02(水) 18:01:14
この発想には脱帽。
975名無しさん@お腹いっぱい。:2008/01/02(水) 19:45:53
>>971 returnはcl
976名無しさん@お腹いっぱい。:2008/01/02(水) 22:31:07
dolist も cl だったりする。
977名無しさん@お腹いっぱい。:2008/01/02(水) 22:52:32
>>976
昔は cl だったけど今は標準ライブラリだよ。
http://www.gnu.org/software/emacs/manual/html_node/elisp/Iteration.html#index-dolist-535
978名無しさん@お腹いっぱい。:2008/01/02(水) 23:20:29
ElispがCL相当になるのはいつの日か・・・lexbindはまだか
979966:2008/01/03(木) 02:49:26
みなさんありがとうございます
色々な書き方があるのですね

ただ、scratch で >>968 さんのコードを実行しても
every がないと言われてしまい cl の読み込みがうまくいかず動かせません…。
load-path に cl.el のあるディレクトリは入ってます

よくわからないので色々と

(load "cl.el")
(load "cl-extra.el")
(require 'cl)
(require 'cl-extra)

こんな感じで追加してみましたがやはり(void-function every)で怒られてしまいます
バージョンは22.1.50.1 (i386-mingw-nt5.1.2600)です

>>972さんのはもちろん問題なく動きますので
これを使わせていただく事にします

cl.el についてはおいおい調べる事にします
ありがとうございました
980972:2008/01/03(木) 16:22:35
sageてなかった…
もう必要ないかもしれないけど、self-evaluatingな要素しかないリスト(nilとtしかない場合を含む)についての論理和なら、(eval (cons 'or LIST))という手もある。
981名無しさん@お腹いっぱい。:2008/01/03(木) 16:24:41
>>980
eval は遅い
982972
>>981
>eval は遅い
一般にはね。でもこのくらい単純な例になるとそうとも言えない。
(defun test (x)
(eval (cons 'or x)))
(defun test (x)
(while (and x (not (car x)))
(setq x (cdr x)))
(car x))
両方バイトコンパイルして比較すると、
(dotimes (i 10000000) (test '(nil nil nil nil t nil nil nil nil t)))
はwhile版が速いけど、
(let ((x (make-list 10000 nil))) (dotimes (i 10000) (test x)))
はeval版が速い。