トップページunix
984コメント297KB

Emacs Part 46

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。2014/06/23(月) 02:42:14.91
語り合いましょう。

GNU Emacs - GNU Project - Free Software Foundation (FSF)
https://www.gnu.org/software/emacs/

EmacsWiki: サイトマップ
http://www.emacswiki.org/emacs/

前スレ
Emacs Part 45
http://peace.2ch.net/test/read.cgi/unix/1391839128/
0936名無しさん@お腹いっぱい。2014/12/04(木) 22:20:32.15
>>930
これもググったらどっかで見つけたんで既に試してる。でダメ。
0937名無しさん@お腹いっぱい。2014/12/04(木) 22:23:59.35
>>929
そうじゃなくて、sshを抜けてログイン元ホストのプロンプトに戻るときの話。
0938名無しさん@お腹いっぱい。2014/12/04(木) 22:27:24.88
defface するときに -rv で起動されてるかとか color モードかどうか条件付きで色を指定できますが、
set-face-attribute とかであとから属性変更する場合はどのように指定したらいいんでしょう?

(set-face-attribute 'default nil '(((class color) (background dark)) "gray97"))

等では無理でした
0939名無しさん@お腹いっぱい。2014/12/04(木) 22:27:45.29
>>935
ありがとうございます
emacsclient上でできました!
0940名無しさん@お腹いっぱい。2014/12/05(金) 00:27:25.91
質問です。

Emacs24で、emacs -nw でテーマを設定すると、ある種の記号を入力した時、
その記号の下に空行が表示されてしまうようです。

