Emacs part6

このエントリーをはてなブックマークに追加
914名無しさん@お腹いっぱい。
C/Migemo を使ってみようと思って、試行錯誤してます。
rxgen.cを
-#define REGEN_OP_NEST_IN "("
-#define REGEN_OP_NEST_OUT ")"
+#define REGEN_OP_NEST_IN ""
+#define REGEN_OP_NEST_OUT ""
して、
cmigemo -q -d /usr/local/share/cmigemo/euc-jp/migemo-dictで、
ruby版migemoと同じ正規表現を返すんだけど、elispサパーリなんで、
migemo.elをどう弄ったらいいのやら。
どうかヒントくださいませ。
以下やったことです。

1. (defvar migemo-options (list "-t" "emacs")を
(defvar migemo-options (list "-q" "-d" "/usr/local/share/cmigemo/euc-jp/migemo-dict")に変更。
2. migemo-init内の(list migemo-dictionary)をコメントアウト。
3. (setq migemo-process (migemo-start-process "migemo" migemo-buffer "migemo" options))を
(setq migemo-process (migemo-start-process "migemo" migemo-buffer "cmigemo" options))に変更。

この状態で、~/.emacsに(load "migemo") (migemo-init)と書いて起動後、
C-sすると、一文字入力したところで止まってしまいます。
ちょうど一日前の日付けと時間を得るような関数を作ろうと思ったのですが、
elisp で↓のような演算は出来るでしょうか?

int32 a b c;
a = (int32) current-time[0]; /* current-timeは16ビット正整数のリストです。*/
b = (int32) current-time[1];
c = (a << 16 + b ) - 86400;

# ビット演算の関数名と 16bit <-> 32bit の型変換のやり方がわかりません。
ビット演算の関数はelispのマニュアルに載ってた
入力の current-time[0] と current-time[1]が
何を表してるのか漏れには良く分からないが

(defun previous-day (current-time)
(let ((a (car current-time))
(b (cadr current-time)))
(- (+ (lsh a 16) ; aを16ビット左にシフト
b)
86400)))

(previous-date '(23 15))
>>916さん
THX
マニュアルきちんと読んどきます。
>>914
> ruby版migemoと同じ正規表現を返すんだけど、
てあるから大丈夫だと思うけど2つだけ.

migemo.c の migemo_query 関数の中の
printf("HERE %s\n", p->ptr);
はコメントアウトしましたよね?

あと, REGEN_OP_NEST_IN, REGEN_OP_NEST_OUT は "\\(", "\\)" じゃなくて
いいのかな….
919918:02/12/29 01:02
REGEN じゃなくて RXGEN だった….
>>915-917
Emacs Lispだと整数が32bit未満の場合も多いですぜ。
(defun previous-day (current-time)
(let ((h (nth 0 current-time))
(l (- (nth 1 current-time) 86400)))
(if (< l 0)
(list (1- h) (+ l 65536))
(list h l))))
こんな感じにしないと桁あふれでマズー。
921914:02/12/29 01:40
>>918

>migemo.c の migemo_query 関数の中の
> printf("HERE %s\n", p->ptr);
>はコメントアウトしましたよね?

c/migemoの最新版(1.1.009です。最初から書いておくべきした。スマヌ)では、
最初からコメントアウトされているようです。

>あと, REGEN_OP_NEST_IN, REGEN_OP_NEST_OUT は "\\(", "\\)" じゃなくて
>いいのかな….

そこはそれでいいんだけど・・・
#define RXGEN_OP_OR "|" は
#define RXGEN_OP_OR "\\|" っすね。

>REGEN じゃなくて RXGEN だった….

漏れのtypo・・・スマヌ(;´Д`)
922914:02/12/29 01:51
自己レス。重ね重ねスレ汚しスマヌ。

>そこはそれでいいんだけど・・・
914のままでいいと思う・・・というつもりでかいたんだけど、
なんか表現変なので訂正します。

#define RXGEN_OP_NEST_IN ""
#define RXGEN_OP_NEST_OUT ""
#define RXGEN_OP_OR "\\|"

あとはmigemo.elから、上手にプロセス呼んでやればいいのかな?
この部分がよくわかりません。
923名無しさん@お腹いっぱい。:02/12/29 01:51
質問。ホスト名の取得ってどうやるの?
ホスト毎に設定変えたいんだけど、ホスト名の取得方法がワカンナイ。
924bloom:02/12/29 02:02
925918:02/12/29 02:04
>>921
> c/migemoの最新版(1.1.009です。最初から書いておくべきした。スマヌ)では、
> 最初からコメントアウトされているようです。
僕のとこは 1.1.005 でした. 新しくなってるんですね.

他に, うちで (1.1.005 を動かそうとしたときに) やった変更は,

main.c の query_loop の中の
if (ans)
printf(quiet ? "%s\n" : "PATTERN: %s\n", ans);
の直後に
fflush(stdout);
を入れる. (ある環境では fflush がなくても OK だったけど,
別の環境では fflush を入れないとダメだった. 原因不明).

.emacs に
(setq migemo-coding-system 'sjis)
する. (うちでは辞書は sjis にしてるから).

ぐらいかな. これでダメならもうわからん, スマン.
>>923
環境変数に入れといて getenv で取る、とか?
927名無しさん@お腹いっぱい。:02/12/29 02:23
>926
それは考えた。
確かにそれでもできるけどもっとスマートな方法がありそうな気がする。
関数で取得できるとか、変数に保存されてるとか無いのかな?
>>923
(system-name)
929名無しさん@お腹いっぱい。:02/12/29 02:25
>>928
おおー、それだ。
教えてくれて有難う御座います。
>>923
(system-name)
931930:02/12/29 02:31
↑リロードせんかったらかぶった欝
932923 じゃないけど:02/12/29 02:37
(message (system-name))
"localhost"

(´・ω・`)ショボーン
933914:02/12/29 03:09
>>925
>fflush(stdout);

ビンゴ!マジ感謝です。完全にmigemo.elに気持ち逝ってたなw
migemo.elは>914でOKな模様。
C/Migemo、Ruby版より若干速く感じます。
Meadowではかなりの速度向上でした。
>>931
ドンマイ、ドンマイ
オレ、GNU Emacs 使ってるけど、leim 入れてない。
みんな入れてる?
>>935
つかってないけど、いれてる
>>935
入れてない。
938918:02/12/29 09:32
> >fflush(stdout);
> ビンゴ!マジ感謝です。完全にmigemo.elに気持ち逝ってたなw
おめでとう.

> C/Migemo、Ruby版より若干速く感じます。
> Meadowではかなりの速度向上でした。
そうか. うちは Ruby 入れてなくて, Meadow で C/Migemo 使ってて,
やっぱり Ruby版にしようかとたまに悩んでたけど, じゃあ C/Migemo の
ままでいいや.
939名無しさん@お腹いっぱい。:02/12/29 11:22
>>938
WinのBinaryあげてけろ。
940名無しさん@お腹いっぱい。:02/12/29 12:06
>>938
おいらも欲すぃずら
941918:02/12/29 15:53
>>939,940

cygwin しか入れてないからうちのバイナリは cygwin1.dll 必須だし,
バイナリをどこに up したらいいかもわからないんで, cygwin 入れてる人は
次の方法を自分で試してくれ. cygwin 入れてない人は, 誰か Visual C++
とか Borland C++ とか入れてる人がコンパイルして up してくれるのを
待ってくれ.

方法:
http://www.kaoriya.net/#CMIGEMO から C/Migemo α版 (1.1.009) の
ソースコードを落として来て展開し, 次のメッセージのパッチ main.c.patch
を当て, make cyg すると cmigemo.exe と cygmigemo.dll が出来上がるから,
それを PATH の通ったとこにコピー. 辞書は上記 URL から DLL を落として
来るとそこに入ってる.

一方 http://migemo.namazu.org/ の migemo 0.32 の migemo.el.in を
(1) (defvar migemo-directory "@pkgdatadir@" を
(defvar migemo-directory "正しい辞書ファイルのありか" に.
(2) (defvar migemo-options (list "-t" "emacs") を
(defvar migemo-options (list "-q" "-t" "emacs") に変更.
(3) (setq migemo-process (migemo-start-process
"migemo" migemo-buffer "migemo" options)) を
(setq migemo-process (migemo-start-process
"migemo" migemo-buffer "cmigemo" options)) に.
と変更.

注意: このパッチは -t emacs オプションをつけていて, NEST_IN 他は
"\\(" とかになったままだから, >914 の変更をしたければパッチを当てた
あと main.c の MIGEMO_OPINDEX_NEST_IN のあたりをいじってくれ.
942918:02/12/29 15:53
>>941 の続き.
----BEGIN BASE64----(main.c.patch.bz2)
QlpoOTFBWSZTWTo8OwEAAShfgHA4e///+qen3s6/5/+uQALcUDQADU1QGmmg0Gho
A0GTNQ0NAaDQDQ0BEnoo/SCAGhoAAADJo00AAABxkyaGIxNGARgJhAGAmmjTI0Aw
kSQmCGp6RkmFPynpTNTzVD1HqeUbUPKBsapvJT8qXhcFKQj9fKEikaL8GkcDg3v7
GG5ybmnxgznnIKHCIa51gmJL6UhgxBYkjkTabbbGmmNtttjTbSRkSTSRiSUiSD23
h19WdKmNxmbPMgRgJrDJKRgiDAnznwiIHyUto4v0U0oHA+IIERPq9JlfsG4h3pbr
NmWYnsge7NsFzY566VN8Qf5AwZmiJUaJSlQVX7r8kt9FtYFoDH9MsaE1wNLvn3iJ
IpePmypce6fiyPpyQvk5pgwkiE2uAqyRQ03mQrXZNAKTQdSJgYcUEmCkkiqR1r/D
Wdx62iNSXHD/Tr6NXiQ/t0IORoV6MgWBUHaETttt6C3UHavDs7Pw4AsFWFou2Z4g
kqHfkwB2UNjaNqoFBjJ2gSwHQAkouIgSxHYQqkCEknRAhCdSeSATYCmuJlTziOab
RMqByc/laC14Uq2eaXRAvmlr5fVLWlr9ixKxT7TbiS1JOY1NBSKUoEVpS6cKUzwW
MKi7ZtC6+kwIONdwWpPtGcisPYVKTgu8F3pZ4dLSheIGPvwHgP82xHn9ZE6p+SXL
g9tj2ynEf8jh9AkdzvS8Limfi9wvF/wlvdeaphV8D6nkEFaWu5WpVwIy4p7P6nte
BiBpBT5GeVwVLBcytpm6jOIOgPcufy5ijIlfeEItU/CBGHElOIJSrgmleIr0lasw
hCMaBZkpsqXos+WgRjPnnShLTwZ7SaJwMRwpYRElRlnBH4zZuWnLxM97bZX5mkVk
kqcfeIpVbdQRF1EJe+epKBEp+n13tcOK/4JBcvjVmd+LRXp0n+hxyCXKz/xdyRTh
QkDo8OwE
----END BASE64----
isearch 中に C-h で前の検索文字を消したくて、
(define-key isearch-mode-map "\C-h" 'isearch-delete-char)
としてみたんだけど、うまく動いてくれません。
isearch-mode-hook の中に書いてみてもダメでした。
誰か助けてー
>>943
minibuffer-local-isearch-map
945914:02/12/29 20:24
>939,940,941

お世話になったお礼に、cygwin版とbcc版のバイナリをupします。
辞書ファイルもつけた方がいいのかな?
Emacs一般から離れてきたので、Meadow板に移動しませんか?
http://pc3.2ch.net/test/read.cgi/software/1038091071/
946918:02/12/29 22:01
>>945
> お世話になったお礼に、cygwin版とbcc版のバイナリをupします。
ありがとう. bcc版を cygwin版と比べてみたい.

> Emacs一般から離れてきたので、Meadow板に移動しませんか?
確かに Win バイナリは板違いですな. 続きは Meadow スレで.
947名無しさん@XEmacs:02/12/30 13:33
xemacs-21.4.10 インストしたんですけど、
日本語だけ異常に小さいんです
face とか色々弄ってみたんですけど、ダメでした(-_-)
何を設定すればいいんでしょうか?
>>947
.Xresources の
XEmacs*fontSet、XEmacs.italic.attributeFont、XEmacs.bold.attributeFont、
XEmacs.bold-italic.attributeFont あたりと、

.xemacs/init.el に
(set-face-font 'default (format "なんとか") 'global '(mule-fonts) 'prepend)
といったあたりかな。set-face-font は default 以外にも bold、italic、bold-italic、
gui-element あたりも設定しとくといいかも。

.Xresources と init.el の両方を設定する必要があると思う。
Emacs 20.7 にもどしたら さくさくサークルでし
>>947
XEmacs つかう香具師は厨房
山岡さんも上野さんも厨房
>>960
ご冗談でしょう、ストールマンさん
>>948
ふつうはどっちか設定するだけでいいと思いますけど。まぁ、どっちかってい
うと Emacs と併用する場合にトラブルになりにくい ~/.xemacs/init.el のほ
うがいいかな。
954947:02/12/31 04:22
>>948
どもでした
default は init だけで設定出来ましたが、bold とかは
.X* と両方設定しないとダメでした←なんで?
ところが今度は emacs-w3m が文字化けします…
wl の shimbun も同じです
xemacs-21.1.14 では問題ありません
*emacs-w3m-1.3.3
*w3m-0.3.2.2
両方最新版です、ってスレ違いスマソ
955名無しさん@Emacs:03/01/01 18:15
PSGMLモードで
せめて M-RETで<p></p>を入れたいんですが
(C-c C-e でpを入力するのは面倒すぎ)
どうすればいいでしょうか?
右端での折り返しをなくそうと思い、
.emacsの最終行に以下の一行を追加しました。

(setq truncate-lines t)

ところが、長い行はやはり折り返して、全文が
表示されてしまいます。
どうやら、.emacs以外の起動スクリプトで、
あらためてnilが設定されているようなのですが、
パーミッションの関係で、それらは触ることが
できません。
一般ユーザの権限内で、上記の動作を実現するにはどの
ように設定すればよろしいでしょうか。
(setq-default truncate-lines t)
(setq default-truncate-lines t)
でどうよ.
958956:03/01/02 00:25
>>957
ありがとうございました。
初心者な質問で恐縮なんですが、行頭に引用符とかの文字を付加するのには
どうしたらいいでしょう。
今は
C-xTABでリージョンを右にずらしてから
M-x replace-regexp で行頭を;;とか>>とかの文字列に変えるというような手順を
踏んでいるのですが、ほかに便利な方法があればお教えください。
960名無しさん@Emacs:03/01/02 07:23
>955

自己解決しました。
XEmacsからpsgml-html.elってのをとってきたら快適です。

961名無しさん@お腹いっぱい。:03/01/02 10:07
>>959
リージョン指定した後 C-x r t
あるいは M-x string-rectangle
もちろんカーソルは行頭に置くこと
962名無しはん@EMACS21:03/01/02 10:45
メールを送る前にpop before smtpを動作させようとして1ヶ月苦労してたのが
動かなかった原因が今、判ったよ。

ad-hookって書いてた。鬱だ。。。。

>>959
Mew とか Wanderlust とか Navi2ch なら C-c C-y で、
とかいう話でなくて?
>>962
ad-hookなんていうシンボルの関数定義はvoidだぜ、(゚Д゚)ゴルァ
って怒られていなかったの?
>>961,963
ありがとうございます。

> もちろんカーソルは行頭に置くこと
なるほどです。
C-x r d などと対でにしてつかえるわけですね。
>>965
たまには C-x r C-h とか C-h b とかじっくり読んでみ。
>>966

ありがとう、そうします。
968名無しはん@EMACS21:03/01/02 20:05
>>964
> ad-hookなんていうシンボルの関数定義はvoidだぜ、(゚Д゚)ゴルァ
> って怒られていなかったの?

そのメッセージを、ad-hookに加えた関数定義がviodだぜ、と勘違いしてた。
なにせlamda式を初めて使ってたので、そちらが間違ってると思ったのだ。
(´・ω・`)ショボーン
一ヵ月かかったというのが何しろすごいな。
>>968
(´-`).。oO(lisp-complete-symbolとか使うといいんじゃない?結構ウザいけど)
971名無しはん@EMACS21:03/01/03 01:27
>969
いやもう趣味でやってるだけなので、λ式の文法調べたり、レファレンス最新
のに買い直したり、他のadd-hook調べたり、取り付く島が無くなって10日ほど
放置してたりしてるうちに経ってますた。

>970
M-TABで補完できたんですねえ。使えば良かった。
lisp-complete-symbol,けっこう便利だよ.他の言語のもあるといいんだけど.
他の言語だと、M-C-iはTAGSファイルから候補を引っ張ってくる
complete-symbolじゃないっすか。で、思ったんすけど、その言語
特有のものをあらかじめTAGSにしておけばJavaでもC++でもelispの
時のように手軽に補完できるわけじゃないっすか。Javaのソースを
まとめてetagsにかけてみようかな?やってる人いる?

あと、JavaAPIのinfo版ってないんすかね? 今はw3mで見ているけど、
やっぱりinfoになっている方がいいっす。拡張APIとかもあるから、
api_to_info.pl的なスクリプトとかあったらいいんすけどね。
>>973
docletでto_infoっていう手もあると思われ
975名無しさん@お腹いっぱい。:03/01/04 09:20
ミニバッファの補完を tsch みたいにできますか?
M-x n
で C-p すると navi2ch が補完されるような。
976名無しはん@EMACS21:03/01/04 09:37
>975

(load "complete") しとくと
M-x n
tab
で補完されるよ。


977975:03/01/04 09:42
>>976
ネタですか?
n tab だけで navi2ch が補完できればいいのですが。
>>975
それいいね。
作ってみれば?
979_:03/01/04 11:25
(-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ…
(∩∩) (∩∩) (∩∩)

(-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ…
(∩∩) (∩∩) (∩∩)

(-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ…
(∩∩) (∩∩) (∩∩)
http://freeweb2.kakiko.com/dengeki/indexd.htm
>>975

ミニバッファ内で履歴をインクリメンタル検索
http://sodan.org/~knagano/emacs/minibuf-isearch/

これじゃだめですか?
981名無しさん@お腹いっぱい。
今流行のマウスジェスチャーは、まーだー?