トップページunix
1001コメント263KB

Emacs Part 41

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2012/09/07(金) 18:10:22.94
前スレ

Emacs Part 40
http://toro.2ch.net/test/read.cgi/unix/1328958449/
0130名無しさん@お腹いっぱい。2012/09/21(金) 15:47:18.87
bufferなどの疑似ベクタのオブジェクトはLispオブジェクトだけじゃなくて
C言語レベルの情報ももっている。
それをシリアライズする方法は存在しない。
ましてや#<buffer *scratch*>から復元するのは無理。

でも、もしかして"#<buffer *scratch*>"という文字列から*scratch*バッファーを
得たいなら、string-matchでも使って文字列"*scratch*"を取り出して(get-buffer "*scratch*")
0131名無しさん@お腹いっぱい。2012/09/21(金) 15:49:11.85
>>127
emacs用のはわからないけど
Big5 GB2312 converter とかでググるとちょこちょこ出てくるね。
単純に対応する文字の置換だけでよさそうな感じだし↓とか対応文字の一覧表ダウンロード出来るみたいだし
自力で書いちゃうのもありかもしれない
http://www.mandarintools.com/zhcode.html
0132名無しさん@お腹いっぱい。2012/09/21(金) 17:19:56.26
>>129
>>130
どうもありがとうございます。
他のやり方を考えてみます。
0133名無しさん@お腹いっぱい。2012/09/21(金) 18:49:37.72
ていうか疑似ベクタとかいってみたかっただけじゃないの?
試しもしてないくせにいい加減なこといって
初心者おいはらうのやめなよ。

そんなだから若者がEmacs離れするんだよ。
0134名無しさん@お腹いっぱい。2012/09/21(金) 20:32:15.00
試さなくてもバッファの構造とシリアライズできない事はソース読んで知ってるから。
0135名無しさん@お腹いっぱい。2012/09/21(金) 20:35:42.42
触れるな
0136名無しさん@お腹いっぱい。2012/09/22(土) 17:03:02.76
シリアライズしたければコードを書き変えればいいじゃない?
0137名無しさん@お腹いっぱい。2012/09/23(日) 15:59:15.65
思ったんだが、Emacs 上でオブジェクトを書きだしたら
それを Emacs-lisp に変換して .el にするモードを作っておいて
一旦 Emacs 終了、状態を復元して再起動(session.el のように)
というのをユーザーが気付かない速度で出来れば
理論上は実現できるんじゃないか?
0138名無しさん@お腹いっぱい。2012/09/23(日) 18:07:56.89
はいはい、やって見せてよ。
> それを Emacs-lisp に変換して .el にするモードを作っておいて
ここまででいいからさ。
0139名無しさん@お腹いっぱい。2012/09/23(日) 21:07:58.39
>>122