例)
(load-theme 'adwaita t) ;;たぶんどのテーマでもいい

記号はハート(白)U+2661 (♡) などSJISにないもの。
ハート (シンボル) - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%BC%E3%83%88_%28%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AB%29#.E7.AC.A6.E5.8F.B7.E4.BD.8D.E7.BD.AE

テーマを設定しない、以外の解決策はないでしょうか?

GNU Emacs 24.4.1 (x86_64-unknown-cygwin) of 2014-11-15 on desktop-new
GNU Emacs 24.3.1 (x86_64-redhat-linux-gnu, GTK+ Version 3.10.9) of 2014-09-30 on buildvm-10.phx2.fedoraproject.org
端末は minttyですが、たぶんPuTTYも同様と思います。
再現しなかったら申し訳ありません。
0941名無しさん@お腹いっぱい。2014/12/05(金) 00:42:30.87
変な件名のスパムメールが来るとwlのサマリの表示が崩れるのも同じ理由なのかな
"?" に置換して誤魔化してるけど
0942名無しさん@お腹いっぱい。2014/12/05(金) 06:31:44.91
>>940
(load-theme 'adwaita t)
(白ハート)
aaaa

とできなくて、
(load-theme 'adwaita t)
(白ハート)

aaaa

となってしまうということですかね?

win7上のRLoginとputty-jpでdebian-testing上のemacs24.4で試したけど
白ハートが半角表示されるだけで、表示は上側のようになりますね
cygwinは削除したので確認できず
勘違いしてたらすみません
0943名無しさん@お腹いっぱい。2014/12/05(金) 08:15:34.32
実際のフォントの文字幅と端末が解釈する文字幅と
emacs が判断する文字幅の差でしょう。
emacs は決め打ちしてる上に曖昧文字の幅が全部2になってるわけでもないし。
09449402014/12/05(金) 10:45:29.43
>>942
現象はおっしゃるとおりです。わかりにくくてすみません。

PuTTY 0.63 でFeodora 20に接続したところ、自分も再現できませんでした。
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

さらに調べたところ、GNU screen を起動した環境で emacs を起動すると
不具合が再現しました。

Fedora : Screen version 4.01.00devel (GNU) 2-May-06
Cygwin : Screen version 4.02.01 (GNU) 28-Apr-14

Screen + Emacs + テーマ、という何とも複雑な条件でした。
0945名無しさん@お腹いっぱい。2014/12/05(金) 11:04:33.89
theme って中で色設定したりフォント変えたりしてるだけだよね?
細分化すれば face の設定の何が悪いかまで判別できるんでない?
09469422014/12/05(金) 11:12:05.55
>>944
screen入れて試したけど、putty-jp, RLoginどちらでも再現できないですねー
Screen version 4.02.01 (GNU) 28-Apr-14

うちではtmuxを使った時に、画面の分割線用のフォントが綺麗に表示されない問題が
cygwinでもputty-jpでもTeraTermでも発生していたからいろいろ試して、問題の発生しない
RLoginを見つけました。
名前以外は素晴らしいソフト
http://nanno.dip.jp/softlib/man/rlogin/

原因はemacsではなく、仮想端末やputtyとかの側だろうから、よかったらRLoginを試してみてください
09479402014/12/05(金) 12:16:59.96
Cygwin の Screen を tmux に乗り換えたところ、ほぼ解決しました。
tmux 1.9a
皆さん、いろいろありがとうございました。

>>946
再現の条件があやふやで申し訳ありませんでした。
RLoginのご紹介、ありがとうございました。
機会があれば試してみます。
0948名無しさん@お腹いっぱい。2014/12/05(金) 12:18:53.24
Emacs24.4経由でjavaを実行をしたいです
quickrun.elを使い
gcj(GNU Compiler for Java)でソースをコンパイルしてjavaでバイトコードを実行しようとしています
http://www.kaichan.info/blog/2014-03-22-emacs-java-quickrun.html
これを参考にしながらこう書きました

(defadvice quickrun/use-tempfile-p (after gcj activate)
"gcjでも一時ファイルを作らないようアドバイス"
(when (string= (ad-get-arg 0) "gcj")
(setq ad-return-value nil)))

;; プレースホルダーの情報
;; https://github.com/syohex/emacs-quickrun#placeholders
(quickrun-add-command "gcj"
'((:command . "gcj")
(:exec . ("gcj -C %s" "java %N %a"))
(:description . "Compile Java file and execute")))

quickrunでgcjを選択するとjavaコマンドの引数に一時ファイルが設定されてしまいます
(:exec . ("gcj -C %s" "java %N %a")

(:exec . ("gcj -C %s" "echo %N %a")
と書き換えると、javaに一時ファイルの名前が渡されていることを確認できました
アドバイスの部分の設定がおかしいのでこういう結果になってしまうと思うのですが、どのように修正すればよいでしょうか
0949名無しさん@お腹いっぱい。2014/12/06(土) 12:16:14.38
>>927
これ、誰か解決方法分かる人いないでしょうか?

この使い方にこだわるのは、常時稼働のサーバ上でdaemon起動しておけば、自分の端末の電源を落として帰っても次の日 (バッファの状態もそのままで) すぐに作業が継続できるし、急に会議に呼ばれてもノートPCからサーバに接続して内職できるからなんだけど。

ごく一般的な使い方だと思うんだけど、今はクライアント端末側でemacs起動してtramp経由でサーバのファイルを編集するような使い方の人が多いのかな?
0950名無しさん@お腹いっぱい。2014/12/06(土) 12:30:33.38
screen か tmux の attach/detach 使えばいいんじゃない
でも >>930 の nohup で十分だと思うけど、上手く行かないってのは
何かやり方間違えてない?
0951名無しさん@お腹いっぱい。2014/12/06(土) 12:49:34.21
>>950
いや、terminal起動ならscreenとか使わなくても問題ないんだけど、できればXで使いたいので...

$ nohup emacs --daemon </dev/null >/dev/null 2>&1 &

で起動すると、確かにC-cでssh接続を終了してもdaemon起動したemacsは終了しなくなるんだけど、次に接続しようとすると、

$ emacsclient -n -c
emacsclient: connect: Connection refused
emacsclient: No socket or alternate editor. Please use:

--socket-name
--server-file (or environment variable EMACS_SERVER_FILE)
--alternate-editor (or environment variable ALTERNATE_EDITOR)

となる。--socket-nameで/tmpにあるsocketを指定すればいいのかなと思ったんだけど、

$ emacsclient -n -c --socket-name="/tmp/emacs1000/server"
emacsclient: connect: Connection refused
emacsclient: error accessing socket "/tmp/emacs1000/server"

でダメだった。
0952名無しさん@お腹いっぱい。2014/12/06(土) 14:51:17.66
再現できないからなー
0953名無しさん@お腹いっぱい。2014/12/06(土) 15:08:58.87
>>952
何で再現しないんだろう?こっちでは、VMwareにインストールしただけで何も余計な設定していない2つのubuntu 14.04の間でsshして試しても起きるんだけど。
0954名無しさん@お腹いっぱい。2014/12/06(土) 16:05:58.02
>>948
gcj環境作るの億劫だったので試してないけど、advice使うまでもなく、
(quickrun-add-command "java"
'((:command . "java")
(:compile-only . "gcj hogehoge %s")
(:exec . ("gcj fugafuga %s" "%c %N %a"))
(:remove . ("%n.class"))
(:description . "Compile Java file and execute"))
:mode 'java-mode)
のようにjava用の設定を上書きすればいいんじゃないかなhogehogeとかhugahugaとかはgcjのコマンド
に合わせて変更してください。
0955名無しさん@お腹いっぱい。2014/12/06(土) 16:15:40.18
こないだの whitespace のもそうだけど安直に advice 使うとハマるよね
0956名無しさん@お腹いっぱい。2014/12/06(土) 16:44:13.52
引用元で
(defsubst quickrun/use-tempfile-p (cmd-key)

(defadvice quickrun/use-tempfile-p (after java8 activate)
でadviceしてるけど、defsubstってインライン関数定義なのにadvice使えるものなのかな?
このあたりまったく知らなかったからいろいろ試してみよう
0957名無しさん@お腹いっぱい。2014/12/06(土) 19:19:58.22
>>954
!その手がありましたか。設定の上書きを試すことを忘れていました
もちろん無事動作しました。感謝です!
0958名無しさん@お腹いっぱい。2014/12/06(土) 20:49:14.11
>>956
既にバイトコンパイル済みのに対しては無効なんじゃね
0959名無しさん@お腹いっぱい。2014/12/07(日) 06:16:07.81
インライン展開については、他の言語同様、一部だけしか展開されなくて、
今回のやつは、defsubst使ってるけど実際にはインライン展開されなくてadviceが使える
というオチ
筋の悪いコード
0960名無しさん@お腹いっぱい。2014/12/08(月) 21:02:10.27
あるファイルに、そのファイルからの別のファイルへの相対パスをお手軽に入力するコマンドもしくは elisp はあるでしょうか?

例えば、find file コマンドのように補完入力でファイルを指定したら、そのファイルへの相対パスが入力できたら便利だな、思う事がしばしばあります。
0961名無しさん@お腹いっぱい。2014/12/08(月) 21:09:40.29
file-relative-name っていう関数がある
0962名無しさん@お腹いっぱい。2014/12/08(月) 21:12:17.71
find-fileって相対パスで指定してるし、何をしたいのかわからん
0963名無しさん@お腹いっぱい。2014/12/08(月) 21:56:00.04
>>960
やっつけだけどこんな感じ?

(defun insert-relative-file-path (file)
(interactive "ffile name:")
(insert (file-relative-name file (buffer-file-name))))
0964名無しさん@お腹いっぱい。2014/12/08(月) 22:00:36.63
間違えた…

(defun insert-relative-file-path (file)
(interactive "ffile name: ")
(insert (file-relative-name file
(file-name-directory (buffer-file-name)))))
0965名無しさん@お腹いっぱい。2014/12/08(月) 22:01:42.81
>>963
>
まさにそれ!!ありがとうございます。

あと、EmacsWiki でも、似たようなのを見つけることができた。
http://www.emacswiki.org/emacs/InsertFileName
0966名無しさん@お腹いっぱい。2014/12/10(水) 00:51:00.89
しかしemacs-diffsがgitに移行してから滅茶苦茶見づらくなった…
bzrに移行した時も少し見づらくなったがそれでも許容範囲だったが今回はアカン
0967名無しさん@お腹いっぱい。2014/12/10(水) 11:15:15.60
質問です。

helmを入れたら、M-x browse-url と M-x navi2ch が全然候補に出て来ず、
コマンド名を全部入力しなければなりません。解決するにはどうしたら
良いでしょう?
09689672014/12/10(水) 11:19:43.91
候補に出てこない、は嘘でした。リストのすごく下の方に出てくる。
もっと上の方に出現して欲しいのですが。
0969名無しさん@お腹いっぱい。2014/12/10(水) 11:34:45.73
>>968
(global-set-key (kbd "M-x") 'helm-M-x)
でいいんじゃないかな
0970名無しさん@お腹いっぱい。2014/12/10(水) 11:42:30.71
>>968
(setq helm-mode-reverse-history nil)
09719672014/12/10(水) 22:52:59.51
>>969-970
遅レスですが、うまく行きました。ありがとうございました!
0972名無しさん@お腹いっぱい。2014/12/11(木) 04:01:22.66
つ M-x nav TAB
0973名無しさん@お腹いっぱい。2014/12/12(金) 02:30:12.44
小菊の後継ってなかなかでないけどみんなhelmとか使うようになって不要になっちゃったからなのかね。
0974名無しさん@そうだ選挙に行こう2014/12/13(土) 19:39:49.68
http://mzp.hatenablog.com/entry/2014/12/12/005344
0975名無しさん@お腹いっぱい。2014/12/15(月) 15:47:30.61
formatの質問です
common lispで
(loop for i from 1 to 10
do (format t "[~A]~%" i))
とする場合の~%にあたるものは
emacs lispの方のformatにはないのでしょうか?
0976名無しさん@お腹いっぱい。2014/12/15(月) 16:25:05.95
どっちかっていうと C の sprintf 由来な感じだからないと思う。
おとなしく \n で改行出力でしょうね。
0977名無しさん@お腹いっぱい。2014/12/15(月) 16:29:44.42
EmacsWiki: CLFormat
http://www.emacswiki.org/emacs/CLFormat
0978名無しさん@お腹いっぱい。2014/12/17(水) 03:14:30.77
calc の HMS について質問させてください。

スタック1番の内容が
 1@ 2' 3"
となっている時に n を押すと
 -1@ 2' 3"
になりますが、
 0@ 2' 3"
のように時間が 0 の時に n を押すと
C-g でキャンセルするまで何もできなくなります。

calc-change-sign の advice で無理やり -0@ 2' 3" 入れても
t n で出した日時に + も出来ず、やはり C-g するまで戻ってきません。

時間部分が 0 な負の HMS を使うにはどうすればよいでしょうか?
0979名無しさん@お腹いっぱい。2014/12/17(水) 03:47:02.68
すみません、最後の t n は t N の間違いです。
0980名無しさん@お腹いっぱい。2014/12/18(木) 12:17:00.40
いつの頃からか session.el の session-set-file-name-exclude-regexp が機能してないような気がするんですが
皆様の環境ではいかがでしょうか?

emacs -q の環境で session.el をロード、session-initialize 後に
session-set-file-name-exclude-regexp に元々設定されてる .overview を開いて終了、
その後同じく emacs -q で session-initialize したところ .overview が file-name-history に普通に残っちゃっています。

コード見た感じだと find-file-hook に session-set-file-name-history が設定されており、
除外対象じゃなければ file-name-history にファイル名を追加するってコードになっているんですが、
どうも最初から file-name-history にファイル名が追加済みになっちゃってるみたいなんですよね。

試した環境は emacs-24.3 と emacs-24.4 です。
session.el は melpa にある 2.3a を使いました。
0981名無しさん@お腹いっぱい。2014/12/18(木) 13:40:34.04
Emacs 25.0.50、session 2.3a(melpa) で試してみたけど .overview は
file-name-history に残らないな。

session.el:
===========
(defun session-set-file-name-history ()
:
(unless (and session-set-file-name-exclude-regexp
(string-match session-set-file-name-exclude-regexp name))
(push name file-name-history))

一旦、file-name-history をクリア(nil に設定)して session-save-session
してみたら?
0982名無しさん@お腹いっぱい。2014/12/18(木) 14:12:46.80
>>981
うーん、残りませんか。
emacs -Q で以下を実行したところ、確かに file-name-history には ~/test.txt しか入りませんでした。
(progn
(load "~/.emacs.d/elpa/session-20120510.1700/session.el")
(session-initialize)
(setq file-name-history nil)
(find-file "~/.overview")
(find-file "~/test.txt")
file-name-history)

ですが、M-x find-file で ~/.overview を開いた後に file-name-history を評価すると
やっぱり ~/.overview が追加されてしまいます。
session-save-file してもやっぱりその時の file-name-history が保存されてしまいますね。
-Q で起動してるから差はないような気もするんですけど何が原因なんだろう・・・
0983名無しさん@お腹いっぱい。2014/12/18(木) 15:06:12.17
>>982
それは確か仕様だったような。
インタラクティブに実行した場合は残るはず。
関数として呼び出した時も履歴を残そうとする session-find-file がわざわざ用意されてるぐらいだし。
0984名無しさん@お腹いっぱい。2014/12/18(木) 15:31:01.95
>>983
ありがとうございます。パッケージとかが勝手に開くファイルを履歴に残さないための設定ってわけなんですね。

元々の発端は magit の COMMIT_EDITMSG が session-set-file-name-exclude-regexp に設定してるにもかかわらず
session に残されてしまうってのだったんですが、
どうやら magit が emacsclient 経由でコミットメッセージ書くようになったのが原因っぽいですね。
magit-emacsclient-executable を nil にして内部呼び出しだけで完結させたら file-name-history に残らなくなりました。
とりあえず emacsclient 使いつつの履歴に残らないような何かうまい解決方法考えてみます。
レス数が950を超えています。1000を超えると書き込みができなくなります。