私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレEmacs Part 39
emacs スレッド一覧へ / emacs とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
http://blog.livedoor.jp/dankogai/archives/51763038.html
(require 'cl)
; cl
(defun mapbetween (f l)
(let (y)
(mapl #'(lambda (x)
(when (cadr x)
(push (funcall f (cadr x) (car x)) y)))
l)
(nreverse y)))
; mapbetween
(mapbetween #'+ '(1 2 3 4 5))
; (3 5 7 9)
(mapbetween #'- '(0 1 4 9))
; (1 3 5)
(require 'cl)
; cl
(defun mapbetween (f l)
(let (y)
(mapl #'(lambda (x)
(when (cadr x)
(push (funcall f (cadr x) (car x)) y)))
l)
(nreverse y)))
; mapbetween
(mapbetween #'+ '(1 2 3 4 5))
; (3 5 7 9)
(mapbetween #'- '(0 1 4 9))
; (1 3 5)
>>527
もう解決してるかもしれないけど、別のスクリプト (qlgrep) に
lgrep を包むって方法は採れそう。
#!/bin/sh
lgrep "$@" > /dev/null 2>&1
さらに別の関数 (find-lgrep-dired) も用意する。
(defun find-lgrep-dired (dir regexp)
(interactive "DFind-grep (directory): \nsFind-grep (grep regexp): ")
(find-dired dir
(concat "-type f -exec qlgrep - "
(shell-quote-argument regexp)
" "
(shell-quote-argument "{}")
" "
;; Doesn't work with "+".
(shell-quote-argument ";"))))
もう解決してるかもしれないけど、別のスクリプト (qlgrep) に
lgrep を包むって方法は採れそう。
#!/bin/sh
lgrep "$@" > /dev/null 2>&1
さらに別の関数 (find-lgrep-dired) も用意する。
(defun find-lgrep-dired (dir regexp)
(interactive "DFind-grep (directory): \nsFind-grep (grep regexp): ")
(find-dired dir
(concat "-type f -exec qlgrep - "
(shell-quote-argument regexp)
" "
(shell-quote-argument "{}")
" "
;; Doesn't work with "+".
(shell-quote-argument ";"))))
>>597
解説とか殆ど見たことないけど、emacs23からは
インデントカスタマイズ用の smie ってライブラリが入ってるみたい。
つかったことないけどドキュメント読んだ感じ結構凝ったこと出来そうね。
http://www.gnu.org/software/emacs/manual/html_node/elisp/SMIE.html#SMIE
emacs24 の octave-mode とかは実際に使ってるみたいだから見てみたけど
文法定義から始まる重量級のライブラリだなこれ
解説とか殆ど見たことないけど、emacs23からは
インデントカスタマイズ用の smie ってライブラリが入ってるみたい。
つかったことないけどドキュメント読んだ感じ結構凝ったこと出来そうね。
http://www.gnu.org/software/emacs/manual/html_node/elisp/SMIE.html#SMIE
emacs24 の octave-mode とかは実際に使ってるみたいだから見てみたけど
文法定義から始まる重量級のライブラリだなこれ
diredでファイル一覧を表示させた後,そこに表示されたあるファイルについ
て,フルパス付きのファイル名をkill-ring-saveする方法はあるでしょうか。
ちょっとわかりにくかもしれませんが,例えば,diredで一覧表示した.emacs
に適用したなら,/home/hogehoge/.emacs という情報をコピペできる関数を探
しています。
て,フルパス付きのファイル名をkill-ring-saveする方法はあるでしょうか。
ちょっとわかりにくかもしれませんが,例えば,diredで一覧表示した.emacs
に適用したなら,/home/hogehoge/.emacs という情報をコピペできる関数を探
しています。
>>608
C-0w
C-0w
>>608
C-u 0 w
w runs the command dired-copy-filename-as-kill, which is an
interactive compiled Lisp function in `dired.el'.
It is bound to w.
(dired-copy-filename-as-kill &optional ARG)
Copy names of marked (or next ARG) files into the kill ring.
The names are separated by a space.
With a zero prefix arg, use the absolute file name of each marked file.
C-u 0 w
w runs the command dired-copy-filename-as-kill, which is an
interactive compiled Lisp function in `dired.el'.
It is bound to w.
(dired-copy-filename-as-kill &optional ARG)
Copy names of marked (or next ARG) files into the kill ring.
The names are separated by a space.
With a zero prefix arg, use the absolute file name of each marked file.
epwing自体がおわコンというか…
変換スクリプトもメンテされてないし、入手不可能だったり。
変換スクリプトもメンテされてないし、入手不可能だったり。
ネット辞書から引けたほうがまだいいわな。
ただ emacs-w3m がいまいちだからねえ。
emacs-xwidget + webkit が安定して使えるようになったらうっはうはなんだが・・・
ただ emacs-w3m がいまいちだからねえ。
emacs-xwidget + webkit が安定して使えるようになったらうっはうはなんだが・・・
>>615
それなら普通にブラウザ使う方がいい。
それなら普通にブラウザ使う方がいい。
>>616
むしろブラウザだけでいい
むしろブラウザだけでいい
firefox+keysnailにファイルエディット機能つければemacsの代わりに使えるんじゃね?
>>621
後者は既出感が…
後者は既出感が…
ちゃんとJavaScript 解釈してかつ elisp からブラウザの状態弄れるのがいいなあ
>>621
Javascript PC Emulator
http://bellard.org/jslinux/
で、ブラウザ上でQEmacsが使えます。
~ # which emacs
/usr/bin/emacs
~ # ls -l /usr/bin/emacs
lrwxrwxrwx 1 root root 2 May 14 2011 /usr/bin/emacs -> qe
~ # ls -l /usr/bin/qe
-rwxr-xr-x 1 root root 108240 May 16 2011 /usr/bin/qe
~ # strings /usr/bin/emacs | fgrep -i version
QEmacs version 0.3.1, Copyright (c) 2000-2003 Fabrice Bellard
Javascript PC Emulator
http://bellard.org/jslinux/
で、ブラウザ上でQEmacsが使えます。
~ # which emacs
/usr/bin/emacs
~ # ls -l /usr/bin/emacs
lrwxrwxrwx 1 root root 2 May 14 2011 /usr/bin/emacs -> qe
~ # ls -l /usr/bin/qe
-rwxr-xr-x 1 root root 108240 May 16 2011 /usr/bin/qe
~ # strings /usr/bin/emacs | fgrep -i version
QEmacs version 0.3.1, Copyright (c) 2000-2003 Fabrice Bellard
>>625
tako.el みて普通に日本語のシンボル名作れることに驚愕した
tako.el みて普通に日本語のシンボル名作れることに驚愕した
関数の中で直接呼び出されている関数*だけ*置き換える方法ってありませんでしょうか?
(defun greeting (msg who) (message "%s, %s" msg who))
(defun hello (who) (message "===hello===") (greeting "hello" who))
みたいになっている時、 hello の中で直接呼ばれてる message だけ置き換えたいのです。
flet を使うと greeting の中の message まで置き換えられてしまいます。
関数定義をそのまま引っ張ってきて書き換えたものを再定義したり fset したりする以外に方法はありませんでしょうか?
(defun greeting (msg who) (message "%s, %s" msg who))
(defun hello (who) (message "===hello===") (greeting "hello" who))
みたいになっている時、 hello の中で直接呼ばれてる message だけ置き換えたいのです。
flet を使うと greeting の中の message まで置き換えられてしまいます。
関数定義をそのまま引っ張ってきて書き換えたものを再定義したり fset したりする以外に方法はありませんでしょうか?
全然うまい方法が思いつかなかったので、じゃあせめて置き換え後の関数で
呼び出し元の関数を判断して挙動を変えようと思ったのですが、
今度は呼び出し元の関数の調べ方がわかりません。
http://b.hatena.ne.jp/IMAKADO/elisp/callee/ とかは見つかったんですが
肝心のリンク先が壊れて見れないという・・・トレースとか書いてあるから
バックトレースの内容を参照するってことなんでしょうかね・・難しい。
呼び出し元の関数を判断して挙動を変えようと思ったのですが、
今度は呼び出し元の関数の調べ方がわかりません。
http://b.hatena.ne.jp/IMAKADO/elisp/callee/ とかは見つかったんですが
肝心のリンク先が壊れて見れないという・・・トレースとか書いてあるから
バックトレースの内容を参照するってことなんでしょうかね・・難しい。
なんかものすごく力技な感じになりましたが一応実装できたので貼っておきます。
なんかもっとスマートな方法はないのか・・・・
(defun greeting (msg who) (message "%s, %s" msg who))
(defun hello (who) (message "===hello===") (greeting "hello" who))
(defun callee ()
"呼び出し元の関数名を文字列で返す"
(let ((bt (split-string (with-output-to-string
(backtrace)) "^ *\\|\n" t)))
(while (and bt
(not (string-match "^callee\\>" (pop bt)))))
(cadr bt)))
(defadvice hello (around ad-hello-no-heading activate compile)
"hello が直で呼び出している message だけ ignore に置き換える"
(let ((org-message (symbol-function 'message)))
(flet ((message (format-string &rest args)
(if (string-match "^ad-Orig-hello\\>" (callee)) ;; advice の場合は ad-Orig-* になる
(ignore)
(apply org-message format-string args))))
ad-do-it)))
なんかもっとスマートな方法はないのか・・・・
(defun greeting (msg who) (message "%s, %s" msg who))
(defun hello (who) (message "===hello===") (greeting "hello" who))
(defun callee ()
"呼び出し元の関数名を文字列で返す"
(let ((bt (split-string (with-output-to-string
(backtrace)) "^ *\\|\n" t)))
(while (and bt
(not (string-match "^callee\\>" (pop bt)))))
(cadr bt)))
(defadvice hello (around ad-hello-no-heading activate compile)
"hello が直で呼び出している message だけ ignore に置き換える"
(let ((org-message (symbol-function 'message)))
(flet ((message (format-string &rest args)
(if (string-match "^ad-Orig-hello\\>" (callee)) ;; advice の場合は ad-Orig-* になる
(ignore)
(apply org-message format-string args))))
ad-do-it)))
>>598-599 >>607
ありがとうございます。
indent-line-function等で制御するよりも>>607を改変すればよさそうだと思いました
ですが改変がうまくいきません
if (x>0) {
proc1()
proc2()
} else if (x<0) {
proc3()
proc4()
} else {
proc5()
proc6()
}
こういう風に自動的にインデントさせようとして
http://www.gnu.org/software/emacs/manual//html_node/elisp/SMIE-Grammar.html#SMIE-Grammar
の("then" insts "end")を("{" insts "}")、
("if" exp "then" inst "else" inst)を("if" exp inst "else" inst)、
(insts (insts ";" insts) (inst))を(insts (insts insts) (inst))、
に書き換えましたが、{を入力してC-jを押すと(newline-and-indent)
(wrong-type-argument integer-or-marker-p nil)
とエラーが出ました
このif (test) {procs} else if (test) {procs} else {procs} を
(procsは改行区切りです)
インデントさえできればいいのですが
どうすればよいでしょうか
ありがとうございます。
indent-line-function等で制御するよりも>>607を改変すればよさそうだと思いました
ですが改変がうまくいきません
if (x>0) {
proc1()
proc2()
} else if (x<0) {
proc3()
proc4()
} else {
proc5()
proc6()
}
こういう風に自動的にインデントさせようとして
http://www.gnu.org/software/emacs/manual//html_node/elisp/SMIE-Grammar.html#SMIE-Grammar
の("then" insts "end")を("{" insts "}")、
("if" exp "then" inst "else" inst)を("if" exp inst "else" inst)、
(insts (insts ";" insts) (inst))を(insts (insts insts) (inst))、
に書き換えましたが、{を入力してC-jを押すと(newline-and-indent)
(wrong-type-argument integer-or-marker-p nil)
とエラーが出ました
このif (test) {procs} else if (test) {procs} else {procs} を
(procsは改行区切りです)
インデントさえできればいいのですが
どうすればよいでしょうか
あと、調べていて気づいたのですが
http://www.emacswiki.org/emacs/IndentingC#toc1
このcc modeをdefine-generic-modeで作成したモードで
使えればよさそうだと思いました
というのも整えようとしているのがc++ likeのコードに似ているからです
上のsmie改変がうまくいかないときにはこれで十分です
define-generic-modeで作成したモードの初期化部分で
このcc modeの機能を利用することはできるでしょうか
http://www.emacswiki.org/emacs/IndentingC#toc1
このcc modeをdefine-generic-modeで作成したモードで
使えればよさそうだと思いました
というのも整えようとしているのがc++ likeのコードに似ているからです
上のsmie改変がうまくいかないときにはこれで十分です
define-generic-modeで作成したモードの初期化部分で
このcc modeの機能を利用することはできるでしょうか
ちなみにサンプルの設定ではうまく動いたの?
smieって何やってるのかわからなかったけど
smie-setup で indent-line-function 設定してるのな。
ちょっと真面目に使い方勉強してみるか。
smieって何やってるのかわからなかったけど
smie-setup で indent-line-function 設定してるのな。
ちょっと真面目に使い方勉強してみるか。
>>637
はい。サンプルは動きました。↓の各セクションから以下の設定をコピペして
http://www.gnu.org/software/emacs/manual//html_node/elisp/SMIE.html#SMIE
(eval-when-compile (require 'cl))
(require 'smie)
(defvar sample-smie-grammar
(defvar sample-keywords-regexp
(defun sample-smie-forward-token ()
(defun sample-smie-backward-token ()
インデント分をこう設定し
(defvar sample-indent-basic 4)
メジャーモードを作成する (define-generic-mode の初期化部分で
(list (function (lambda () (add-hook 'hoge-mode-hook (lambda ()
(smie-setup sample-smie-grammar #'sample-smie-rules)
と書きました。
あと、>>635の(insts (insts ";" insts) (inst))は書き換えないままでした
書き換えるとエラーになります すみません
>>639
確かにtokenの設定が抜け落ちていました。ですが
(defvar sample-keywords-regexp
(regexp-opt '("+" "*" "," ";" ">" ">=" "<" "<=" ":=" "="))) を
(defvar sample-keywords-regexp
(regexp-opt '("+" "*" "," ";" ">" ">=" "<" "<=" ":=" "=" "{" "}" "(" ")")))
に書き換えましたがだめでした
>>638
なるほど、ただキーワードの色づけ設定は引き継ぎたくないのでdefine-gereric-modeで設定しました
インデントとキーフックのみ特定のモードを引き継ぐという機能があればいいのですが
はい。サンプルは動きました。↓の各セクションから以下の設定をコピペして
http://www.gnu.org/software/emacs/manual//html_node/elisp/SMIE.html#SMIE
(eval-when-compile (require 'cl))
(require 'smie)
(defvar sample-smie-grammar
(defvar sample-keywords-regexp
(defun sample-smie-forward-token ()
(defun sample-smie-backward-token ()
インデント分をこう設定し
(defvar sample-indent-basic 4)
メジャーモードを作成する (define-generic-mode の初期化部分で
(list (function (lambda () (add-hook 'hoge-mode-hook (lambda ()
(smie-setup sample-smie-grammar #'sample-smie-rules)
と書きました。
あと、>>635の(insts (insts ";" insts) (inst))は書き換えないままでした
書き換えるとエラーになります すみません
>>639
確かにtokenの設定が抜け落ちていました。ですが
(defvar sample-keywords-regexp
(regexp-opt '("+" "*" "," ";" ">" ">=" "<" "<=" ":=" "="))) を
(defvar sample-keywords-regexp
(regexp-opt '("+" "*" "," ";" ">" ">=" "<" "<=" ":=" "=" "{" "}" "(" ")")))
に書き換えましたがだめでした
>>638
なるほど、ただキーワードの色づけ設定は引き継ぎたくないのでdefine-gereric-modeで設定しました
インデントとキーフックのみ特定のモードを引き継ぐという機能があればいいのですが
うおお、難しい
とりあえずコメントの ';' と 区切り文字の ';' が干渉してるのと
sample-smie-forward-token で a+b みたいなのが一気に通過しちゃうのが気になったけど
じっくり取り組まないとわからんなあ・・・
とりあえずコメントの ';' と 区切り文字の ';' が干渉してるのと
sample-smie-forward-token で a+b みたいなのが一気に通過しちゃうのが気になったけど
じっくり取り組まないとわからんなあ・・・
サンプルのまんまで実行しても emacs 23 では wrong-type-argument が出るねえ。
emacs 24 で実行するとエラーは出ないけどちゃんと動いてるような感じがしない。
サンプルそのままで実行してもぶら下がりelseがちゃんと処理できてないように見えるなぁ。
emacs 24 で実行するとエラーは出ないけどちゃんと動いてるような感じがしない。
サンプルそのままで実行してもぶら下がりelseがちゃんと処理できてないように見えるなぁ。
>>629
skk に含まれてる skk-ja-names.el とか見てみろよ。
こんなだぞ。
(defalias 'SKKモード 'skk-mode)
(defalias 'SKKのバージョン 'skk-version)
(defalias 'SKKのバグを報告する 'skk-submit-bug-report)
(defalias 'SKKのチュートリアル 'skk-tutorial)
skk に含まれてる skk-ja-names.el とか見てみろよ。
こんなだぞ。
(defalias 'SKKモード 'skk-mode)
(defalias 'SKKのバージョン 'skk-version)
(defalias 'SKKのバグを報告する 'skk-submit-bug-report)
(defalias 'SKKのチュートリアル 'skk-tutorial)
load-path の追加に normal-top-level-add-subdirs-to-load-path を使うのを
止めたら起動時間が 500~700ms 近く早くなって感動した
止めたら起動時間が 500~700ms 近く早くなって感動した
大半かどうかは知らんけどEmacs関係なく一定数いることは確か。
MSなんか公式でCTRL<=>CAPS逆にするドライバ配布してるし。
これも呪いの一つだとは思う。
MSなんか公式でCTRL<=>CAPS逆にするドライバ配布してるし。
これも呪いの一つだとは思う。
なんでこれでエラーがでるんでしょう?
(string-match (migemo-get-pattern "popw") "popwin")
ここまでは大丈夫なのに。
(string-match (migemo-get-pattern "pop") "popwin")
(string-match (migemo-get-pattern "popw") "popwin")
ここまでは大丈夫なのに。
(string-match (migemo-get-pattern "pop") "popwin")
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- Emacs Part 34 (1001) - [92%] - 2010/6/21 19:45 ○
- Emacs Part 35 (1001) - [92%] - 2010/9/19 17:01
- Emacs Part 36 (1001) - [92%] - 2011/3/1 5:02
- Emacs Part 37 (1001) - [92%] - 2011/6/20 19:47
- Emacs Part 38 (1001) - [92%] - 2011/11/29 0:01
- Emacs Part 49 (974) - [92%] - 2016/12/7 9:45
- Emacs Part 33 (1001) - [92%] - 2010/3/9 20:01 ○
- Emacs Part 32 (1001) - [92%] - 2009/12/20 2:04 ○
- Emacs Part 31 (1001) - [92%] - 2009/10/23 10:31 ○
- Emacs Part 40 (1001) - [84%] - 2012/9/7 0:30
- Emacs Part 53 (989) - [84%] - 2022/12/5 12:45
- Emacs Part 41 (1001) - [84%] - 2012/12/24 4:15
- Emacs Part 54 (97) - [84%] - 2023/1/25 17:15
- Emacs Part 42 (1001) - [84%] - 2013/6/9 5:15 △
トップメニューへ / →のくす牧場書庫について