トップページunix
990コメント300KB

Emacs Part 39

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2011/11/29(火) 17:50:44.24
前スレ

Emacs Part 38
http://hibari.2ch.net/test/read.cgi/unix/1308635178/
0729名無しさん@お腹いっぱい。2012/01/16(月) 20:11:35.65
>>727-728
ありがとうございます。両方の情報とも関係がありそうだと検討をつけて探したら
そのものずばりのページにたどり着けました
http://emacs.g.hatena.ne.jp/k1LoW/20101211/1292046538
この図こそ記憶にあったものです
感謝です
0730名無しさん@お腹いっぱい。2012/01/16(月) 20:25:39.60
gnupackのemacsで等幅フォント(migu 1m)を使っているはずなのに
微妙にずれてしまう気がします
対処策はあるのでしょうか
0731名無しさん@お腹いっぱい。2012/01/16(月) 21:45:30.64
>>730
NTEmacsスレの方がストレートな解答が貰えるかもしれない。
Windowsだとフォント重ねあわせでボールド化するとかの設定有効にしてると
ずれることがあるって聞いたことがあるな。変数名は忘れたが。
0732名無しさん@お腹いっぱい。2012/01/16(月) 22:03:50.99
あれ、うちもだそれ。LinuxでGNU Emacs 23.3.1、Ricty 3.1.2

Rictyを使ってるんだけど例えば $ の幅が他の文字の 90% ぐらいになってる
フォントの設定はなんか難しいから放置中
0733名無しさん@お腹いっぱい。2012/01/16(月) 22:18:58.39
Rictyってたしか複数のフォントをマージした奴だったよね。
しかもライセンスの問題でバッチ処理で自分で結合処理するんだった記憶が。
幅あってないんじゃない?
0734名無しさん@お腹いっぱい。2012/01/16(月) 22:31:27.69
いやRictyって幅を合わせたのが売りじゃなかったっけ?
0735名無しさん@お腹いっぱい。2012/01/16(月) 22:40:43.46
C-u C-x = で $ と字を調べてみたら?
違うフォントや違うサイズが割り当てられてたりしない?
0736名無しさん@お腹いっぱい。2012/01/16(月) 23:02:15.92
ヒントどうもです。 差し当たり $ と 1 についての C-u C-x = の出力および
init.el の関係ありそうな設定部分を貼っときます
http://codepad.org/cN7neV2I

