元スレEmacs Part 41
emacs覧 / PC版 /みんなの評価 :
351 = :
>>347
最近は結構複窓も使ってる。
windows.el や elscreen もどきの簡単なウィンドウ構成保存スクリプトとか
popwin とかも使ってるけどたまに盛大にウィンドウ構成ぶっこわれることあるし
353 = :
やっぱターミナルの人が多いのか
355 = :
削除しなきゃいけないパッケージを使う場合だけ別に起動する。(めったにない)
356 = :
起動しっぱなしの場合 session.el とかも不要になるのか
357 = :
>>351
なるほど。うちはウィンドウを生成させずに全部フレームで管理してる
もし窓が不意に出てきてもWMの操作で消せる
(setq pop-up-frames t)
(setq pop-up-windows nil)
358 = :
>>357
タイル型WMだと結構ありかなって気もする
NTEmacs でやったら結構うっとおしいことになった
359 = :
>>356
逆なのだ
やむをえず落とさなきゃならなくなったとき
起動しっぱなしで開いてる大量のファイルや位置情報を
退避復旧するためにその手のコードが必要不可欠になる
少なくとも俺は
360 = :
MicroEmacsの僕も仲間に入れてください
361 = :
WinでNTEmacsを使おうと思ってるんだけど、IMEパッチって当てた方がいいの?
Google日本語入力使ってるんだけど
367 = :
IMEのON/OFFでemacsのカーソル色変えてるんだが、
gnupackとGoogle IMEだと取り合いになってうまくいかないんだよなぁ。
前gnupackスレでも尋ねたんだがうまくいかなかった。
369 = :
ウィザード級パッケージとは…
370 = :
牛乳パック
371 = :
■■■■■■■■
■■■■■■■■■■■■
■■■■■■■■■■■■■■
■■■■■■ ~~ ■■■■■■
■■■■■■~~~~~~■■■■■■
■■■■■ ~~~~~~~~ ■■■■■
■■■■■ ■■~~■■ ■■■■■
■■■■■ ■■■■~~■■■■ ■■■■■
■■■■ || ■■■■ 呼んだ?
■■■■■ 〓〓〓〓||〓〓〓〓 ■■■■■
■■■■ 〓〓 || 〓〓 ■■■■
■■■■ // \\ ■■■■
■■■■ //( ●● )\\ ■■■■
■■■■ // ■■■■■■ \\ ■■■■
■■■■■ / ■■■■■■■■ \ ■■■■■
■■■■■ ■/〓〓〓〓〓〓\■ ■■■■■
■■■■■■ ■ /▼▼▼▼▼▼\ ■ ■■■■■■
■■■■■■■■■ ▼▼▼▼▼▼ ■■■■■■■■■
■■■■■■■■■ ■■ ■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■
372 = :
バッファ内に唯一でてくる
*test foo
のような*一つとそれに続く行末までの文字列を(elispで処理できるよう)取得し、
そのあとでその行を削除したいのですが、どうすればよいでしょうか
ただし、
**hoge
**bar
のようにバッファ内には*が二つ以上続くものは何度も出てくるのですが
それらには何も影響を与えたくないです
373 = :
* 一つが必ず行頭に出て、必ず他の文字が続くなら、簡単な正規表現一発でいけるね。
(save-excursion
(goto-char (point-min))
(save-match-data
(search-forward-regexp "^[*][^*]")
(let ((text (buffer-substring (line-beginning-position) (line-end-position))))
(forward-line 1)
(delete-region (match-beginning 0) (point))
text を使う処理
)))
行頭以外とかも考えるなら、 * の列を探して、長さ 1 だった場合にだけ処理する、ってのが簡単かな。
374 = :
ありがとうございます。理解できました。
気になったのですが、save-match-dataとsearch-forward-regexpを組み合わせて処理するのと
replace-regexpだけで処理することにはどういう違いがあるのでしょうか
376 = :
単に(re-search-forward "[^*]\\(\\*[^*\n][^*\n]*\\)" nil t)じゃダメなのか?
377 = :
>>374-375
replace-regexp の docstring に書いてあるように、これは対話的に使うためのコマンド。
push-mark や undo-boundary を呼んでるから、以降の編集作業に影響するかも。
>>376
対象がバッファ先頭とかにあると一致しなそう。
378 = :
>>377
なるほど、replace-regexpでは単なる置換以上のことをしてしまうのですね
なぜ対話的にしか使わないかと疑問に思っていましたがそうだったのですか
379 = :
NTEmacsスレ過疎ってるのでこっちで聞かせてください
大学の勉強用にNTEmacs入れて、その後でCygwin入れたんですが、Error (initialization): User nas no home directoryが表示されるようになりました
Cygwin入れる時に環境変数HOMEを追加したのが関係してるんでしょうか?
問題なく動きますが気に掛かります
381 = :
レスサンクスです。
インストール手順に関して情報が溢れていたので、まずgnupackでないやつでやっていました。
今度また時間が出来たら試してみます。
384 = :
whitespace.elのlines-tailを使いたいのだけれど、モード毎に文字数は変えたい。
けれども以下のようにしても上手くいかないんですが、何故でしょうか?
(defun set-whitespace-line-column (mode column)
(let ((hook (intern (concat (symbol-name mode) "-hook"))))
(add-hook hook
(lambda ()
(setq whitespace-line-column column)))))
(let ((lis '((emacs-lisp-mode 100) (lisp-mode 150)))) ; デフォルトではfill-columnのままがいい
(mapcar (lambda (x) (apply set-whitespace-line-column x))
lis))
; (c-mode nil) とかするとc-modeでは無効とかなったりすると嬉しいけどやり方がわからない。。。
385 = :
>>384 ちょっとだけ
(defun set-whitespace-line-column (mode column)
(let ((hook (intern (concat (symbol-name mode) "-hook"))))
(add-hook hook
`(lambda ()
(setq whitespace-line-column ,column)))))
あるいは Emacs 24 系で lexical-binding を使うか。
386 = :
>>384
> ; (c-mode nil) とかするとc-modeでは無効とかなったりすると嬉しいけどやり方がわからない。。。
(kill-local-variable 'whitespace-line-column)
387 = :
>>385
lambdaがclosureを生成しないなんて・・・
(lambda ()
(lexical-let ((column column))
(if column
(setq whitespace-line-column column)
(kill-local-variable 'whitespace-line-column)))))))
だと駄目なんですね。(当たり前だけど。)http://emacswiki.org/emacs/DynamicBindingVsLexicalBinding を見てみましたが、
lambdaにclosureを生成させるには lexical-binding を使うしかないんですかね。(cl使っても無理?)
388 = :
>>386
kill-local-variable だとdefalut値(fillcolumn使うとか書いてるくせにwhitespace.elには80でhard codeしてる・・・)
を使うのでうまくいきません。結局次の様にしました。
(make-variable-buffer-local 'whitespace-style)
(setq-default whitespace-style
'(face
tabs spaces newline trailing space-before-tab space-after-tab
space-mark tab-mark newline-mark
lines-tail))
(defun set-whitespace-line-column (mode column)
(let ((hook (intern (concat (symbol-name mode) "-hook"))))
(add-hook hook
`(lambda ()
(if ,column
(setq whitespace-line-column ,column)
(setq whitespace-style
(srfi-1:remove (lambda (x) (eq 'lines-tail x))
whitespace-style)))))))
(let ((lis '((emacs-lisp-mode nil))))
(mapc (lambda (x) (apply #'set-whitespace-line-column x))
lis))
;; srfi-1:remove
(defun srfi-1:remove (pred xs)
(loop for x in xs
unless (funcall pred x)
collect x))
389 = :
>>385 >>386
ありがとうございました。
ところで、変数に関しては lexical-let を使えばいいとして、関数内関数はどうすればいいんでしょう。
(defun f (&rest args)
(defun aux (lis)
...)
(aux args))
(defun g (x y)
(defun aux (x y)
(... (mapcar #'f '(...))))
(aux x y))
とかやって意味不明なエラーを前に数時間を無駄にしたよ…
f-aux, g-auxとかするというのはナシで。
http://lists.gnu.org/archive/html/help-gnu-emacs/2010-12/msg00269.html
(let ((fac (lambda (x) (if (zerop x) 1 (* x (funcall fac (1- x)))))))
(funcall fac 10))
これはちょっときもちわるい。あんまりdynamic bindingに依存したくない。
390 = :
あー、こうやればいいのか。
(defun set-whitespace-line-column (mode column)
(let ((hook (intern (concat (symbol-name mode) "-hook"))))
(add-hook hook
(lexical-let ((column column))
(lambda ()
(if column
(setq whitespace-line-column column)
(setq whitespace-style
(srfi-1:remove (lambda (x) (eq 'lines-tail x))
whitespace-style))))))))
391 = :
関数内関数なら flet とか labels とかつこうたらいいんじゃないかな。
cl だけど。
394 = :
>>391
そもそもCL系では関数内関数をschemeみたく自然に書けないんですね。
(defun my-map (proc &rest lis)
(flet ((aux (proc lis)
(mapcar proc (car lis))))
(aux proc lis)))
(defun mul2 (lis)
(flet ((aux (x)
(* 2 x)))
(my-map (lambda (x) (aux x))
lis)))
(mul2 '(1 2 3))
; => error! wrong-number-of-arguments (lambda (proc lis) (block aux (mapcar proc (car lis)))) 1)
emacs lispだとfletやlabels使ってもだめ。CLだとどっちでもちゃんと動くのに。
395 = :
メモ。
http://d.hatena.ne.jp/Nobuhisa/20090123/1232720807
(require 'cl)
(defun foo (x)
(print "YesWeCan")
(if (> x 0)
(labels ((foo (x)
(print "!")
(if (> x 0) (foo (1- x))) ))
(foo x) )))
(defun bar (x)
(print "YesWeCan")
(if (> x 0)
(flet ((bar (x)
(print "!")
(if (> x 0) (bar (1- x))) ))
(bar x) )))
(foo 5) ; => "YesWeCan" "!" "!" "!" "!" "!" "!"
(bar 5) ; => "YesWeCan" "!" "!" "!" "!" "!" "!"
396 = :
メモ。
http://d.hatena.ne.jp/kitokitoki/20090816/p9
(require 'cl)
(defun a ()
(labels
((a ()
'b))
'a))
(a)
; => (lambda nil (quote b))
(funcall (a))
; => b
(defun c ()
(flet
((c ()
'd))
'c))
(c)
; => c
(funcall (c))
; => c
397 = :
>>394
ELisp は dynamic binding だからね。
(defun mul2 (lis)
(lexical-let ((aux (lambda (x) (* 2 x))))
(my-map (lambda (x) (funcall aux x))
lis)))
みたいな、かっこわるい解なら思いつくけど。
398 = :
質問です。
次のバージョンでどんな機能をいれるとか、
その手のEmacs最新動向ってどこみればわかるんでしょうか?
http://www.gnu.org/software/emacs/
とかだと8月の更新以降アナウスないですし。
399 = :
>>398
emacs-devel mailing listのアーカイブを見る + subscribeする
Savannah Emacs page
http://savannah.gnu.org/projects/emacs/
を見て最新リポジトリをゲットする
400 = :
いや、emacs-diffsを見るのが一番いいよ。
俺は毎日これを見るのが楽しみ。
みんなの評価 :
類似してるかもしれないスレッド
- 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 43 (1001) - [92%] - 2013/12/14 11:30
- Emacs Part 44 (1001) - [92%] - 2014/2/8 8:01 △
- 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 51 (1005) - [92%] - 2020/3/26 18:30
- Emacs Part 31 (1001) - [92%] - 2009/10/23 10:31 ○
- Emacs Part 33 (1001) - [84%] - 2010/3/9 20:01 ○
- Emacs Part 53 (989) - [84%] - 2022/12/5 12:45
- Emacs Part 32 (1001) - [84%] - 2009/12/20 2:04 ○
トップメニューへ / →のくす牧場書庫について