のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,934人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレEmacs Part 41

    emacs覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    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を見るのが一番いいよ。
    俺は毎日これを見るのが楽しみ。


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について