間接的にクローンされたバッファーで元のバッファーのファイル名を取得するにはどうすればよいですか?


8

2つの異なるフレームのバッファーの異なる部分を確認したかったのは、1つのフレームを簡単にまたがることができない、異なる形状の2つのモニターがあるためです。いくつかのグーグルによって、私はを使用するようclone-indirect-bufferになりました。

ただし、buffer-file-name新しいバッファはnilです。元のバッファのファイル名(これはそのクローンである)を確実に判断するにはどうすればよいですか?


2
バッファのクローンを作成し、両方のフレームで同時にバッファにアクセスすることの違い/利点は何ですか?
Nathanael Farley、2014年

5
クローンは、互いに独立して、ナローイング/ワイドニング、コードフォールディング、アウトラインフォールディングなどのイベントに応答します。2つのウィンドウで同じバッファーの場合、これらの種類のイベントは各ウィンドウでミラーリングされます。クローンは、たとえばバッファの異なる部分の異なるビューを同時に持つ場合に役立ちます。
ダン

バッファを2つのフレームで同時に起動できるかどうかは、実際にはわかりません。もちろん、同じフレームの2つのウィンドウを使用できますが、別のフレームのバッファーに変更しようとすると、C-x b既にバッファーが表示されているフレームにフォーカスが切り替わります。
rneatherway 2014年

1
@NathanaelFarley evil-modeのようなもので間接バッファを使用できるvim志向の大学とターミナルを共有しているときに、間接バッファを使用します。
stsquad 2014年

回答:


12

EmacsのマニュアルとElispのマニュアルは、このような質問のためにスピードダイヤルに置いておきます。

間接バッファに関する Elispマニュアルから:

関数:buffer-base-buffer&optional buffer

この関数は、デフォルトの現在のバッファである、バッファのベースバッファを返します。バッファが間接的でない場合、値はnilです。それ以外の場合、値は別のバッファーであり、決して間接バッファーではありません。

あなたはおそらく(buffer-file-name (buffer-base-buffer))そのようなものを望みます。


うん、それだけです。でも私は自分のdefadvice選択が好きです。;)
ダン

3

これはあなたの質問への間接的な答えです-以下を行わずに元のバッファのファイル名が何であるかを理解する方法がわかりません。(編集:@purple_arrowsの答えは詳細を埋めます:を使用できますbuffer-base-buffer。その答えを最も正しいものとして受け入れてください。)

次のアドバイスは、元のバッファのファイル名をそれぞれの間接クローンに関連付けます。

(defadvice clone-indirect-buffer (around associate-filename activate)
  "Associate the original filename with the cloned buffer."
  (let ((filename buffer-file-name))
    ad-do-it
    (setq buffer-file-name filename)))

これで、各クローンのファイル名は元のバッファーと同じになります。

私は間接的にクローン化されたバッファーを頻繁に使用しており、たとえば、元のバッファーではなく、いずれかのバッファーで作業しているときに関連ファイルを保存できるようにしたいと思っています。このアドバイスは、その望ましいワークフローに対する私の解決策でした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.