私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレEmacs Part 43
emacs スレッド一覧へ / emacs とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
>>800
\( \) を "" の中に書くときは "\\( \\)"
^ だと行頭すべてにマッチしてしまうので文字列の頭だけなら \\`
(replace-regexp-in-string "\\`\\(?: *\n\\)+" "" " \n\n \n hoge\n \n")
;=> " hoge\n \n"
\( \) を "" の中に書くときは "\\( \\)"
^ だと行頭すべてにマッチしてしまうので文字列の頭だけなら \\`
(replace-regexp-in-string "\\`\\(?: *\n\\)+" "" " \n\n \n hoge\n \n")
;=> " hoge\n \n"
マクロを eval-when-compile 内で定義しておいてロード時には見えないようにしてる場合、
defadvice の中でそのマクロを使ってしまうとコンパイル時に展開されないためか実行時にエラーになってしまいます。
これを回避する方法はないのでしょうか?
cl を eval-when-compile で使いたいのに advice の中で使ってるせいでうまくいかない・・・
; コンパイル時のみ有効なマクロ
(eval-when-compile
(defmacro moo ()
'"moo!"))
; 関数内でマクロ使用
(defun foo ()
(moo))
; アドバイス内でマクロ使用
(defun bar ()
nil)
(defadvice bar (before ad-bar activate)
(moo))
; コンパイル後のファイルをロードして実行した結果:
; (fboundp 'moo) => nil
; (foo) => "moo!"
; (bar) => Error: void-function moo ("moo!" になってほしい)
defadvice の中でそのマクロを使ってしまうとコンパイル時に展開されないためか実行時にエラーになってしまいます。
これを回避する方法はないのでしょうか?
cl を eval-when-compile で使いたいのに advice の中で使ってるせいでうまくいかない・・・
; コンパイル時のみ有効なマクロ
(eval-when-compile
(defmacro moo ()
'"moo!"))
; 関数内でマクロ使用
(defun foo ()
(moo))
; アドバイス内でマクロ使用
(defun bar ()
nil)
(defadvice bar (before ad-bar activate)
(moo))
; コンパイル後のファイルをロードして実行した結果:
; (fboundp 'moo) => nil
; (foo) => "moo!"
; (bar) => Error: void-function moo ("moo!" になってほしい)
一部間違えました。
(defadvice bar (before ad-bar activate)
(moo))
↓
(defadvice bar (after ad-bar activate)
(setq ad-return-value (moo)))
(defadvice bar (before ad-bar activate)
(moo))
↓
(defadvice bar (after ad-bar activate)
(setq ad-return-value (moo)))
eval-when-compileで思ったが>>787でやってるキャッシュなんか
全部eval-when-compileでやっちゃえばいいんじゃないかと思ったわ
どうせ違う環境にもってったらそんときinit.elコンパイルし直すだろうしな
(when (eval-when-compile (executable-find "w3m")) ...)
みたいな
マニュアルみてもコンパイル時に定数に置き換えるっていってるし
全部eval-when-compileでやっちゃえばいいんじゃないかと思ったわ
どうせ違う環境にもってったらそんときinit.elコンパイルし直すだろうしな
(when (eval-when-compile (executable-find "w3m")) ...)
みたいな
マニュアルみてもコンパイル時に定数に置き換えるっていってるし
じゃないや・・ マニュアルによると ad-return-value は after でも使えるみたいです。
原理的なおっ説教ですまないが、
- advice を使う
- cl パッケージを cl-* なしで使う
という2重の意味でこまったことをしている気がする。。。
根本から立ち戻って、本当にそれしか方法がないのか再考はできないかなぁ。
Emacs 24.4. の nadvice.el が使えるようになったら色々と捗る気はするが、
捗らないかもしれない。
- advice を使う
- cl パッケージを cl-* なしで使う
という2重の意味でこまったことをしている気がする。。。
根本から立ち戻って、本当にそれしか方法がないのか再考はできないかなぁ。
Emacs 24.4. の nadvice.el が使えるようになったら色々と捗る気はするが、
捗らないかもしれない。
>>811
advice はともかく cl-* を使ってるかどうかは関係なくね?
どっちにしろ (require 'cl) しないと使えない上
(require 'cl) はライブラリで使う時は eval-when-compile にしてランタイムに使うなってのは
変わってないでしょ。
advice はともかく cl-* を使ってるかどうかは関係なくね?
どっちにしろ (require 'cl) しないと使えない上
(require 'cl) はライブラリで使う時は eval-when-compile にしてランタイムに使うなってのは
変わってないでしょ。
>>805
stackoverflow でも似たような質問出ていたけど最後は結局普通に require しろで終わってたな。
他に考えられる方法としては、advice の中身を別関数建てにして予めコンパイルさせるぐらいか。
これだとロード時じゃなくコンパイル時にちゃんと中身までマクロ展開されるし
関数名 typo とかしてても Warning 出してくれるようになる。
(eval-when-compile (defmacro moo () "moo!"))
(defun bar () nil)
(defun ad-bar-internal () (moo))
(defadvice bar (after ad-bar activate) (setq ad-return-value (ad-bar-internal)))
stackoverflow でも似たような質問出ていたけど最後は結局普通に require しろで終わってたな。
他に考えられる方法としては、advice の中身を別関数建てにして予めコンパイルさせるぐらいか。
これだとロード時じゃなくコンパイル時にちゃんと中身までマクロ展開されるし
関数名 typo とかしてても Warning 出してくれるようになる。
(eval-when-compile (defmacro moo () "moo!"))
(defun bar () nil)
(defun ad-bar-internal () (moo))
(defadvice bar (after ad-bar activate) (setq ad-return-value (ad-bar-internal)))
(require 'cl) がランタイムで禁止だったのは同名のEmacs Lispの関数を上書きして、
他のソフトがどっちを使っているのか分からなくなる問題があったため。
最近のEmacs は、clパッケージの関数の先頭に全部 cl- をくっつけることで名前衝突を防ぎ、
普通にrequire できる、 (require 'cl-lib) というのがあるので、支障がなければこっちを
使うべき。
他のソフトがどっちを使っているのか分からなくなる問題があったため。
最近のEmacs は、clパッケージの関数の先頭に全部 cl- をくっつけることで名前衝突を防ぎ、
普通にrequire できる、 (require 'cl-lib) というのがあるので、支障がなければこっちを
使うべき。
>>803-804
ありがとう。汚いコードを書かずに済みました。
バックスラッシュは……普段rx使ってるのでという言い訳を。
(replace-regexp-in-string (rx string-start (* (or blank "\n")) "\n")
""
" \n\n \n hoge\n \n")
ありがとう。汚いコードを書かずに済みました。
バックスラッシュは……普段rx使ってるのでという言い訳を。
(replace-regexp-in-string (rx string-start (* (or blank "\n")) "\n")
""
" \n\n \n hoge\n \n")
>>816
ありがとうございます。
それは前も試しましたが void-function になります。
compile オプションの説明、Info 見ても正直よくわからないんですよね。
elc ファイル直接見てもわかるんですが事前にコンパイルするって命令ではないようです。
(この場合だと elc の中で moo が展開されていない)
preactivate もいまいち使いどころがわからないし色々 advice は難しい・・・
ありがとうございます。
それは前も試しましたが void-function になります。
compile オプションの説明、Info 見ても正直よくわからないんですよね。
elc ファイル直接見てもわかるんですが事前にコンパイルするって命令ではないようです。
(この場合だと elc の中で moo が展開されていない)
preactivate もいまいち使いどころがわからないし色々 advice は難しい・・・
>>818
24.3.1 で (bar) -> "moo!" となるけど?
24.3.1 で (bar) -> "moo!" となるけど?
>>819
(fboundp 'moo) が t になってませんか?
(symbol-function 'bar) でコンパイル済みの中身がでますが、その中で moo は展開されていますでしょうか。
なにかの拍子に未コンパイルの方を一度でもロードしてしまうと
moo が定義されてしまってそのまま動いてしまったりするので。
(fboundp 'moo) が t になってませんか?
(symbol-function 'bar) でコンパイル済みの中身がでますが、その中で moo は展開されていますでしょうか。
なにかの拍子に未コンパイルの方を一度でもロードしてしまうと
moo が定義されてしまってそのまま動いてしまったりするので。
>>820
じゃあこれでどうだ?
(defadvice bar (after ad-bar preactivate activate)
(setq ad-return-value (moo)))
(eval-when-compile
(ad-compile-function 'bar))
じゃあこれでどうだ?
(defadvice bar (after ad-bar preactivate activate)
(setq ad-return-value (moo)))
(eval-when-compile
(ad-compile-function 'bar))
emacs終了時に.recentfへの書き込み時間がいつの間にか伸びるようになってしまいました
package経由でインストールしたelispのせいだと思うのですが、どれが原因か絞り切れていません
なにかいい調べ方はありますか
package経由でインストールしたelispのせいだと思うのですが、どれが原因か絞り切れていません
なにかいい調べ方はありますか
recentf-save-list が終了時に .recentf に保存する関数みたいだけど、
実際にそれに時間かかってるのか、それとも他のが終了時に時間かかってて
たまたま .recentf に保存してるメッセージが長く表示されてるように見えてるだけなのか見てみたほうがいいかも。
benchmark とか elp 使って recentf-save-list の実行にかかる時間測ってみるとかね。
あと kill-emacs-hook の中身とか。
実際にそれに時間かかってるのか、それとも他のが終了時に時間かかってて
たまたま .recentf に保存してるメッセージが長く表示されてるように見えてるだけなのか見てみたほうがいいかも。
benchmark とか elp 使って recentf-save-list の実行にかかる時間測ってみるとかね。
あと kill-emacs-hook の中身とか。
バイナリファイルをオープンして最初の4byteをリトルエンディアンでリードして返す、
みたいな処理はemacs lispでどう書けますか?
C言語ならfopenしてfreadするだけなのですが…
みたいな処理はemacs lispでどう書けますか?
C言語ならfopenしてfreadするだけなのですが…
一旦どっかのバッファに読む必要があるけど insert-file-contents-literally を使えばいいと思う。
これだとファイルのどこをどれだけ読むか指定出来る。
文字コード変換とかしないで読み込んでくれるけど、(set-buffer-multibyte nil) は必要だったかもしれない。
これだとファイルのどこをどれだけ読むか指定出来る。
文字コード変換とかしないで読み込んでくれるけど、(set-buffer-multibyte nil) は必要だったかもしれない。
こんな感じ?なんかもっとスッキリ出来るのかな。
あと素の emacs だと 28bit までしか扱えなかったんじゃなかったっけ。最近のは違うんだろうか。
あと insert-file-contents-literally は全部読み込むわけじゃなく、指定した範囲だけ読み込むから
とんでもなく大きい場合でも問題ないよ。
(defun read-dword (filename pos)
(with-temp-buffer
(set-buffer-multibyte nil)
(insert-file-contents-literally filename nil pos (+ pos 4))
(let ((result 0))
(dotimes (c 4 result)
(setq result (+ (lsh result 8)
(string-to-char (buffer-substring (- 4 c) (- 5 c))))))
)))
あと素の emacs だと 28bit までしか扱えなかったんじゃなかったっけ。最近のは違うんだろうか。
あと insert-file-contents-literally は全部読み込むわけじゃなく、指定した範囲だけ読み込むから
とんでもなく大きい場合でも問題ないよ。
(defun read-dword (filename pos)
(with-temp-buffer
(set-buffer-multibyte nil)
(insert-file-contents-literally filename nil pos (+ pos 4))
(let ((result 0))
(dotimes (c 4 result)
(setq result (+ (lsh result 8)
(string-to-char (buffer-substring (- 4 c) (- 5 c))))))
)))
>>828
サンプルありがとうございます。期待通りに動作しました。
insert-file-contents-literallyは&optionalの引数(beg end)で読み込む範囲を指定できるのですね。
ちゃんとマニュアル読むべきでした。すみません。
あと自分のはemacs 23.4.1ですが整数型はsigned 29bitまでしか扱えませんでした。
サンプルありがとうございます。期待通りに動作しました。
insert-file-contents-literallyは&optionalの引数(beg end)で読み込む範囲を指定できるのですね。
ちゃんとマニュアル読むべきでした。すみません。
あと自分のはemacs 23.4.1ですが整数型はsigned 29bitまでしか扱えませんでした。
>>824
有難うございます!
有難うございます!
たまに *Quail Completions* ってバッファが出来てるんですけど
これは何者ですか?
これは何者ですか?
ソースをagでググれば
emacs/lisp/international/quail.el
にありますね。
簡易入力メソッドフレームワーク "qual" のつくるバッファ。
Emacsの入力フレームワークは「たまご」egg(たくさんまたせてごめんなさい)
→eggの簡易版「うずらのたまご」quail.el
→quailの簡易版「こまどりのたまご」robin.el
という形になっていて、ちょっとしたものをつくる場合は robin.el は便利。
emacs/lisp/international/quail.el
にありますね。
簡易入力メソッドフレームワーク "qual" のつくるバッファ。
Emacsの入力フレームワークは「たまご」egg(たくさんまたせてごめんなさい)
→eggの簡易版「うずらのたまご」quail.el
→quailの簡易版「こまどりのたまご」robin.el
という形になっていて、ちょっとしたものをつくる場合は robin.el は便利。
>>834
ありがとうございます。そういう事だったのですね。
Win や Mac の IME しか使ったことなくて分かってませんでした。
単に \ を入力したつもりが Ctrl + \ を押しちゃってただけでした・・・
ありがとうございます。そういう事だったのですね。
Win や Mac の IME しか使ったことなくて分かってませんでした。
単に \ を入力したつもりが Ctrl + \ を押しちゃってただけでした・・・
smartrepを導入したのですが、smartrepによる連続操作実行後にカーソルキーによるカーソルの移動や
Deleteキーによる文字削除の動作を行うと、smartrepの解除と共にアルファベットが入力されてしまうのですが
これを回避する方法はありますか??
C-fやC-b、C-dを使えば問題ないのですが・・
環境は Windows + Cygwin です。
Deleteキーによる文字削除の動作を行うと、smartrepの解除と共にアルファベットが入力されてしまうのですが
これを回避する方法はありますか??
C-fやC-b、C-dを使えば問題ないのですが・・
環境は Windows + Cygwin です。
>>836
Mac使ってて、そういう現象は確認できなかったけど…
他のライブラリが影響を及ぼしていないかを確認するため、
素Emacsでsmartrep以外全てオフにした最小限の状態でも
同じ現象が起こるか確認できる?それで起こるなら
そのコードを張ってみてください…
Mac使ってて、そういう現象は確認できなかったけど…
他のライブラリが影響を及ぼしていないかを確認するため、
素Emacsでsmartrep以外全てオフにした最小限の状態でも
同じ現象が起こるか確認できる?それで起こるなら
そのコードを張ってみてください…
(require 'package)
(add-to-list 'package-archives '("marmalade" . "略"))
;; load-pathを追加する関数を定義します.
(略
(add-to-load-path "elisp")
(add-to-load-path "elpa")
;;; C-x o,o,o...で画面切り替えを行えるようにします。C
(require 'smartrep)
(smartrep-define-key global-map (kbd "C-x")
'(("o" . 'other-window)))
(add-to-list 'package-archives '("marmalade" . "略"))
;; load-pathを追加する関数を定義します.
(略
(add-to-load-path "elisp")
(add-to-load-path "elpa")
;;; C-x o,o,o...で画面切り替えを行えるようにします。C
(require 'smartrep)
(smartrep-define-key global-map (kbd "C-x")
'(("o" . 'other-window)))
>>840
こうさん。こちらじゃ再現しない。最小限構成にしても出るのなら、
もうEmacsそのものの環境の問題とかじゃないかな?
でも確かに C-x o のsmartrep 化は便利だなぁ。
いつも windmove で動いてたけどこっちに乗り換えてみるか。
こうさん。こちらじゃ再現しない。最小限構成にしても出るのなら、
もうEmacsそのものの環境の問題とかじゃないかな?
でも確かに C-x o のsmartrep 化は便利だなぁ。
いつも windmove で動いてたけどこっちに乗り換えてみるか。
24.4のリリースを検討し始めたとこだね。
俺的な改善点はeshellでgitのログとか見れるようになるとこだな。(わかる人しかわからんか)
俺的な改善点はeshellでgitのログとか見れるようになるとこだな。(わかる人しかわからんか)
っていうかgitのログすら見れんシェルを付けるなと。
eshellって名乗るぐらいなら
gitログくらいグラフィカルに表示しろ。
eshellって名乗るぐらいなら
gitログくらいグラフィカルに表示しろ。
普通にshell-mode
と見せかけて通はterm、これ
素人が手を出すとバッファからぬけられなくなって往生する諸刃の剣
と見せかけて通はterm、これ
素人が手を出すとバッファからぬけられなくなって往生する諸刃の剣
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- Emacs Part 40 (1001) - [92%] - 2012/9/7 0:30
- Emacs Part 47 (995) - [92%] - 2015/4/19 13:01
- Emacs Part 42 (1001) - [92%] - 2013/6/9 5:15 △
- Emacs Part 44 (1001) - [92%] - 2014/2/8 8:01 △
- Emacs Part 53 (989) - [92%] - 2022/12/5 12:45
- Emacs Part 46 (984) - [92%] - 2014/12/24 14:15
- Emacs Part 45 (1001) - [92%] - 2014/6/23 9:45
- Emacs Part 48 (997) - [92%] - 2015/12/9 15:15
- Emacs Part 49 (974) - [92%] - 2016/12/7 9:45
- Emacs Part 33 (1001) - [92%] - 2010/3/9 20:01 ○
- Emacs Part 41 (1001) - [92%] - 2012/12/24 4:15
- Emacs Part 32 (1001) - [84%] - 2009/12/20 2:04 ○
- Emacs Part 31 (1001) - [84%] - 2009/10/23 10:31 ○
- Emacs part 23 (1001) - [84%] - 2008/2/8 0:04 ☆
トップメニューへ / →のくす牧場書庫について