トップページ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/
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行にしてドヤ顔してるのが気持ち悪いな
0230名無しさん@お腹いっぱい。2012/09/30(日) 19:05:02.04
普通のプログラミングは可読性と簡潔性の両立を目指すもので
コードゴルフはひたすら短くするものって事か。
その手の癖をつけた奴って現場では良い意味での
冗長性度外視したりして使えなさそうなんだが。。。
0231名無しさん@お腹いっぱい。2012/09/30(日) 19:14:43.47
この手の冗長性の無さは日本人のすばらしい点(超誠実)でもあり融通の利かないところだと思う
もう少し柔軟であって欲しい
0232名無しさん@お腹いっぱい。2012/09/30(日) 19:17:13.80
いや、詰めviの話がでたからコードゴルフを出しただけで
なんで使える使えないの話になるんだ・・?
0233名無しさん@お腹いっぱい。2012/09/30(日) 19:21:07.66
>>226
それ違うよ。出来るだけ短く書くことで勝負するわけだから一般的によくない書き方とかばんばん使う一種のゲームだぞ。
0234名無しさん@お腹いっぱい。2012/09/30(日) 19:24:56.53
if(1)while(i--)printf(">>%d-%d スレ違い",217,217+i);

って事?
0235名無しさん@お腹いっぱい。2012/09/30(日) 19:27:17.50
いやちゃんと動くコード書いてくださいよ217さん
0236名無しさん@お腹いっぱい。2012/09/30(日) 19:30:45.51
現物見てこいよ
癖とか冗長性とかそんな生半可なレベルじゃないから
0237名無しさん@お腹いっぱい。2012/09/30(日) 19:33:53.10
むしろすぐにバズワードとかいうバズワードを持ち出す奴こそ信用ならん
0238名無しさん@お腹いっぱい。2012/09/30(日) 19:41:29.88
int START=217;for(i=0;i<this.resNumber-START;i++)puts(">>%d スレ違い",START+i);

完璧なコードとはこういう事をいう。
0239名無しさん@お腹いっぱい。2012/09/30(日) 19:42:57.46
変数に大文字w
0240名無しさん@お腹いっぱい。2012/09/30(日) 19:45:49.06
わいは猿や、コードゴルファー猿や!
0241名無しさん@お腹いっぱい。2012/09/30(日) 19:46:32.31
みんな結構微妙なコード書くのな
0242名無しさん@お腹いっぱい。2012/09/30(日) 20:03:53.14
res241->destroy();
0243名無しさん@お腹いっぱい。2012/09/30(日) 20:04:24.82
TWO == イラッつとするコーディングスタイル
http://kohada.2ch.net/test/read.cgi/prog/1338703896/
0244名無しさん@お腹いっぱい。2012/09/30(日) 22:10:11.77
>>238
すげえ、変数に大文字って。しかも puts にフォーマット文字列とか。
ちゃんと動くコードかいてくださいよ 217さん。
0245名無しさん@お腹いっぱい。2012/09/30(日) 22:19:47.41
>>238は一体何言語なんだろうな
0246名無しさん@お腹いっぱい。2012/09/30(日) 23:16:30.09
コードを否定する際には改善したコードの例示もまた必要ではないかと吾輩は思った

