Emacs Lispのスレです。
- GNU Emacs Lisp Reference Manual
http://www.gnu.org/software/emacs/manual/elisp.html
- An Introduction to Programming in Emacs Lisp
http://www.gnu.org/software/emacs/manual/eintr.html
- Emacs Wiki の "EmacsLisp"
http://www.emacswiki.org/cgi-bin/wiki/EmacsLisp
- GNU Emacs
http://www.gnu.org/software/emacs/emacs.html
探検
【GNU】Emacs Lisp 【Elisp】
2013/10/20(日) 07:50:56.93
2014/02/23(日) 22:12:44.44
矩形、編集で調べている時点であかん
もともと、そんな関数あるわけない。
カーソル制御で知らべろ
で、関数作れ(簡単にできる)
もともと、そんな関数あるわけない。
カーソル制御で知らべろ
で、関数作れ(簡単にできる)
9690のなりすまし
2014/02/23(日) 22:49:00.932014/02/25(火) 03:36:47.58
今だにemacsとか使ってるバカいるのか。
Common Lispでなければ
意味ない。
Common Lispでなければ
意味ない。
2014/02/25(火) 03:54:33.31
そうかな?
俺自身はCommon Lisp系のxyzzyを使っているが
emacsはemacsで良さがある
俺自身はCommon Lisp系のxyzzyを使っているが
emacsはemacsで良さがある
2014/02/25(火) 09:22:57.05
>>97
(require `cl)
(require `cl)
100デフォルトの名無しさん
2014/02/25(火) 15:01:22.07 >>90
(info "(emacs) Two-Column")
かな。
<F2> s or C-x 6 s
で、split して
<F2> 1 or C-x 6 1
で、merge
C-x C-n set-goal-column
という、手もある。
これだと、行末に空白が足りない時そのcolumn に飛んでくれないから、
こんな関数を、作っておいて、適当な Key に bind しておくといいかも
(defun fill-to-goal-column ()
""
(interactive)
(when goal-column
(end-of-line)
(let ((len (- goal-column (current-column))))
(when (> len 0)
(insert (make-string len ?\ ))))))
;; two-column mode の懐かしさに、久しぶりの書き込みでござる。
(info "(emacs) Two-Column")
かな。
<F2> s or C-x 6 s
で、split して
<F2> 1 or C-x 6 1
で、merge
C-x C-n set-goal-column
という、手もある。
これだと、行末に空白が足りない時そのcolumn に飛んでくれないから、
こんな関数を、作っておいて、適当な Key に bind しておくといいかも
(defun fill-to-goal-column ()
""
(interactive)
(when goal-column
(end-of-line)
(let ((len (- goal-column (current-column))))
(when (> len 0)
(insert (make-string len ?\ ))))))
;; two-column mode の懐かしさに、久しぶりの書き込みでござる。
101デフォルトの名無しさん
2014/03/01(土) 08:13:00.51 質問です。
実行後、空白行で区切った段落を1行で省略表示させて、
カーソル行が省略表示されている段落と同じ範囲内に来た場合に
展開してくれるというものが作りたいのですが、可能でしょうか?
【実行前】
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
□←カーソル位置
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
【実行後】
テキストテキストテキストテキストテキストテキスト...
□テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
実行後、空白行で区切った段落を1行で省略表示させて、
カーソル行が省略表示されている段落と同じ範囲内に来た場合に
展開してくれるというものが作りたいのですが、可能でしょうか?
【実行前】
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
□←カーソル位置
テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
【実行後】
テキストテキストテキストテキストテキストテキスト...
□テキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキスト
102デフォルトの名無しさん
2014/03/01(土) 08:23:12.92 >>101
出来るでしょう。
テキストプロパティやオーバーレイには
表示内容だけ一時的に変更するってのと、カーソルが上に乗った時/いなくなった時に任意の関数を呼び出すって属性があるから
それを設定してやればいいんじゃないかな。
hs-minor-mode あたりを設定を変えつつ使うのが楽でいいんじゃないでしょうか。
隠す区切りを改行が連続している領域に変更して、
隠す処理を行ってる関数あたりに point-entered/point-left で表示をトグルする処理を追加してやると。
出来るでしょう。
テキストプロパティやオーバーレイには
表示内容だけ一時的に変更するってのと、カーソルが上に乗った時/いなくなった時に任意の関数を呼び出すって属性があるから
それを設定してやればいいんじゃないかな。
hs-minor-mode あたりを設定を変えつつ使うのが楽でいいんじゃないでしょうか。
隠す区切りを改行が連続している領域に変更して、
隠す処理を行ってる関数あたりに point-entered/point-left で表示をトグルする処理を追加してやると。
103デフォルトの名無しさん
2014/03/01(土) 10:46:01.33 hs-set-up-overlay に出入りした時に隠したり表示したりするプロパティ追加する関数せっていすりゃいいんじゃね。
104デフォルトの名無しさん
2014/03/02(日) 21:33:23.49 >>103
具体的にどのようにすればよろしいでしょうか?
具体的にどのようにすればよろしいでしょうか?
105デフォルトの名無しさん
2014/03/02(日) 21:48:51.04 まずorg.elを開きます
106デフォルトの名無しさん
2014/03/02(日) 21:56:23.12 point-entered は残念ながら overlay では機能しないらしいから
気合入れて text-property に追加してまわるしかないんじゃないかなあ
post-command-hook でいちいちチェックして hs-hide-block/hs-show-block もいいかもね
気合入れて text-property に追加してまわるしかないんじゃないかなあ
post-command-hook でいちいちチェックして hs-hide-block/hs-show-block もいいかもね
107デフォルトの名無しさん
2014/03/10(月) 07:20:52.21 一度elispの拡張の楽しさを覚えると、他のエディタに移れない
108デフォルトの名無しさん
2014/03/10(月) 07:48:40.35 ひょえー
固まっていくんだ
固まっていくんだ
109デフォルトの名無しさん
2014/03/10(月) 16:22:33.05 >>107
vimやsublimetextはpythonで拡張できるけどそれと比較してどうよ?
vimやsublimetextはpythonで拡張できるけどそれと比較してどうよ?
110デフォルトの名無しさん
2014/03/10(月) 16:28:12.11 Pymacs動くから普通にPythonでも拡張できるよ
111デフォルトの名無しさん
2014/03/11(火) 20:38:09.46 Lispで拡張子できるのに、ナニが悲しゅうてパイソンつかうんや?
Lisp使えへんからか?
ひょっとしてナニがうずくんか?
「リストは飽きた、パイもませろ」
エッヂね、あなた
Lisp使えへんからか?
ひょっとしてナニがうずくんか?
「リストは飽きた、パイもませろ」
エッヂね、あなた
112デフォルトの名無しさん
2014/03/11(火) 20:39:25.89 リスト × L
リスト ○ R
リスト ○ R
113デフォルトの名無しさん
2014/03/25(火) 18:27:18.16ID:Ye296TBS なんか話題ない?
114デフォルトの名無しさん
2014/03/26(水) 23:27:38.28ID:LML8JeED >>109
Vim ってpythonで拡張できるん?
Vim ってpythonで拡張できるん?
115デフォルトの名無しさん
2014/03/26(水) 23:31:15.83ID:6UDaHe6u emacsは遅めだな
116デフォルトの名無しさん
2014/03/27(木) 00:13:29.55ID:/J3FM59H >>114
python だけじゃなく ruby とか lua でも拡張出来るよ
ただしコンパイル時に if_python とか if_lua とか組み込まないとだめだけど
オリジナルの Vim scriptは海外ではウケが悪いんだとさ
python だけじゃなく ruby とか lua でも拡張出来るよ
ただしコンパイル時に if_python とか if_lua とか組み込まないとだめだけど
オリジナルの Vim scriptは海外ではウケが悪いんだとさ
117デフォルトの名無しさん
2014/03/27(木) 02:09:44.05ID:FdT+1cD1 24.4から (< a b c …) できるって。
118デフォルトの名無しさん
2014/03/27(木) 13:12:09.80ID:rnycJJoD 今までできなかったのかよ
119デフォルトの名無しさん
2014/03/27(木) 13:16:52.73ID:qdz8LPjI 定義すれば済むことだな
120デフォルトの名無しさん
2014/03/27(木) 21:55:07.06ID:4xfA40Vl121デフォルトの名無しさん
2014/04/03(木) 22:08:59.03ID:PIEAAVmi122デフォルトの名無しさん
2014/04/03(木) 22:37:18.61ID:DQUVbJjr そういう意味ではリーダーマクロのない elisp はいまいち
123デフォルトの名無しさん
2014/04/03(木) 22:44:26.98ID:PIEAAVmi >>122
Emacs Lisp にリーダーマクロを実装してみた
http://dev.ariel-networks.com/Members/matsuyama/implement-emacs-lisp-reader-macro/
Emacs Lisp にリーダーマクロを実装してみた
http://dev.ariel-networks.com/Members/matsuyama/implement-emacs-lisp-reader-macro/
124デフォルトの名無しさん
2014/04/20(日) 18:24:46.84ID:RjB2Ff6v125デフォルトの名無しさん
2014/04/25(金) 08:03:24.78ID:xiFjVo8G Latexのコードの特殊文字(?)を取り除いて文字だけにしたい
例えば
This figure ¥ref{fig:some} show someone.
を
This figure 321 show someone.
に変換したい
どんな正規表現置換すればいいでしょうか
例えば
This figure ¥ref{fig:some} show someone.
を
This figure 321 show someone.
に変換したい
どんな正規表現置換すればいいでしょうか
126デフォルトの名無しさん
2014/04/29(火) 06:14:21.54ID:hZWbnKFL パッケージが使えるようになってから
ライブラリ関係が整理されてきたね
http://www.wilfred.me.uk/blog/2013/03/31/essential-elisp-libraries/
ライブラリ関係が整理されてきたね
http://www.wilfred.me.uk/blog/2013/03/31/essential-elisp-libraries/
127デフォルトの名無しさん
2014/05/05(月) 22:14:00.15ID:rH4KCYSG >>125
321はどっから出てきた?
321はどっから出てきた?
128デフォルトの名無しさん
2014/05/08(木) 04:12:16.26ID:gIosECTp あああ
129デフォルトの名無しさん
2014/05/08(木) 20:38:27.07ID:APfGLDmZ あああじゃねえよ321は決め打ち?
130デフォルトの名無しさん
2014/05/29(木) 22:57:32.74ID:lRFHqZI8 iii
131みつを
2014/06/04(水) 19:55:43.06ID:1mti/jFC >>130
iiiじゃねえよ。決め打ちね。
ちいさいことからこつこつやっていくしかないよなぁ
(replace-regexp-in-string "[\\]ref\{.*\}" "321" "This figure \\ref{fig:some} show someone.")
そもそも\refを先に\\refにしないとイカンかもな。\rになってまうもんなぁ
iiiじゃねえよ。決め打ちね。
ちいさいことからこつこつやっていくしかないよなぁ
(replace-regexp-in-string "[\\]ref\{.*\}" "321" "This figure \\ref{fig:some} show someone.")
そもそも\refを先に\\refにしないとイカンかもな。\rになってまうもんなぁ
132みつを
2014/06/04(水) 19:57:17.25ID:1mti/jFC133デフォルトの名無しさん
2014/06/04(水) 21:16:48.17ID:40jNRALG むしろそれが今の Emacs の成長率みたいなもんなんじゃないのかな
134デフォルトの名無しさん
2014/06/13(金) 21:28:22.09ID:9IC9OAVr あああ
iii
uuu
iii
uuu
135デフォルトの名無しさん
2014/09/10(水) 14:59:47.34ID:TJ7Vp+Yk 最近なんか話題ある?
136デフォルトの名無しさん
2014/09/10(水) 23:18:57.46ID:7cU3np3J きちさんが元気になった。
137デフォルトの名無しさん
2014/09/12(金) 06:48:41.92ID:pwXLQ7qz カーソル位置の単語または選択範囲の文字をisearcの検索対象にする
http://nicolas-petton.fr/blog/isearch-thing.html
http://nicolas-petton.fr/blog/isearch-thing.html
138デフォルトの名無しさん
2014/09/13(土) 00:21:10.93ID:3yBdenhy >>136
どんなふうに?
どんなふうに?
139デフォルトの名無しさん
2014/10/12(日) 21:42:50.50ID:QLTYsLQy Ymacs
140デフォルトの名無しさん
2014/10/16(木) 00:29:06.56ID:9sgE7fDV windows の emacs で find-name-dired をやりたかったんだけど、cmd の find は挙動が違うし、外部から find.exe をもってくるのも難しいしということで、elisp で find-name-dired っぽいものを自作した。
それは、条件に合致したものを cons で繋げていく原始的なものだったんだけど、その後、「リストよりもベクトルの方が参照が速い」ことや、mapcar 関数の存在を知って、自作 find を書き換えた。
修正の結果、find に要する時間は長くなってしまった。
その後、remove-if なる関数があることをしって、先のコードの mapcar を remove-if にすげ替えた。
結果さらに遅くなった。
やっぱりコンスセル単位で操作していくのが一番速いのですか?
それは、条件に合致したものを cons で繋げていく原始的なものだったんだけど、その後、「リストよりもベクトルの方が参照が速い」ことや、mapcar 関数の存在を知って、自作 find を書き換えた。
修正の結果、find に要する時間は長くなってしまった。
その後、remove-if なる関数があることをしって、先のコードの mapcar を remove-if にすげ替えた。
結果さらに遅くなった。
やっぱりコンスセル単位で操作していくのが一番速いのですか?
141デフォルトの名無しさん
2014/10/16(木) 09:04:05.88ID:ML6o1wZC > やっぱりコンスセル単位で操作していくのが一番速いのですか?
ベクトルは参照は早いけど追加操作は遅い。リストはその逆と思っておけばいい。
ケースバイケースだからソース公開するといいよ。
ベクトルは参照は早いけど追加操作は遅い。リストはその逆と思っておけばいい。
ケースバイケースだからソース公開するといいよ。
142デフォルトの名無しさん
2014/10/16(木) 09:56:15.97ID:9sgE7fDV >>141
ありがとうございます。まず、最初に作ったコードです。最後の reverse は無意味でした。
;; M-x myfind
(defvar myfind-ffile-map (make-sparse-keymap))
(define-key myfind-ffile-map [return]
(lambda ()
(interactive)
(find-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
(define-key myfind-ffile-map "\C-m"
(lambda ()
(interactive)
(find-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
(define-key myfind-ffile-map "f"
(lambda ()
(interactive)
(find-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
(define-key myfind-ffile-map "v"
(lambda ()
(interactive)
(view-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
;; 続きます
ありがとうございます。まず、最初に作ったコードです。最後の reverse は無意味でした。
;; M-x myfind
(defvar myfind-ffile-map (make-sparse-keymap))
(define-key myfind-ffile-map [return]
(lambda ()
(interactive)
(find-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
(define-key myfind-ffile-map "\C-m"
(lambda ()
(interactive)
(find-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
(define-key myfind-ffile-map "f"
(lambda ()
(interactive)
(find-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
(define-key myfind-ffile-map "v"
(lambda ()
(interactive)
(view-file (buffer-substring
(line-beginning-position)
(line-end-position)))))
;; 続きます
143デフォルトの名無しさん
2014/10/16(木) 10:00:45.11ID:9sgE7fDV (defun myfind (dir pattern)
"find by elisp"
(interactive
"DDirectory: \nspattern: ")
;; define variable
(let ((case-fold-search t)
(myfind-temp (sort (myfind-store-files dir pattern)
'string<)))
;; make buffer
(let ((temp-buffer-show-function 'switch-to-buffer))
(with-output-to-temp-buffer "*Myfind*"
(set-buffer "*Myfind*")
(font-lock-mode 0)
(setq buffer-read-only nil)
(princ (format "%d matches for \"%s\" in dir: %s\n"
(length myfind-temp) pattern dir))
(dolist (temp myfind-temp)
(princ (concat "\n" temp))
(goto-char (1- (point-max)))
(put-text-property
(line-beginning-position)
(line-end-position) 'face 'underline)
(put-text-property
(line-beginning-position)
(line-end-position) 'keymap myfind-ffile-map)
(when (file-directory-p temp)
(put-text-property
(line-beginning-position)
(line-end-position) 'face 'link))
(goto-char (point-max)))
(view-mode t)))))
"find by elisp"
(interactive
"DDirectory: \nspattern: ")
;; define variable
(let ((case-fold-search t)
(myfind-temp (sort (myfind-store-files dir pattern)
'string<)))
;; make buffer
(let ((temp-buffer-show-function 'switch-to-buffer))
(with-output-to-temp-buffer "*Myfind*"
(set-buffer "*Myfind*")
(font-lock-mode 0)
(setq buffer-read-only nil)
(princ (format "%d matches for \"%s\" in dir: %s\n"
(length myfind-temp) pattern dir))
(dolist (temp myfind-temp)
(princ (concat "\n" temp))
(goto-char (1- (point-max)))
(put-text-property
(line-beginning-position)
(line-end-position) 'face 'underline)
(put-text-property
(line-beginning-position)
(line-end-position) 'keymap myfind-ffile-map)
(when (file-directory-p temp)
(put-text-property
(line-beginning-position)
(line-end-position) 'face 'link))
(goto-char (point-max)))
(view-mode t)))))
144デフォルトの名無しさん
2014/10/16(木) 10:06:43.79ID:9sgE7fDV (defun myfind-dir (input-list input-dir-box)
(let (dir-box)
(dolist (x input-list)
(when (file-directory-p x)
(unless (equal "." (substring x -1))
(if dir-box
(setq dir-box (cons x dir-box))
(setq dir-box (cons x input-dir-box))))))
(if dir-box
(setq dir-box (reverse dir-box))
input-dir-box)))
(defun myfind-store (input-list input-store-box pattern)
(let ((store-box)
(case-fold-search t))
(dolist (x input-list)
(unless (equal "." (substring x -1))
(when (string-match pattern (file-name-nondirectory x))
(if store-box
(setq store-box (cons x store-box))
(setq store-box (cons x input-store-box))))))
(if store-box
store-box input-store-box)))
(defun myfind-store-files (dir pattern)
(let ((tmp-files (directory-files dir t)))
(let ((dir-box (reverse (myfind-dir tmp-files nil))) (store-box (myfind-store tmp-files nil pattern)) (dir-temp-box))
(while (> (length dir-box) 0)
(setq dir-temp-box ())
(dolist (x dir-box)
(setq store-box (myfind-store (directory-files x t) store-box pattern))
(setq dir-temp-box (myfind-dir (directory-files x t) dir-temp-box)))
(setq dir-box (reverse dir-temp-box)))
(reverse store-box))))
(let (dir-box)
(dolist (x input-list)
(when (file-directory-p x)
(unless (equal "." (substring x -1))
(if dir-box
(setq dir-box (cons x dir-box))
(setq dir-box (cons x input-dir-box))))))
(if dir-box
(setq dir-box (reverse dir-box))
input-dir-box)))
(defun myfind-store (input-list input-store-box pattern)
(let ((store-box)
(case-fold-search t))
(dolist (x input-list)
(unless (equal "." (substring x -1))
(when (string-match pattern (file-name-nondirectory x))
(if store-box
(setq store-box (cons x store-box))
(setq store-box (cons x input-store-box))))))
(if store-box
store-box input-store-box)))
(defun myfind-store-files (dir pattern)
(let ((tmp-files (directory-files dir t)))
(let ((dir-box (reverse (myfind-dir tmp-files nil))) (store-box (myfind-store tmp-files nil pattern)) (dir-temp-box))
(while (> (length dir-box) 0)
(setq dir-temp-box ())
(dolist (x dir-box)
(setq store-box (myfind-store (directory-files x t) store-box pattern))
(setq dir-temp-box (myfind-dir (directory-files x t) dir-temp-box)))
(setq dir-box (reverse dir-temp-box)))
(reverse store-box))))
145デフォルトの名無しさん
2014/10/16(木) 10:11:33.46ID:9sgE7fDV 連投すみません。どこか外部にアップして、url を貼るべきでした。以上に対して、新しいコードでは、上記の関数 myfind-dir, myfind-store, myfind-store-files を以下に差し替えました。
(defun myfind-store-files (dir pattern)
(let* ((tmp-files (directory-files dir t))
(dir-box)
(dir-store)
(store-box (vconcat tmp-files))
(i 0))
(setq dir-box (remove-if '(lambda (x)
(or (not (file-directory-p x))
(equal "." (substring x -1))))
(vconcat tmp-files)))
(while (> (length dir-box) 0)
(while (< i (length dir-box))
(setq store-box (vconcat store-box (directory-files
(aref dir-box i) t)))
(setq dir-store (vconcat
dir-store
(remove-if
'(lambda (x)
(or (not (file-directory-p x))
(equal "." (substring x -1))))
(vconcat (directory-files (aref dir-box i) t)))))
(setq i (1+ i)))
(setq i 0)
(setq dir-box dir-store)
(setq dir-store nil))
(append (remove-if '(lambda (x)
(or (equal "." (substring x -1))
(not (string-match
pattern (file-name-nondirectory x)))))
(delete nil store-box)) nil)))
(defun myfind-store-files (dir pattern)
(let* ((tmp-files (directory-files dir t))
(dir-box)
(dir-store)
(store-box (vconcat tmp-files))
(i 0))
(setq dir-box (remove-if '(lambda (x)
(or (not (file-directory-p x))
(equal "." (substring x -1))))
(vconcat tmp-files)))
(while (> (length dir-box) 0)
(while (< i (length dir-box))
(setq store-box (vconcat store-box (directory-files
(aref dir-box i) t)))
(setq dir-store (vconcat
dir-store
(remove-if
'(lambda (x)
(or (not (file-directory-p x))
(equal "." (substring x -1))))
(vconcat (directory-files (aref dir-box i) t)))))
(setq i (1+ i)))
(setq i 0)
(setq dir-box dir-store)
(setq dir-store nil))
(append (remove-if '(lambda (x)
(or (equal "." (substring x -1))
(not (string-match
pattern (file-name-nondirectory x)))))
(delete nil store-box)) nil)))
146デフォルトの名無しさん
2014/10/16(木) 10:26:10.93ID:ML6o1wZC いや、github とかにだね。。
147デフォルトの名無しさん
2014/10/16(木) 10:42:49.66ID:ML6o1wZC vconcat して新しいベクトルをいっぱい生成してるけど、それぐらいならリス
トをそのまま使った方がましだろうね。走査する速度が速くなるよりもベクト
ルを生成するコストの方が高い気はする。
それから mapcar は C の関数だからベクトルでもリストでも気にするほどのパ
フォーマンスの違いはない。elisp でパフォーマンスを気にしてプログラミン
グするときは C で書いてあるか否かも意識するとよいね。
(let ((vec (make-vector 1000 nil)))
(benchmark 100
`(mapcar 'identity vec)))
(let ((lis (make-list 1000 nil)))
(benchmark 100
`(mapcar 'identity lis)))
ざっと見る限りひたすらプログラミング初心者なのでとりあえずパフォーマン
スなんか気にしないで「リスト」を使って富豪的にどんどん書いてく方がいい
よ。
トをそのまま使った方がましだろうね。走査する速度が速くなるよりもベクト
ルを生成するコストの方が高い気はする。
それから mapcar は C の関数だからベクトルでもリストでも気にするほどのパ
フォーマンスの違いはない。elisp でパフォーマンスを気にしてプログラミン
グするときは C で書いてあるか否かも意識するとよいね。
(let ((vec (make-vector 1000 nil)))
(benchmark 100
`(mapcar 'identity vec)))
(let ((lis (make-list 1000 nil)))
(benchmark 100
`(mapcar 'identity lis)))
ざっと見る限りひたすらプログラミング初心者なのでとりあえずパフォーマン
スなんか気にしないで「リスト」を使って富豪的にどんどん書いてく方がいい
よ。
148ID:9sgE7fDV
2014/10/16(木) 11:15:16.59ID:DN4MHL3l149ID:9sgE7fDV
2014/10/28(火) 15:57:32.52ID:XuuTzEP8 elisp による find を書き直しました。
https://gist.github.com/anonymous/e0d440b0be2ab4106390
M-x efind
で、ディレクトリとパターンをいれると、
指定したディレクトリ以下にあるファイルもしくはディレクトリのうち、
パターンにマッチするものを列挙します。
下線がひいてあるところは、enter を押すとリンクできます。
「ここは普通こう書くよ」など、コメントをいただけないでしょうか。
https://gist.github.com/anonymous/e0d440b0be2ab4106390
M-x efind
で、ディレクトリとパターンをいれると、
指定したディレクトリ以下にあるファイルもしくはディレクトリのうち、
パターンにマッチするものを列挙します。
下線がひいてあるところは、enter を押すとリンクできます。
「ここは普通こう書くよ」など、コメントをいただけないでしょうか。
150デフォルトの名無しさん
2014/10/28(火) 16:53:12.91ID:BaOL+HSr >>149
普通のdiredじゃ駄目な理由がわからん
普通のdiredじゃ駄目な理由がわからん
151デフォルトの名無しさん
2014/10/28(火) 20:47:19.78ID:ABQvesFS152デフォルトの名無しさん
2014/10/30(木) 22:47:05.96ID:ZUGQOqFu 久々に来たけどなんかもりあがってるね。
153デフォルトの名無しさん
2014/11/16(日) 21:37:23.05ID:ifD0nPmW >>149
君、すごうぃーね〜
君、すごうぃーね〜
2014/11/16(日) 23:28:59.20ID:moSkozbZ
無駄多し、バグありの find-lisp-find-dired ってのが大昔からあるよ
155ID:9sgE7fDV
2014/11/19(水) 11:27:44.63ID:De3REAga156デフォルトの名無しさん
2014/11/23(日) 11:20:51.79ID:3HkxdKNj LispとPrologやれば
Cでの再帰プログラムが得意になる
Cでの再帰プログラムが得意になる
157デフォルトの名無しさん
2014/11/24(月) 06:26:03.94ID:eOmEBZPc べつに
lisp/prologの経験と
再帰の得手不得手は無関係だと思う
lisp/prologの経験と
再帰の得手不得手は無関係だと思う
158デフォルトの名無しさん
2015/01/11(日) 18:20:45.19ID:NEH94HBN なんか話題ない?
159デフォルトの名無しさん
2015/01/13(火) 10:50:02.39ID:NDLkVK0s マイナーモードの作成について、こちらが意図しないアクション (とくに keyboard-quit) をされたら、そのマイナーモードを抜けるようにしたいんだけど、どうすればいいですか?
できれば pre-command-hook や post-command-hook は使いたくないです。
できれば pre-command-hook や post-command-hook は使いたくないです。
160デフォルトの名無しさん
2015/01/13(火) 15:38:25.07ID:8CwIIHPp >>159
> マイナーモードを抜ける
の意味がわからない。
minor-mode のコマンドを途中でやめて元のキーシーケンスに戻るってことなら
auto-complete.el の ac-fallback-command あたりを見るとよろしかろう。
> マイナーモードを抜ける
の意味がわからない。
minor-mode のコマンドを途中でやめて元のキーシーケンスに戻るってことなら
auto-complete.el の ac-fallback-command あたりを見るとよろしかろう。
161デフォルトの名無しさん
2015/01/13(火) 16:45:00.86ID:NDLkVK0s >>160
コメントありがとうございます。
ご提示いただいたソースを読みたいと思います。
ちなみに、
(add-hook ’post-command-hook ’(lambda () (when hoge-mode (hoge-mode -1))))
のような処理を意図しております。
コメントありがとうございます。
ご提示いただいたソースを読みたいと思います。
ちなみに、
(add-hook ’post-command-hook ’(lambda () (when hoge-mode (hoge-mode -1))))
のような処理を意図しております。
162デフォルトの名無しさん
2015/01/13(火) 17:30:12.89ID:8CwIIHPp >>161
> (add-hook ’post-command-hook ’(lambda () (when hoge-mode (hoge-mode -1))))
それなら auto-complete.el の例は関係ないかな…
post-command-hook 使うか timer で意図しないコマンドを監視するかしかないのではなかろうか。
何やろうとしてるか分からないから余計なことかもしれないけど、
minor-mode を使うという発想をやめるのも解に繋がるかもしれないよ。
> (add-hook ’post-command-hook ’(lambda () (when hoge-mode (hoge-mode -1))))
それなら auto-complete.el の例は関係ないかな…
post-command-hook 使うか timer で意図しないコマンドを監視するかしかないのではなかろうか。
何やろうとしてるか分からないから余計なことかもしれないけど、
minor-mode を使うという発想をやめるのも解に繋がるかもしれないよ。
163デフォルトの名無しさん
2015/01/13(火) 17:45:35.15ID:NDLkVK0s >>162
ありがとうございます。
minor-mode を使うなら、あまり選択肢がないのですね。
> minor-mode を使わない
なるほど!なんとなく、とりあえずでマイナーモードを利用していたのですが、使わないという発想も大事なのですね。
ありがとうございます。
minor-mode を使うなら、あまり選択肢がないのですね。
> minor-mode を使わない
なるほど!なんとなく、とりあえずでマイナーモードを利用していたのですが、使わないという発想も大事なのですね。
164デフォルトの名無しさん
2015/01/13(火) 18:03:40.40ID:Wsh3Ajof そのものずばり何をしたいか書いちゃった方がいい気もする
165デフォルトの名無しさん
2015/01/13(火) 19:16:25.85ID:NDLkVK0s はい、ありがとうございます。
自分用に ace-jump を拡張してます。
勉強のため、通常の ace-jump 部分も最初から作っております。
今回は、hoge-jump というマイナーモードを定義しておりました。
マイナーモードという形を選択した理由は、なんとなくなのですが、他に、マイナーモードを抜ける時点に hook をかけたいという理由があります。
具体的には、hoge-jump によってバッファに付加したオーバーレイを、hoge-jump の去り際にリムーブしております。
(ただ、本家の ace-jump もマイナーモードを使ってないのですね。
本家のほうをもっと検討したいと思います)。
自分用に ace-jump を拡張してます。
勉強のため、通常の ace-jump 部分も最初から作っております。
今回は、hoge-jump というマイナーモードを定義しておりました。
マイナーモードという形を選択した理由は、なんとなくなのですが、他に、マイナーモードを抜ける時点に hook をかけたいという理由があります。
具体的には、hoge-jump によってバッファに付加したオーバーレイを、hoge-jump の去り際にリムーブしております。
(ただ、本家の ace-jump もマイナーモードを使ってないのですね。
本家のほうをもっと検討したいと思います)。
166デフォルトの名無しさん
2015/01/17(土) 10:12:31.67ID:IkrGJUzn ace-jumpで
1. (ace-jump-char-mode) 実行
2. Query char を mini-bufferから選択
3. a-Zの選択
の2の作業を省いて、
1. (ace-jump-char-selected-mode "A") みたいなの作って実行
2. a-Zの選択
のように。単語を指定した状態で実行したいのですが、
やり方が分からず。
わかる方いらっしゃいますか?
1. (ace-jump-char-mode) 実行
2. Query char を mini-bufferから選択
3. a-Zの選択
の2の作業を省いて、
1. (ace-jump-char-selected-mode "A") みたいなの作って実行
2. a-Zの選択
のように。単語を指定した状態で実行したいのですが、
やり方が分からず。
わかる方いらっしゃいますか?
167デフォルトの名無しさん
2015/01/17(土) 15:43:11.36ID:mj45QIEF >>166
ace-jump 使ってないからコメントしづらいけど
数日経ってこの調子だとすごく低いレベルで推移もしていないように見える。(まるで成長していない)
何をしようとしてどうだめだったのか書きたまえ。
ソースを見る限りだと ace-jump-char-mode の引数に目的の char を渡すだけ
にも思える。
(ace-jump-char-mode ?A)
ace-jump 使ってないからコメントしづらいけど
数日経ってこの調子だとすごく低いレベルで推移もしていないように見える。(まるで成長していない)
何をしようとしてどうだめだったのか書きたまえ。
ソースを見る限りだと ace-jump-char-mode の引数に目的の char を渡すだけ
にも思える。
(ace-jump-char-mode ?A)
168デフォルトの名無しさん
2015/01/17(土) 20:04:09.96ID:dLLfAZ37 >>167
ちょっとまて、165 は私で別人ですよ。
ちょっとまて、165 は私で別人ですよ。
169168
2015/01/17(土) 20:58:25.28ID:654N0mRZ 私のほうは、結局マイナーモードを使うにしろ使わないにしろ、keyboard-quit のタイミングを知るには post-command-hook に任意の hook をかけるしかないな、との考えに至りました。
なので、マイナーモードを使用し、それに入るタイミングと出るタイミングで add-hook と remove-hook をおこなうよう設定する予定です。
なので、マイナーモードを使用し、それに入るタイミングと出るタイミングで add-hook と remove-hook をおこなうよう設定する予定です。
171デフォルトの名無しさん
2015/01/19(月) 13:52:05.04ID:9dIDW3L4172デフォルトの名無しさん
2015/01/19(月) 14:00:29.29ID:KroxEeJe 釣り質問としては85点くらい
174デフォルトの名無しさん
2015/01/20(火) 20:54:08.37ID:boIocfqk (condition-case err
(keyboard-quit)
(quit
(message "My Quit! %s" err)))
(condition-case err
(keyboard-quit)
(error
(message "Not Quit")))
(keyboard-quit)
(quit
(message "My Quit! %s" err)))
(condition-case err
(keyboard-quit)
(error
(message "Not Quit")))
175デフォルトの名無しさん
2015/01/21(水) 07:37:45.06ID:ydgtfCH8 アッシー
176デフォルトの名無しさん
2015/01/23(金) 00:28:52.51ID:A+ui+mzv symbolp()は'symと:symの両方tを返すけど
:symこれのみ真を返す述語あったっけ?
:symこれのみ真を返す述語あったっけ?
177デフォルトの名無しさん
2015/01/23(金) 00:38:40.51ID:KyQRIuOJ keywordp
178デフォルトの名無しさん
2015/01/23(金) 02:16:59.21ID:+QZK+ImI >>176
keywordp
keywordp
179デフォルトの名無しさん
2015/01/23(金) 13:03:20.01ID:A+ui+mzv180デフォルトの名無しさん
2015/01/24(土) 13:37:32.69ID:rWwk77U6 どういたしまして
181デフォルトの名無しさん
2015/03/02(月) 23:35:21.61ID:b1MuukTF swift-modeどこかに落ちてませんか?
182デフォルトの名無しさん
2015/03/03(火) 00:02:29.53ID:3dr1cPx7 検索したら一瞬で出てくるが
183デフォルトの名無しさん
2015/03/17(火) 15:43:40.52ID:oOjriwkf if とか and って special form だとおもうんだけれど、これ無しの普通の関数のみで条件によって実行するしないを含むようなプログラムって書ける?
haskell みたいに、遅延評価を行えば可能らしいけれど。
聞く場所間違ってたらすまん
haskell みたいに、遅延評価を行えば可能らしいけれど。
聞く場所間違ってたらすまん
184デフォルトの名無しさん
2015/03/17(火) 16:21:51.69ID:StR3CX22185デフォルトの名無しさん
2015/03/17(火) 19:52:02.87ID:u03+oswx 特殊形式は無理じゃね
186デフォルトの名無しさん
2015/03/18(水) 00:49:30.65ID:smUcV4wp 関数だと引数は全部実行というか評価されてしまうが、
マクロでなんとでもなる
(defmacro myif (pred good bad)
(list 'if pred good bad))
もしくは略記法として
(defmacro myif (pred good bad)
`(if ,pred ,good ,bad))
とすると、
(myif t (insert "ok") (insert "ng"))
と書ける。こうやってS式を返すような関数と同様にmyifを「マクロとして」定義すると、
(myif ...)というフォームはまず最初に「展開」されてから実行される。ここだと
(if t (insert "ok") (insert "ng")) と最初から書いてあったのと同じことになって、
nbの部分は実行されないという寸法。これはつまらない例だが。
もうちょっと面白い例だと、
(defmacro awhen (pred &rest body)
`(let ((it ,pred))
(when it
,@body)))
とすると条件式の結果を本体(body)の中でitとして使えるとか
(awhen "hogehoge" (message it))
special formとマクロの違いは組み込みかどうかぐらい。
こんな感じで色々制御構文を作ったり、遅延評価のを実装したりもできるが、
あんまり濫用すると自分でもわからなくなってくる諸刃の剣
長文御免
マクロでなんとでもなる
(defmacro myif (pred good bad)
(list 'if pred good bad))
もしくは略記法として
(defmacro myif (pred good bad)
`(if ,pred ,good ,bad))
とすると、
(myif t (insert "ok") (insert "ng"))
と書ける。こうやってS式を返すような関数と同様にmyifを「マクロとして」定義すると、
(myif ...)というフォームはまず最初に「展開」されてから実行される。ここだと
(if t (insert "ok") (insert "ng")) と最初から書いてあったのと同じことになって、
nbの部分は実行されないという寸法。これはつまらない例だが。
もうちょっと面白い例だと、
(defmacro awhen (pred &rest body)
`(let ((it ,pred))
(when it
,@body)))
とすると条件式の結果を本体(body)の中でitとして使えるとか
(awhen "hogehoge" (message it))
special formとマクロの違いは組み込みかどうかぐらい。
こんな感じで色々制御構文を作ったり、遅延評価のを実装したりもできるが、
あんまり濫用すると自分でもわからなくなってくる諸刃の剣
長文御免
187183
2015/03/18(水) 01:01:43.13ID:nZSu0bqF188デフォルトの名無しさん
2015/03/18(水) 01:09:21.60ID:dNB2wbku special form を使わずに if 実装って elisp では可能なんだろか…
macro 使ったとしても結局 if 的なことするためには置き換え先で special form 使うことになるよね。
macro 使ったとしても結局 if 的なことするためには置き換え先で special form 使うことになるよね。
189183
2015/03/18(水) 01:19:26.33ID:nZSu0bqF ID 変わってるかもですが 183 です。
>>186
内部的に特殊形式を利用しているので、申し訳なくも私がもともと期待していたものとは違うのですが、
特殊形式であっても独自拡張可能というのは面白いですね。
私は主に Python や C/C++ の世界に住んでいるので、例えば条件付トレースなど、
可能であれば条件式によって引数を評価せずに処理をしたいときにあきらめてしまうことがあります。
(書かなくてもわかるかとも思いますが) Python の例で言えばこんな感じです。
def conditional_trace(ctrl, msg):
if ctrl: print msg
return
conditional_trace(True, heavy_message_generate())
そもそも Python の世界なんて、コストは大して気にしない場合が多いのですが、
貧乏性でして。あと heavy_message_generate に副作用があったりすると困ります。
こういう意味では C/C++ のプリプロセッサのほうが自由度が高いですね。言語の外にあるだけあって。
条件後出しで申し訳ないです。でも、macro の威力がわかってとても良かったです。ありがとうございます。
ちなみに、when もマクロであって、マクロの展開では評価されないことに依存したものですね。
基礎的な機能であっても、special form をたくさん作るよりはマクロで構文糖衣するということで、これも面白いです。
>>186
内部的に特殊形式を利用しているので、申し訳なくも私がもともと期待していたものとは違うのですが、
特殊形式であっても独自拡張可能というのは面白いですね。
私は主に Python や C/C++ の世界に住んでいるので、例えば条件付トレースなど、
可能であれば条件式によって引数を評価せずに処理をしたいときにあきらめてしまうことがあります。
(書かなくてもわかるかとも思いますが) Python の例で言えばこんな感じです。
def conditional_trace(ctrl, msg):
if ctrl: print msg
return
conditional_trace(True, heavy_message_generate())
そもそも Python の世界なんて、コストは大して気にしない場合が多いのですが、
貧乏性でして。あと heavy_message_generate に副作用があったりすると困ります。
こういう意味では C/C++ のプリプロセッサのほうが自由度が高いですね。言語の外にあるだけあって。
条件後出しで申し訳ないです。でも、macro の威力がわかってとても良かったです。ありがとうございます。
ちなみに、when もマクロであって、マクロの展開では評価されないことに依存したものですね。
基礎的な機能であっても、special form をたくさん作るよりはマクロで構文糖衣するということで、これも面白いです。
190183
2015/03/18(水) 01:50:01.10ID:nZSu0bqF >>188
そうそう。それです。教えていただいた結果、私の疑問もそれになりました。
true, false ではなく、car, (lambda (x) (car (cdr x))) を渡すことになりますが、
macro を遅延評価代わりに使って、分岐っぽいものが実現できるようです。
(defmacro cdrif (idx good bad)
(funcall idx (list good bad)))
(cdrif car (insert "ok") (insert "ng"))
ok
(cdrif (lambda (x) (car (cdr x))) (insert "ok") (insert "ng"))
ng
あとは、任意の(真偽)値から car, (lambda (x) (car (cdr x))) に変換できれば、
elisp で if を自作できることになるんですかねぇ。
ちょっと自信が無いですが。
そうそう。それです。教えていただいた結果、私の疑問もそれになりました。
true, false ではなく、car, (lambda (x) (car (cdr x))) を渡すことになりますが、
macro を遅延評価代わりに使って、分岐っぽいものが実現できるようです。
(defmacro cdrif (idx good bad)
(funcall idx (list good bad)))
(cdrif car (insert "ok") (insert "ng"))
ok
(cdrif (lambda (x) (car (cdr x))) (insert "ok") (insert "ng"))
ng
あとは、任意の(真偽)値から car, (lambda (x) (car (cdr x))) に変換できれば、
elisp で if を自作できることになるんですかねぇ。
ちょっと自信が無いですが。
191183
2015/03/18(水) 02:28:36.05ID:nZSu0bqF (defmacro cdrifx (bool good bad)
(funcall
(car
(cdr
(assq bool (list '(t car) '(nil (lambda (x) (car (cdr x))))))))
(list good bad)))
cdrifx
(cdrifx t (insert "ok") (insert "ng"))
ok
(cdrifx nil (insert "ok") (insert "ng"))
ng
assq を使ってしまえば出来ました。(assq は C built-in function.)
仮に lisp のみで assq を実装すると if が必要になるかもしれませんが、
概念的には単なる写像というか単純なマッピング関数なのでありなのかなぁ。
チラ裏になってしまい申し訳ない。
(funcall
(car
(cdr
(assq bool (list '(t car) '(nil (lambda (x) (car (cdr x))))))))
(list good bad)))
cdrifx
(cdrifx t (insert "ok") (insert "ng"))
ok
(cdrifx nil (insert "ok") (insert "ng"))
ng
assq を使ってしまえば出来ました。(assq は C built-in function.)
仮に lisp のみで assq を実装すると if が必要になるかもしれませんが、
概念的には単なる写像というか単純なマッピング関数なのでありなのかなぁ。
チラ裏になってしまい申し訳ない。
192デフォルトの名無しさん
2015/03/18(水) 03:39:54.16ID:smUcV4wp symbol-property-listでの力技を作ってしまおうかと思ったら先を越されてた。
>>189
もとの疑問を離れてその目的ならということだけど、
単純にその重い処理を関数として渡してしまうのがいいのでは。
よくthunkと言われる方法。
(defun conditional-trace (x thunk)
(when x (funcall thunk))
としておいて
(conditional-trace t (lambda () (heavy-message-generate))
とか
(conditional-trace t #'heavy-message-generate)
とか。
そのpythonの例でも同様に
def conditional_trace(ctrl, func):
if ctrl: print func()
return
conditional_trace(True, lambda:heavy_message_generate())
conditional_trace(True, heavy_message_generate)
遅延評価する言語も中身はこういう感じの実装だったと思う。
C/C++は関数が第一級データ型じゃないので相当面倒になるが、
頑張ればできるはず…(最近のC++にはラムダ式入ったみたいだけど)。
C/C++のプロプロセッサだと動的に条件を変えたくなったら困らない?
デバッグオプション付きで走らせた時だけトレースが欲しいとかもできなく
なっちゃうし。
あとちょっと複雑なことやろうとすると急速に黒魔術化するイメージがある。
>>189
もとの疑問を離れてその目的ならということだけど、
単純にその重い処理を関数として渡してしまうのがいいのでは。
よくthunkと言われる方法。
(defun conditional-trace (x thunk)
(when x (funcall thunk))
としておいて
(conditional-trace t (lambda () (heavy-message-generate))
とか
(conditional-trace t #'heavy-message-generate)
とか。
そのpythonの例でも同様に
def conditional_trace(ctrl, func):
if ctrl: print func()
return
conditional_trace(True, lambda:heavy_message_generate())
conditional_trace(True, heavy_message_generate)
遅延評価する言語も中身はこういう感じの実装だったと思う。
C/C++は関数が第一級データ型じゃないので相当面倒になるが、
頑張ればできるはず…(最近のC++にはラムダ式入ったみたいだけど)。
C/C++のプロプロセッサだと動的に条件を変えたくなったら困らない?
デバッグオプション付きで走らせた時だけトレースが欲しいとかもできなく
なっちゃうし。
あとちょっと複雑なことやろうとすると急速に黒魔術化するイメージがある。
193デフォルトの名無しさん
2015/03/18(水) 07:20:53.23ID:dNB2wbku194デフォルトの名無しさん
2015/03/18(水) 07:23:49.75ID:dNB2wbku 最低限組み込みで実装しなきゃいけない部分はどこまでで
あとはその組み合わせで自己記述可能になるとかは lisp の教科書読めばわかるのかな。
あとはその組み合わせで自己記述可能になるとかは lisp の教科書読めばわかるのかな。
レスを投稿する
ニュース
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 植田日銀総裁 「円安進行が物価高を起こしている」 ★4 [お断り★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 「ふざけんな!」 国会議員給与、『月5万円増』報道にネット騒然 「国民が物価高で困っているのに」「定数削減とか言いながら…」★2 [♪♪♪★]
- 【画像有り】ヘイトスピーチ系ネトウヨYouTuberのへずまりゅう、駐車中に大阪府警に職質される [718678614]
- (´・ω・`)…
- ハムエッグ派VSベーコンエッグ派
- 男子あるある
- 冬眠中のクマの巣穴の出口を何らかの手段で密閉したら
- 【神奈川新聞】「暇空茜」を県警追送検 [746833765]