(defadvice message (after my-ad--message (format-string &rest args) activate)
(let (deactivate-mark)
(with-current-buffer " *Echo Area 0*"
(facemenu-add-face '((:height 1.5)) (point-min) (point-max)))))

:height の値を float 型で指定すれば、デフォルトのフォントサイズに対する
倍率を設定できますよ。

advice を利用しているので、ソースファイル (C 言語) に書かれているような、
ネイティブでの呼び出しには対応できないです。

他にもやり方はありそうですが、とりあえず的に利用はできます。

(ad-unadvise 'message)

こちらは、advice をやめる場合です。
01401392012/09/23(日) 22:13:54.78
>>122

>>139 のやり方よりも、むしろ、 >>122 に書いてある face-remap を活用する形で、

(switch-to-buffer " *Echo Area 0*")

として、そこで C-x C-+ とかすれば、echo 領域のフォントサイズの調整がで
きますね。(試したらできなので、正直、驚いたw)

あと、face である minibuffer-prompt とかを再定義するとかすれば、うまく行
きそうですかね。

本当は、ソースコードレベルで修正するのが、完全なやり方でしょうけどね。
01411392012/09/23(日) 22:15:08.98
試したらできなので => 試したらできたので
0142名無しさん@お腹いっぱい。2012/09/23(日) 22:57:41.53
バッファ内の文字列置換で
00を<em>00</em>に、
11を<strong>11</strong>に、
というように、検索文字列を置換時に参照して一致する箇所全てを置換する、
非対話型の関数はありますか。
普段は対話型のstring-replaceを使っているのですが
(interactive)を使った関数として定義してしまった方がよいと考えましたので。
0143名無しさん@お腹いっぱい。2012/09/23(日) 23:11:40.02
非 interactive な一括置換関数ってのはない。
replace-string のヘルプを読むといい。
てか日本語でおk
0144名無しさん@お腹いっぱい。2012/09/23(日) 23:14:22.98
Linux上だと編集中はマウスカーソルが自動で消えるのに、NTEmacs24.2では消えないけど
何か方法があったら教えてください。Meadowでは設定があった気がする。
0145名無しさん@お腹いっぱい。2012/09/23(日) 23:31:57.46
Meadow は独自にそういう機能を組み込んでいただけで Emacs との互換性はないよ。
NTEmacs の場合は mouse-avoidance-mode で我慢するしかないみたい。
01461422012/09/24(月) 00:27:48.89
すみませんでした。replace-stringを見て解決しました。
0147名無しさん@お腹いっぱい。2012/09/24(月) 00:47:03.35
>>145
それは残念。mouse-avoidance-modeを設定してみるよ。
01481422012/09/24(月) 01:44:08.27
バッファ1行目をバッファの最終行に移したいです
カーソルの移動は分かるのですが、肝心のコピペ部分が分かりません
(goto-char (point-min))
(push-mark)
(end-of-line)
(kill-line)
(goto-char (point-max))
(yank)
よろしくお願いします
0149名無しさん@お腹いっぱい。2012/09/24(月) 02:12:19.95
キーボードマクロじゃだめなん?
プログラミングしなくても
name-last-kbd-macro と insert-kbd-macro で幸せになれる予感
0150名無しさん@お腹いっぱい。2012/09/24(月) 03:02:19.04
>>148
基本的に、 (push-mark) とかは対話的な操作専用。
非対話的にやるなら、直接 buffer-substring で文字列を取得して insert する。

(save-excursion
(goto-char (point-min))
(forward-line 1)
(let ((first-line (buffer-substring (point-min) (point))))
(delete-region (point-min) (point))
(goto-char (point-max))
(newline)
(insert first-line)))

こんな感じかな。
0151名無しさん@お腹いっぱい。2012/09/24(月) 04:45:17.69
お、Zenoが生きてる
0152名無しさん@お腹いっぱい。2012/09/24(月) 05:55:47.95
だから死ねつってんだろ
0153名無しさん@お腹いっぱい。2012/09/24(月) 06:56:06.05
>>152 も実は Zeno
0154名無しさん@お腹いっぱい。2012/09/24(月) 07:39:53.75
>>151-153が全部Zeno
0155名無しさん@お腹いっぱい。2012/09/24(月) 13:14:23.35
キチガイってのは季節の変わり目に興奮して活発になる
0156名無しさん@お腹いっぱい。2012/09/24(月) 19:40:19.90
Eamcs 24.2 にしてから、migemoが検索はしてくれなくなりました。
ハイライトはしてくれるんですが…

24.2を使っている人で、同じ症状になった人いません?
0157名無しさん@お腹いっぱい。2012/09/25(火) 00:14:57.71
>>150
ありがとうございます。よくわかりました。
0158名無しさん@お腹いっぱい。2012/09/25(火) 09:30:57.00
編集を想定していないような読み取り専用になってるバッファで
self-insert-command をしたときに Buffer is read-only: ... がでるのがうっとおしいのですが
抑制することはできないんでしょうか?
0159名無しさん@お腹いっぱい。2012/09/25(火) 20:49:29.36
anythingのキーバインドを変えたいのですが、うまくいきません。
C-oをC-lにするには、以下ではだめでしょうか? ネットでは以下のように紹介しているとろが多々あるのですが..。
(define-key anything-map "\C-o" nil)
(define-key anything-map "\C-l" 'anything-next-source)
0160名無しさん@お腹いっぱい。2012/09/25(火) 22:44:34.84
{を打ち込むと勝手に}が入ります><

emacsは24.2で、*.csファイル用に
http://www.emacswiki.org/emacs/csharp-mode.el
を使っています。どうやったらこの邪魔な機能をオフにできますか?
0161名無しさん@お腹いっぱい。2012/09/25(火) 22:55:09.36
C-q { とか。
01621602012/09/25(火) 23:02:01.53
なんとか自己解決したんでメモ。
よく分からずにテケトーに対処したので、まずい点があったら教えてください。

今までの設定をいじりたくないから.emacsの最後の最後に以下を追加。
(add-hook 'cshar-mode-hook
'(lamda() (local-set-key (kbd "{") 'nil)
))

>>161
クオートってことですかね?
0163名無しさん@お腹いっぱい。2012/09/25(火) 23:03:34.47
cshar→csharp
lamda→lambda
0164名無しさん@お腹いっぱい。2012/09/26(水) 12:41:40.25
あるキー入力を示す文字に ctrl や shift、meta 等の修飾キーをつけたり外したりするちゃんとしたやり方ってあるんでしょうか?
例えば (add-shift-prefix ?n) => ?N とか
(add-ctrl-prefix ?n) => ?\C-n とか
(remove-ctrl-prefix ?\C-\M-a) => ?\M-a みたいな。
0165名無しさん@お腹いっぱい。2012/09/26(水) 22:43:24.28
微妙に自己解決しました
キーバインド系の関数のみ、 [(control ?a)] みたいなのを受け付けるとのことだったので
以下のようにして解決させました
(defun add-ctrl-prefix (c)
`(control ,c))
0166名無しさん@お腹いっぱい。2012/09/28(金) 07:03:51.09
数引数(C-u)を与えると、挙動が変わるコマンドがあります。たとえば、shellなど。
このようなコマンドを数引数を与えた形でelispに書いてコールしたいのですが、
どのように書けばいいでしょうか?
0167名無しさん@お腹いっぱい。2012/09/28(金) 07:21:05.72
>>166
(interactive)のヘルプに色々書いてあるよ
0168名無しさん@お腹いっぱい。2012/09/28(金) 07:21:41.21
マニュアル読めよ
ヘルプすら見てないだろ
0169名無しさん@お腹いっぱい。2012/09/28(金) 07:45:41.89
shellのような挙動のコマンドを作りたいということでなくて、そのようなコマンド
をC-uつきでelispからコールするように書きたいということなんだけど、簡単な
ことなんでしょうか? ヘルプも読んでいますが、方法を探せていません。
letでcurrent-prefix-argに値を設定してみたけど、だめだった。
0170名無しさん@お腹いっぱい。2012/09/28(金) 08:21:55.55
emacs lispのinteractiveの仕組みがわかってて気がついてないのか、
そもそもinteractiveが何なのか知らないのかどっちかね?
0171名無しさん@お腹いっぱい。2012/09/28(金) 08:27:12.15
手がかりなんぞ要らんからサンプル書いて教えろっていうガキだろ
ほっとけ
0172名無しさん@お腹いっぱい。2012/09/28(金) 08:54:05.70
デスクトップPCでEmacsが普及するわけないと思った時。
0173名無しさん@お腹いっぱい。2012/09/28(金) 09:34:42.94
というか別に普及なんかして欲しいとも思わんしなあ
使いたい人がひっそり使ってるっていう現状で充分だよね
0174名無しさん@お腹いっぱい。2012/09/28(金) 09:43:33.89
>>166
こういう事をやりたいのか?

(let ((current-prefix-arg '(4)))
(call-interactively 'shell))
0175名無しさん@お腹いっぱい。2012/09/28(金) 20:24:06.29
cond && cond2という文があった時
   ↑この&の部分でM-d(kill-word)するとcond2まで消えてしまうのどうにかなりませんか?
&&だけ消えて欲しいのですが。
0176名無しさん@お腹いっぱい。2012/09/28(金) 20:29:28.12
そのレスする間にC-dを2回押せばいい
0177名無しさん@お腹いっぱい。2012/09/28(金) 20:54:35.99
C-h sしたところで力尽きた
0178名無しさん@お腹いっぱい。2012/09/28(金) 21:32:24.41
syntax table 弄るしかないのかめんどくさいね
0179名無しさん@お腹いっぱい。2012/09/28(金) 21:38:30.13
自分で好きに関数書いてM-dにあててもいいのよ
0180名無しさん@お腹いっぱい。2012/09/28(金) 21:40:28.20
word 単位の処理って微妙に挙動が予測出来ない部分があるから
確かに空白区切りでの処理に置き換えちゃうとかも悪くないかもね。
0181名無しさん@お腹いっぱい。2012/09/28(金) 21:45:35.75
(modify-syntax-entry ?& "w") すれば & も単語とみなされるようになる。
M-d の時だけ書き換えたいのであれば kill-word に with-syntax-table を使った advice でも付けてやるとかどうだろね。
01821752012/09/28(金) 22:30:16.04
みなさまレスありがとうございます
シンタックステーブルと独自関数を作って試してみました

(defvar my-syntax-table
(let ((table (make-syntax-table)))
(modify-syntax-entry ?& "w")
table))

(defun my-kill-word ()
(interactive)
(with-syntax-table my-syntax-table
(call-interactively 'kill-word)))

(global-set-key (kbd "M-d") 'my-kill-word)

として
hoge && hoge
   ↑ここでM-dしてみましたがhogeまで削除されてしまいました
何が足りないのでしょうか?
0183名無しさん@お腹いっぱい。2012/09/28(金) 22:35:05.79
modify-syntax-entry を describe-function してみるとわかるけど
第二匹数を省略すると現在の syntax-table を編集しちゃうよ。
ちゃんと let で作った table を指定してやらないと意味が無い。
0184名無しさん@お腹いっぱい。2012/09/28(金) 22:36:44.87
第二じゃなくて第三ね。
0185名無しさん@お腹いっぱい。2012/09/28(金) 22:42:39.30
あ、なるほど!確かに指定しないと、tableを変更すべきだとmodify-syntax-entryしるよしもありませんね。
即レス感謝!うまくいきました。

;; kill-wordで&&を削除しようとすると次の単語まで削除されてしまうが、それを抑制する
(defvar my-syntax-table
(let ((table (make-syntax-table)))
(modify-syntax-entry ?& "w" table)
table))

(defun my-kill-word ()
(interactive)
(with-syntax-table my-syntax-table
(call-interactively 'kill-word)))

(global-set-key (kbd "C-t") 'my-kill-word)
0186名無しさん@お腹いっぱい。2012/09/29(土) 00:37:51.80
>>174
call-interactivelyを使うんですね。ありがとうございました。
0187名無しさん@お腹いっぱい。2012/09/29(土) 01:34:21.87
Mac環境でemacsを使用しているのですが
emacs起動直後にフレームが2つになってしまいます。

1つ目のフレームは、編集対象のファイルの中身で
2つ目のフレームは、ヘルプ的な画面が出ています。

毎回ファイルを開いたあとに「C-x 1」でフレーム数を一つにしているのですが
最初からフレーム数を一つにするにはどうしたら良いでしょうか?
0188名無しさん@お腹いっぱい。2012/09/29(土) 08:58:14.59
C-x 1 で消えるならそれ多分 Emacs でいうところの window だと思う。
Emacs でいう frame ってのは OS でいうウィンドウのことね。

ヘルプ的な画面ってのはどんなのが表示されてるの?
設定ファイルに不具合があったりすると起動時に別 window にエラーが表示されたりするけど。
0189名無しさん@お腹いっぱい。2012/09/29(土) 09:41:48.19
>>188
すみません、frameじゃなくてwindowでしたか。
下のウィンドウに表示されてるのは以下の通りです。
ところどころにリンクが張ってあり、クリックできます。


Welcome to GNU Emacs, one component of the GNU operating system.
To quit a partially entered command, type Control-g.

Emacs Tutorial Learn basic keystroke commands (Emacs 入門ガイド)
Emacs Guided Tour Overview of Emacs features
View Emacs Manual View the Emacs manual using Info
Absence of Warranty GNU Emacs comes with ABSOLUTELY NO WARRANTY
Copying Conditions Conditions for redistributing and changing Emacs
Ordering Manuals Purchasing printed copies of manuals

This is GNU Emacs 22.3.1 (i386-apple-darwin9.8.0, Carbon Version 1.6.0)
of 2010-01-10 on gs674-seijiz.local
Copyright (C) 2008 Free Software Foundation, Inc.

If an Emacs session crashed recently, type Meta-x recover-session RET
to recover the files you were editing.
Dismiss this startup screen Never show it again.
0190名無しさん@お腹いっぱい。2012/09/29(土) 09:49:03.20
~/.emacs.d/init.el 等の設定ファイルに
(setq inhibit-startup-screen t) あたりを書き込めばいい。
0191名無しさん@お腹いっぱい。2012/09/29(土) 10:12:07.38
>>175
その位置でC-dをポンポーンと打つのではだめなのか…。
M-d使う人にとってはそうなのかな。
0192名無しさん@お腹いっぱい。2012/09/29(土) 10:59:50.72
C-dでひとつずつ消すよりそりゃviのcwのように一発で消せるほうがいいよ。
0193名無しさん@お腹いっぱい。2012/09/29(土) 11:29:14.75
word 系や paragraph 系の操作って使わない人は殆ど使わないよね。削除どころか移動すらも。
なれると凄い便利なんだけどねえ。
0194名無しさん@お腹いっぱい。2012/09/29(土) 13:21:59.94
(global-set-key (kbd "C-M-h") 'backward-sexp)
(global-set-key (kbd "C-M-l") 'forward-sexp)
(global-set-key (kbd "C-M-d") 'kill-sexp)

こうやったらめちゃくちゃ使うようになった
0195名無しさん@お腹いっぱい。2012/09/29(土) 13:25:01.03
>>191
cond && cond2からcond &&を消してcond2だけにしたい時word-kill2回でポンポーンと消したくて。
0196名無しさん@お腹いっぱい。2012/09/29(土) 13:29:28.44
そういう時って C-d 連打する人と C-SPC して M-f して微調整して C-w する人のパターンは想像つくな
0197名無しさん@お腹いっぱい。2012/09/29(土) 13:42:28.88
オレはそういう場合はM-f M-f M-b M-delだな。
0198名無しさん@お腹いっぱい。2012/09/29(土) 13:44:09.79
>>197
それじゃ && が消えなくね?
0199名無しさん@お腹いっぱい。2012/09/29(土) 15:33:31.43
消えるよ。
0200名無しさん@お腹いっぱい。2012/09/29(土) 15:46:21.76
M-d じゃなく M-del か
C-Backspace でもいけるんだな。これ使ったことなかったわ。
0201名無しさん@お腹いっぱい。2012/09/29(土) 16:37:34.02
viのテキストオブジェクトは便利だよな
emacsだとthingがある
0202名無しさん@お腹いっぱい。2012/09/29(土) 16:50:06.90
スレ違いだけどviにちょっとだけ興味あって、
たまに使ってみたりするものの、結局、ZZしか覚えてないw

あと、diredに相当するもんあるんだろうか?
0203名無しさん@お腹いっぱい。2012/09/29(土) 17:15:42.65
vimfiler ってのがあるらしい。
わりとなんでも出来る感じにはなってるみたい。
0204名無しさん@お腹いっぱい。2012/09/29(土) 17:20:15.52
( ´・∀・`)へー
割と何でもできるんなら本格的に試してみてもいいのかも…。
0205名無しさん@お腹いっぱい。2012/09/29(土) 18:22:45.48
M-dC-u4d かなあ
0206名無しさん@お腹いっぱい。2012/09/29(土) 18:30:04.75
結局、すべてのエディタは極めれば Emacs に等しくなるわけだから
年々 Emacs である必要がなくなるのは仕方ない。
0207名無しさん@お腹いっぱい。2012/09/29(土) 18:33:42.42
emacsは機能は充分だからもう少し軽くなったら嬉しい
といってもハードの進化が早いから問題ないか
0208名無しさん@お腹いっぱい。2012/09/29(土) 18:37:07.61
emacsが重いんじゃない
お前のその設定が重いんだ
0209名無しさん@お腹いっぱい。2012/09/29(土) 19:35:53.08
詰めviというものがあるらしい
最小キーストロークで効率的な編集をするんだと

詰めemacsはよ!お前らが普段使ってる自作elispなんでも使用可みたいな事したら面白そうw
0210名無しさん@お腹いっぱい。2012/09/29(土) 19:37:31.04
■ 問題 1.
   1: // 演算子の前後に空白を入れる
   2: for(int ix=0; ix<100; ++ix)
   3: sum+=value[ix];

上記文書を下記の様に修正しなさい。
   1: // 演算子の前後に空白を入れる
   2: for(int ix = 0; ix < 100; ++ix)
   3: sum += value[ix];

出展 ttp://vivi.dyndns.org/vivi/tsume/qa.phtml?n=1&act=ans#ans
0211名無しさん@お腹いっぱい。2012/09/29(土) 19:40:30.42
http://nullprogram.com/blog/2012/09/14/
これは流石にちょっと重かった。emacs内でフラクタル画像生成表示。
0212名無しさん@お腹いっぱい。2012/09/29(土) 19:41:29.42
>>209
そりゃ自作elisp使用可にしちゃったら専用関数作ってワンキーで終わりになるだけじゃない・・・
0213名無しさん@お腹いっぱい。2012/09/29(土) 19:42:11.46
>>210
普通にカーソル移動させてスペーススペースやってる
0214名無しさん@お腹いっぱい。2012/09/29(土) 19:44:03.58
問題に対して毎回特化したelisp書いてきてワンキーで終了だがなにか?みたいな奴いたらそれはそれで面白いな
0215名無しさん@お腹いっぱい。2012/09/29(土) 19:45:47.01
むしろそれだったら問題解決用のスクリプトでコードゴルフの方がemacs向きかもしれない
0216名無しさん@お腹いっぱい。2012/09/30(日) 06:04:27.95
>>190
返信遅くなりました。
やってみたらできました、ありがとう!
0217名無しさん@お腹いっぱい。2012/09/30(日) 12:25:46.38
得意気にコードゴルフとかいう奴が一番信用ならない。

人として。
0218名無しさん@お腹いっぱい。2012/09/30(日) 12:44:04.95
>>217
それ少し分かるw
0219名無しさん@お腹いっぱい。2012/09/30(日) 14:24:29.69
>>210
perl なりなんなりでフィルタ書いて M-| だな。
0220名無しさん@お腹いっぱい。2012/09/30(日) 14:58:46.56
>>217
なんで?
0221名無しさん@お腹いっぱい。2012/09/30(日) 18:10:27.77
コードゴルフに限らず、つまらんバズワードを
得意気に使う奴はうすっぺらい感じはするな。

コードゴルフとか、うまいこと言ったった感を
前面に出してるのも洒落臭いし。
0222名無しさん@お腹いっぱい。2012/09/30(日) 18:14:41.16
一気に空気悪くなったなw
0223名無しさん@お腹いっぱい。2012/09/30(日) 18:16:31.83
コードパチンコ
0224名無しさん@お腹いっぱい。2012/09/30(日) 18:20:01.21
コードゴルフがバズワードでうまい事言った感を醸し出す単語かぁ
0225名無しさん@お腹いっぱい。2012/09/30(日) 18:21:59.53
コードウルフ……一気にかっこよくなったぞ。
0226名無しさん@お腹いっぱい。2012/09/30(日) 18:26:05.83
っていうか、コードゴルフの定義ってプログラミングの定義そのものだからなあ。
わざわざ言うような事か?という感はある。
0227名無しさん@お腹いっぱい。2012/09/30(日) 18:43:58.41
コードは動けばどうでもいいわけだからゴルフからは遠いだろ
0228名無しさん@お腹いっぱい。2012/09/30(日) 18:55:37.68
>>227
は?

お前は3行で済むコードをわざわざ3億行にするのをプログラミングと呼ぶのか?
それはコード農業ではなかったか?
0229名無しさん@お腹いっぱい。2012/09/30(日) 18:58:33.80
普通に書けば簡単でそれなりの長さ(6行)を3行にしてドヤ顔してるのが気持ち悪いな
■ このスレッドは過去ログ倉庫に格納されています