(defmacro for (data &rest body)
(let ((var (car data))
(start (cadr data))
(stop (caddr data))
(gstop (gensym)))
`(do ((,var ,start (1+ ,var))
(,gstop ,stop))
((> ,var ,gstop))
,@body) ))

(setq thread (make-hash-table))
(setf (gethash 'resNumber thread) 245)

(let ((start 217))
(for (i start (gethash 'resNumber thread))
(insert (format ">>%d スレ違い\n" i))))
0247名無しさん@お腹いっぱい。2012/10/01(月) 00:39:07.97
>>238 はレスをオブジェクト化しているところがミソなんだけど
このスレのレベルではそこには気付けず重箱の隅つつきが限界か。
レベル差は明らかになった形だけど、まあいいや。

スレ違いが続いたからもうこの話題はここで終わり。
これ以上続けると荒らしだからね。
0248名無しさん@お腹いっぱい。2012/10/01(月) 01:26:56.41
つづきはこっちで!

emascスレ付属総合隔離病棟スレ
http://toro.2ch.net/test/read.cgi/unix/1342582441/
0249名無しさん@お腹いっぱい。2012/10/01(月) 02:22:22.89
>>247
i が未定義な時点で終了
オブジェクトか?以前の問題だな
0250名無しさん@お腹いっぱい。2012/10/01(月) 10:33:36.23
#define zero 1
0251名無しさん@お腹いっぱい。2012/10/01(月) 10:44:00.50
オブジェクト化wwww
0252名無しさん@お腹いっぱい。2012/10/01(月) 10:51:08.37
今更オブジェクト指向でドヤ顔するのがEmacsユーザなんですかぁ
0253名無しさん@お腹いっぱい。2012/10/01(月) 11:17:04.36
どこからネタなのか分からず混乱している。
0254名無しさん@お腹いっぱい。2012/10/01(月) 11:19:32.04
スレ違いがメソッド化されていない時点で
0255名無しさん@お腹いっぱい。2012/10/01(月) 11:20:37.12
emacsスレなんだからeieioで書いて欲しかった
0256名無しさん@お腹いっぱい。2012/10/01(月) 11:22:10.96
まぁネタはこのくらいでやめとこう。
0257名無しさん@お腹いっぱい。2012/10/01(月) 16:07:51.14
(defmacro let1 (args &rest body)
`(let (,args) ,@body))

というマクロを書きました。これは
(let ((str "hoge"))
hoge
hoge)

(let1 (str "hoge")
hoge
hoge)
と書けるようにするものです。

うまく動くのですがインデントがletの場合と異なり
(let1 (str "hoge")
hoge
hoge)
となってしまいます。letの時の様なインデントがなされて欲しいのですが
オートインデントに情報を加えるにはどうすれば良いのでしょうか?
0258名無しさん@お腹いっぱい。2012/10/01(月) 16:09:24.75
半角スペースの置き換えを忘れてしまっていました。二重投稿失礼します。

(defmacro let1 (args &rest body)
  `(let (,args) ,@body))

というマクロを書きました。これは
(let ((str "hoge"))
  hoge
  hoge)

(let1 (str "hoge")
  hoge
  hoge)
と書けるようにするものです。

うまく動くのですがインデントがletの場合と異なり
(let1 (str "hoge")
        hoge
        hoge)
となってしまいます。letの時の様なインデントがなされて欲しいのですが
オートインデントに情報を加えるにはどうすれば良いのでしょうか?
0259名無しさん@お腹いっぱい。2012/10/01(月) 16:16:42.13
>>258
http://d.hatena.ne.jp/zknx/20091205/1259982042
02602582012/10/01(月) 16:25:01.12
>>259
即レス感謝です!結果
(defmacro let1 (args &rest body)
(declare (indent 1))
`(let (,args) ,@body))

で希望の動作をするようになりました。
indent 2や3にしてみると。あーこの挙動か、と楽しめました。
こんなお手軽な方法があったのですね。
ありがとうございました!
0261名無しさん@お腹いっぱい。2012/10/01(月) 19:32:38.49
かなりすごい!
http://blog.supermomonga.com/articles/emacs/my-imaginary-emacs-future.html
0262名無しさん@お腹いっぱい。2012/10/01(月) 20:36:01.76
eieioといえば他にもlunaとかいろいろオブジェクト指向化パッケージがあったような気がするんだけど
一向に普及しないね
0263名無しさん@お腹いっぱい。2012/10/01(月) 22:00:31.26
>>262
lunaってw3m shimbun くらいしか使われてないのかな。
情報を調べようと思っていつも苦労する。
0264名無しさん@お腹いっぱい。2012/10/01(月) 22:31:03.86
クロージャ入ったからeieioが書き直されるか
別で本命clos系パッケージが来るのを密かに待ってる
0265名無しさん@お腹いっぱい。2012/10/01(月) 23:27:58.79
>>261
書いてすらないものを宣伝しに来るとか
ゴミクズとしての第一歩を踏みだしちゃったな
0266名無しさん@お腹いっぱい。2012/10/01(月) 23:32:26.22
もう人生消したほうがいいレベル
0267名無しさん@お腹いっぱい。2012/10/02(火) 00:21:10.55
>>265
日本語でおk
0268名無しさん@お腹いっぱい。2012/10/02(火) 00:22:46.53
265+1 :名無しさん@お腹いっぱい。 [sage] :2012/10/01(月) 23:27:58.79
>>261
(実際にコードを)書いてすらないものを宣伝しに来るとか
ゴミクズとしての第一歩を踏みだしちゃったな
0269名無しさん@お腹いっぱい。2012/10/02(火) 00:28:19.37
そういえばいまのemacsの開発版ってブラウザ組み込めるんだっけ
markdownのレンダリング結果をemacsで綺麗に表示できたりすると夢がひろがりんぐ
0270名無しさん@お腹いっぱい。2012/10/02(火) 01:01:14.91
emacs24 で windows postgres9.2に

つながらない、、パスワードも聞かれんし どうなってるん?
0271名無しさん@お腹いっぱい。2012/10/02(火) 01:08:53.57
postgresがおまえのこと嫌いになったんだよ
それ以外に考えられない
0272名無しさん@お腹いっぱい。2012/10/02(火) 01:10:25.42
いや待て落ち着け
もしかしたらEmacsからも嫌われてるのでは?
0273名無しさん@お腹いっぱい。2012/10/02(火) 01:22:08.68
うーーーーん。違う環境ではできたんだよなぁ。。

sql-postgres で パスワードも聞かれたし、、
文字コードの問題かなぁ。。
0274名無しさん@お腹いっぱい。2012/10/02(火) 02:32:12.93
できたーーー。
windows localじゃあだめだけど

つなぎさきがlinux だったらできたーー 
0275名無しさん@お腹いっぱい。2012/10/02(火) 02:50:21.83
passwordを返すやり方が難しいな。。
■ このスレッドは過去ログ倉庫に格納されています