($) xft:-unknown-Ricty-normal-normal-normal-*-16-*-*-*-*-0-iso10646-1 (#x07)
(1) xft:-unknown-Ricty-normal-normal-normal-*-16-*-*-*-*-0-iso10646-1 (#x14)
07377302012/01/17(火) 13:39:36.57
解決策がわかりました
フォントのサイズを3の倍数にすればよいだけでした
>Emacs で等幅フォントの半角文字・全角文字の横幅比 1:2 を必ず達成するフォント設定
ttp://stickydiary.blog88.fc2.com/blog-entry-107.html
0738名無しさん@お腹いっぱい。2012/01/17(火) 14:43:24.37
EmacsLisp勉強中です。自作の関数をさらしますので添削お願いします。

(defun random-string (length)
(let ((i length)
(s "0123456789abcdefghijklmnopqrstuvwxyz")
(a '())
n c)
(while (> i 0)
(setq n (random 36))
(setq c (substring s n (+ n 1)))
(setq a (cons c a))
(setq i (- i 1)))
(string-join "" a)))
0739名無しさん@お腹いっぱい。2012/01/17(火) 14:50:18.40
動けばいいってこと?

(defun random-string (length)
(let ((i length)
(s "0123456789abcdefghijklmnopqrstuvwxyz")
(a '())
n c)
(while (> i 0)
(setq n (random 36))
(setq c (substring s n (1+ n)))
(setq a (cons c a))
(setq i (- i 1)))
(mapconcat 'identity a "")))
0740名無しさん@お腹いっぱい。2012/01/17(火) 15:05:13.65
(defun random-string (length)
(let ((s "0123456789abcdefghijklmnopqrstuvwxyz")
a n)
(while (> length 0)
(setq n (random 36))
(setq a (concat a (substring s n (1+ n))))
(setq length (1- length)))
a))
0741名無しさん@お腹いっぱい。2012/01/17(火) 15:24:40.20
(defun random-string (length)
(concat (loop with s = "0123456789abcdefghijklmnopqrstuvwxyz"
repeat length
collect (aref s (random 36)))))
0742名無しさん@お腹いっぱい。2012/01/17(火) 15:40:14.13
(defun random-string (length)
(let* ((offset (random 36))
(char (substring "0123456789abcdefghijklmnopqrstuvwxyz" offset (1+ offset))))
(if (> length 1)
(concat char (random-string (1- length)))
char)))
0743名無しさん@お腹いっぱい。2012/01/17(火) 15:59:27.93
(defun random-string (length)
(substring (shuffle-vector "0123456789abcdefghijklmnopqrstuvwxyz")
0 length))
0744名無しさん@お腹いっぱい。2012/01/17(火) 16:08:57.86
(defun random-string (length)
  (loop with s = (make-string length 0)
  for i from 0 to (1- length)
  do (aset s i (aref "0123456789abcdefghijklmnopqrstuvwxyz" (random 36)))
  finally return s))
0745名無しさん@お腹いっぱい。2012/01/17(火) 16:13:45.58
はい、そこまで。
0746名無しさん@お腹いっぱい。2012/01/17(火) 16:33:07.71
アホ学生の課題か
0747名無しさん@お腹いっぱい。2012/01/17(火) 17:17:27.28
random 36っていうのは何というかスマートじゃ無いな
0748名無しさん@お腹いっぱい。2012/01/17(火) 17:26:31.48
見る限り >>742 >>743 はトーシロだな。
0749名無しさん@お腹いっぱい。2012/01/17(火) 17:29:19.73
>>748
なんで?
0750名無しさん@お腹いっぱい。2012/01/17(火) 17:33:44.72
関数への入力値を大きくしてみたまえ。
0751名無しさん@お腹いっぱい。2012/01/17(火) 17:41:13.00
そんなデカい値で使うような関数か?
0752名無しさん@お腹いっぱい。2012/01/17(火) 17:44:04.87
負け犬プログラマーがここにも。こーゆーやつよくいるんだよね。ヽ(´▽`)ノ
0753名無しさん@お腹いっぱい。2012/01/17(火) 17:47:45.79
職場でやられると締め殺したくなるやつだな。w
0754名無しさん@お腹いっぱい。2012/01/17(火) 17:58:40.75
elispだけで文字列をパスワードつけて暗号化できるパッケージないですか?
0755名無しさん@お腹いっぱい。2012/01/17(火) 18:52:51.80
七色に光るタッチキーボードかあ
好きな色にキーボード光らせるなら
ctrとaltは目立つ色にしたいな
0756名無しさん@お腹いっぱい。2012/01/17(火) 18:53:41.57
>>755
誤爆?
0757名無しさん@お腹いっぱい。2012/01/17(火) 18:55:29.08
http://ax3s.blog54.fc2.com/blog-entry-345.html
こいつでemacsとか最高じゃないか
0758名無しさん@お腹いっぱい。2012/01/17(火) 18:58:37.67
キーボードの話はこっちでいいんじゃない。

Keyboard キーボード 3
http://toro.2ch.net/test/read.cgi/unix/1285489282/
0759名無しさん@お腹いっぱい。2012/01/17(火) 19:17:47.77
>>757
テンキーレスってところがいいな。
英語配列ならなおよかったんだけど。
0760名無しさん@お腹いっぱい。2012/01/17(火) 19:20:18.21
「ハンファ」

なんかヤダ。
0761名無しさん@お腹いっぱい。2012/01/17(火) 19:23:45.05
Emacsとなにも関係ない件
0762名無しさん@お腹いっぱい。2012/01/17(火) 20:16:45.69
自由にカスタマイズできるって言っても、C-cの後とかC-xの後に有効なキーだけ
色を変えるってのはできないんでしょう?
0763名無しさん@お腹いっぱい。2012/01/17(火) 20:25:40.12
色を変えるってキーボードの?ww
0764名無しさん@お腹いっぱい。2012/01/17(火) 20:58:16.61
あんたインテリアこだわるの好きね。
0765名無しさん@お腹いっぱい。2012/01/17(火) 21:42:54.57
Emacsにハマりそうで怖い。

論文書くのにWordだとだるい

Emacs + LaTexってよさげ

Tutorialをやってみる

るびきち本を買ってくる ← いまここ

独特の操作系で敷居が高いと思っていたけれど、
これはこれでアリだと思う様になってきた。
0766名無しさん@お腹いっぱい。2012/01/17(火) 21:44:16.70
>>765
LaTeX を使うなら他のエディタを選択することもできただろうに。
0767名無しさん@お腹いっぱい。2012/01/17(火) 22:16:48.10
Emacsだけで色々完結するってのも惹かれた点。
しかしGoogle DocsやEvernoteなんかまで編集できるとは思わなかった。
0768名無しさん@お腹いっぱい。2012/01/17(火) 22:21:42.98
>>762
でもブラインドタッチしてる以上あんまり色かわっても意味ないな。

無効なキーを押すと電流が走るとかなら教育効果があるかもしれん。
0769名無しさん@お腹いっぱい。2012/01/17(火) 22:22:11.64
>>767
今ならまだ間に合う。引き返せ。
わりとマジで。
0770名無しさん@お腹いっぱい。2012/01/17(火) 22:26:38.41
>>769
後悔してる理由教えて
0771名無しさん@お腹いっぱい。2012/01/17(火) 22:28:11.82
>>769
後悔してる理由教えて
0772名無しさん@お腹いっぱい。2012/01/17(火) 22:39:33.15
呪いが解けなくなるよ
0773名無しさん@お腹いっぱい。2012/01/18(水) 01:28:50.52
>>739-744
たくさんの人に答えていただき、ありがどうございます。
けど、結局どう書くのがいいのかは、よみとれませんでした。

・string-joinよりconcatのほうがいいの?
・loopとかつかったほうがいいの?
・for i from 0 to ... とか初めて見たけど、これって普通に使われているの?

もうちょっと、EmacsLisp初心者向けにお願いしたいんですが、だめでしょうか。
0774名無しさん@お腹いっぱい。2012/01/18(水) 02:47:01.89
どっから持って来たんだ、string-join って
どうせ中身は mapconcat なんだろうけど
0775名無しさん@お腹いっぱい。2012/01/18(水) 02:48:56.76
半ページスクロールってできないっすか?
0776名無しさん@お腹いっぱい。2012/01/18(水) 08:52:46.80
>>773
> ・string-joinよりconcatのほうがいいの?

・mapconcat は文字列のリストに作用するし、concat は char のリストに作
用すると覚えておけ。apply 使えるようになれば違いはほとんどない。

> ・loopとかつかったほうがいいの?

とりあえず使うな。while と mapcar を覚えろ。

> ・for i from 0 to ... とか初めて見たけど、これって普通に使われているの?

はい。loop に狂ってる連中は使う。ほとんどが上級者だな。


ここで質問する前に他の人のコードをひたすら読め。
elisp以前にプログラマの基本だ。
0777名無しさん@お腹いっぱい。2012/01/18(水) 10:08:52.24
cl系使うのは抵抗あるな。
0778名無しさん@お腹いっぱい。2012/01/18(水) 12:35:55.81
るびききの書いたelispのソースを見て気づいたんだけど
日付と履歴情報が自動的に更新されている気がする
たとえば http://www.emacswiki.org/emacs/download/auto-install.el
日付の自動更新はtime-stamp.elでできるけど
履歴情報(changelog)の自動更新はどうやるのだろう
0779名無しさん@お腹いっぱい。2012/01/18(水) 16:24:31.76
これバージョン管理が勝手に入れるやつじゃないの?
elispファイルに履歴なんて書いても誰もみないから分離してほしいよな。
githubにでもリポジトリ公開すればいいのに。
0780名無しさん@お腹いっぱい。2012/01/18(水) 16:31:22.63
Change log:のところにChangeLogを挿入してるんじゃないの?
まあChangeLogはふつう別ファイルだから何かしら細工していると思うが
$Id: の部分も別ファイルのChangeLogを挿入しているだけかと
0781名無しさん@お腹いっぱい。2012/01/18(水) 17:06:37.54
なんで意固地になって読みづらいchangelogを挿入するのだろうか。
0782 忍法帖【Lv=38,xxxPT】 2012/01/18(水) 17:12:34.07
>>776
> とりあえず使うな。while と mapcar を覚えろ。

mapcもね
0783名無しさん@お腹いっぱい。2012/01/18(水) 18:12:11.63
DAdams病
0784名無しさん@お腹いっぱい。2012/01/18(水) 18:42:21.52
remove-if とか find-if が便利すぎて loop 覚える気がしない
0785名無しさん@お腹いっぱい。2012/01/18(水) 20:53:48.69
cl の関数を使っちゃってるかどうか検査する方法って何があるかな
コンパイルするしかない?
0786名無しさん@お腹いっぱい。2012/01/18(水) 20:59:27.45
elintで検出できたっけ?
0787名無しさん@お腹いっぱい。2012/01/18(水) 22:51:29.37
検出は知らんけどhighlight-clで目視できるようにはしてる
0788名無しさん@お腹いっぱい。2012/01/19(木) 08:03:24.33
yasnippet が堂々と (require 'cl) しているのを見て
なんかもうどうでもよくなった
0789名無しさん@お腹いっぱい。2012/01/19(木) 08:36:10.64
本体に取り込んでやるからその汚い(require 'cl)をどうにかしろ
とか言われない限り取り除く気は無い
0790名無しさん@お腹いっぱい。2012/01/19(木) 16:08:28.58
viのmコマンドに相当するのは、emacsでは何になりますか。
やりたいことは、現在のポジションを短い名前付きで覚えておき、あとからその名前を使ってジャンプすることです。
emacsを終了しても覚えておかなくていいです。
0791名無しさん@お腹いっぱい。2012/01/19(木) 16:12:47.56
C-x r SPC で覚えて C-x r j でジャンプ。
0792名無しさん@お腹いっぱい。2012/01/19(木) 17:28:51.63
>>791
ありがとうございます。
0793名無しさん@お腹いっぱい。2012/01/19(木) 21:41:24.31
>>640
キツいhookだなぁ。
0794名無しさん@お腹いっぱい。2012/01/19(木) 22:08:53.23
リージョンを指定して、その範囲内で正規表現にマッチしたものを集めてくる関数はどうやって書きますか。
Rubyで書くとこんな感じです。

arr = []
region.each_line do |line|
 if line =~ regexp
  arr << $1
 end
end

リージョンを受け取るには (interactive "r") を指定するらしいところまではわかりましたが、
その先がさっぱりわかりません。だれか助けて。

(defun regexp-collect-matched-in-region (beg, end)
(interactive "r")
;; どう書けばいいの?
)
0795名無しさん@お腹いっぱい。2012/01/19(木) 22:28:30.59
ものっそ丸投げだなw
リージョンの開始位置までポイントを進めて、
リージョンの終了位置を検索の境界に指定して検索を進めればいい。

goto-char、re-search-forward と match-string とかを describe-function しなさい。
save-restriction とか save-excursion、save-match-data とかもぐぐるといいかもね。

単純に操作としてやりたいだけなら keep-lines とかはどうかね。
0796名無しさん@お腹いっぱい。2012/01/19(木) 22:52:46.90
>>796
いいから解答教えろよ役にたたねえな
0797名無しさん@お腹いっぱい。2012/01/19(木) 22:56:09.09
汚い無限再帰だなあ
0798名無しさん@お腹いっぱい。2012/01/20(金) 00:07:41.12
>>795
ありがとうございます。
こんなかんじになりました。
(defun regexp-collect-matched-in-region (regexp index beg end)
(let ((list '()))
(save-excursion
(goto-char beg)
(while (re-search-forward regexp end t)
(setq list (cons (match-string index) list))))
(reverse list)))
どうでしょうか?

なお796は別人ですので無視してください。
0799名無しさん@お腹いっぱい。2012/01/20(金) 00:11:48.82
やるじゃん
listって変数名は関数のlistとかぶってるから別の方がいいかも。特に動作上の弊害はないんだけど。
リストへの追加は push でもいいかもね。
0800名無しさん@お腹いっぱい。2012/01/20(金) 00:20:11.57
listの書き換えか
よく見るのはlis か lst かな
0801名無しさん@お腹いっぱい。2012/01/20(金) 00:55:32.98
どうでもよすぎるつっこみおつかれさん。
0802名無しさん@お腹いっぱい。2012/01/20(金) 02:47:45.08
引数はむしろlistの方がいいな。
eldocとかで不必要におかしな名前で出てくるのは間が抜けた感じ。
0803名無しさん@お腹いっぱい。2012/01/20(金) 08:31:17.14
>>798
reverse を nreverse にする
そもそも (goto-char end) + (re-search-backward ...) を使うと、 reverse がいらなくなる

loop 大好き
(save-excursion
    (goto-char beg)
    (loop while (re-search-forward regexp end t)
          collect (match-string index)))
0804名無しさん@お腹いっぱい。2012/01/20(金) 08:40:02.69
>>803
> そもそも (goto-char end) + (re-search-backward ...) を使うと、
> reverse がいらなくなる

これやると正規表現の量指定子はどういう挙動をするの?
0805名無しさん@お腹いっぱい。2012/01/20(金) 11:18:01.36
やっぱりloopは神だった
0806名無しさん@お腹いっぱい。2012/01/20(金) 12:17:24.19
http://blog.kiftwi.net/2011/12/13/emacs%E3%81%AEjs2-mode%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88%E3%82%92%E6%AD%A3%E3%81%99/
これのインデントの関数の再設定を見て疑問に思ったのですが例えば
(add-hook 'text-mode-hook
(lambda ()
(setq indent-line-function (lambda () (insert "  ")))))
このように書くのと、
(add-hook 'text-mode-hook
(lambda ()
(set (make-local-variable 'indent-line-function) (lambda () (insert "  ")))))
と書くのでは、一つ目の方ではtext-mode-hook以外にも適用されてしまうと
理解しているのですが、これでいいでしょうか

それと、add-hook で他のモードに影響させないバッファローカルな関数を定義することは可能でしょうか
(add-hook 'input-method-activate-hook
(lambda() (set-cursor-color "yellow")))
この設定をelispモードのバッファにのみ適用させたいです
0807名無しさん@お腹いっぱい。2012/01/20(金) 12:22:38.49
>>803 はたぶん意味を理解していない。
0808名無しさん@お腹いっぱい。2012/01/20(金) 12:28:15.44
>>806
> と書くのでは、一つ目の方ではtext-mode-hook以外にも適用されてしまうと
text-mode-hook が実行? されるバッファ以外にもだけれど、合ってる。

(add-hook 'emacs-lisp-mode-hook
         (lambda ()
         (add-hook 'input-method-activate-hook (lambda() (set-cursor-color "yellow")) nil 'local)))
0809名無しさん@お腹いっぱい。2012/01/20(金) 13:20:47.87
>>808
ありがとうございます。その例とadd-hookのdocを見て理解できました。
0810名無しさん@お腹いっぱい。2012/01/20(金) 17:42:04.36
loop きもすぎる
0811名無しさん@お腹いっぱい。2012/01/20(金) 18:14:36.03
reddit にでてたけど、Emacs にも Achievement System あったら楽しそうだな。
http://www.reddit.com/r/emacs/comments/ook6a/does_something_like_this_exist_for_emacs/
0812名無しさん@お腹いっぱい。2012/01/21(土) 00:58:51.83
横レスだが>>808でインデントが整って見えるのは何故だろう
2chでは連続した空白スペースが省略されると思うんだが
0813名無しさん@お腹いっぱい。2012/01/21(土) 01:17:52.31
&nbsp; == &#160; != &#32;
08148062012/01/21(土) 01:39:34.48
set-face-foregroundの色やset-face-bold-pの有効・無効を
特定のモードのについてのみ変更できますか?
0815名無しさん@お腹いっぱい。2012/01/21(土) 01:56:08.64
>>813
なるほどnbspですか
2ちゃんブラウザからスレを開いてコピペすると確かにそれがありました
0816名無しさん@お腹いっぱい。2012/01/21(土) 02:11:56.20
>>814
出来ない。
08178062012/01/21(土) 02:14:14.19
>>816
ありがとうございます。
いろいろやってみましたが設定できなかったのでどこか間違っているのか
迷っていました
0818名無しさん@お腹いっぱい。2012/01/21(土) 14:41:33.95
Emacsで、パターンに一致した行を見えなくすることはできますか。
(削除じゃなくて)
たとえばソースコードで「//」で始まる行だけを一時的に隠したいとか、
「<!ーー ーー>」の行を隠したいとか。
自分で指定したパターンで隠してくれるのを望みます。
あと、行数もつけてくれたら最高。

10: foo
14: bar   ← 11行目から13行目までが隠されていることがわかる
15: baz
0819名無しさん@お腹いっぱい。2012/01/21(土) 15:02:20.11
hideshow は?
隠す部分の開始パターンと終了パターンが指定出来るよ。しかもEmacsに標準でついてくる。
describe-function hs-minor-mode ね。
あと、linum-mode で行表示しててもちゃんと隠された行はスキップされる。


0820名無しさん@お腹いっぱい。2012/01/21(土) 15:03:38.80
ただ、隠したり表示したりのキーバインドが結構押しづらいから
自分で使いたい部分だけバインドしなおしたほうが便利だとは思う。

自分は表示/非表示切り替えの hs-toggle-hiding だけ C-c C-SPC にバインドしなおして
それだけ使ってる。
0821名無しさん@お腹いっぱい。2012/01/21(土) 15:28:21.01
>>819-828
ありがとうございます。ためしてみます。
0822名無しさん@お腹いっぱい。2012/01/21(土) 23:21:55.04
emacs lisp テクニックバイブルの36ページに入力補完として
completion-at-point(M-tab)が紹介されていますが
anythingを導入したらその機能が置き換えられてしまいました
調べてみたらanything-complete.elのanything-lisp-complete-symbol-partial-matchとなったようです

具体的には入力補完の例として本で説明されている
bu-f-naでbuffer-file-nameを補完したいです
そこでM-tabだけはcompletion-at-pointの機能を復活させて
それ以外はanything-completeを利用したいのですが
どうすればよいでしょうか
0823名無しさん@お腹いっぱい。2012/01/21(土) 23:23:15.56
著者に聞きなさい。
0824名無しさん@お腹いっぱい。2012/01/22(日) 10:34:28.62
anything を使ってないから詳しくはわからんけど、
anything-complete の中で define-key してるキーマップ名を探して
(define-key キーマップ名 (kbd "<M-TAB>") nil) とでもして機能を殺せばいい。
0825名無しさん@お腹いっぱい。2012/01/23(月) 21:19:01.13
elcってバージョン間の互換性薄かったりするけど、
複数バージョンの emacs 使ってる人は ~/.emacs.d 以下の elc ファイルってどうやって共有させてるの?
0826名無しさん@お腹いっぱい。2012/01/23(月) 21:44:20.39
そもそもバイトコンパイルほとんどしてない。
というか互換性薄かったっけ?
暗号系のやつは遅いので仕方ないからコンパイルしてるけど互換性で問題になっ
たことない。
0827名無しさん@お腹いっぱい。2012/01/23(月) 21:48:01.40
バージョン間の違いを吸収するときは
バージョンごとに違うディレクトリを掘って、

~/.emacs.d/22
~/.emacs.d/23

それぞれに el ファイルとか elc 放り込んでる。



(setq load-path (cons (format "~/.emacs.d/%s" emacs-major-version) load-path))

みたいなことをしてる。
0828名無しさん@お腹いっぱい。2012/01/23(月) 21:59:21.84
軽くぐぐってみると emacs19とemacs20で非互換だったとか
Meadowの1系と2系で非互換だったとかそんなぐらいだなぁ。
今emacs24でコンパイルしたのをemacs23で読み込ませても特にエラーにはならなかった。
■ このスレッドは過去ログ倉庫に格納されています