コンソールモードでemacsを使用して、マウスで選択したテキストをemacsからコピーして、別のアプリケーションに貼り付けたい(おそらく別の用語) )。
しかし、emacsは画面の幅全体を埋めるために選択範囲に完全なスペースを追加します。
怪我に侮辱を加えるために、vim
は完璧に機能します。単純なコピー/貼り付けを行うには、vim
(またはcat
)に切り替える必要がありました。
テストシナリオとして、このテキストをemacs(コンソールモードで実行)で書くことができます。
(echo Does it work: \
true)
それが書く場合:
Does it work: true
その後、意図したとおりに機能します(コピー&ペーストが機能します)。私の問題はありません(なぜですか?)。しかし、私のコンピューターでは、次のことがわかります。
Does it work:
そして、「真」が欠落しています。この問題で現在説明されているように失敗します。
なにか提案を ?
コンソールモードの場合、構文の強調表示は邪魔になるであり、選択したコード内にコピーされる「スペース」の行全体を生成します。
これが原因であることを確認する
これがあなたを悩ませているものであるかどうかを確認するには:
M-x global-font-lock-mode
を使用して構文の強調表示を一時的に無効にします。構文の強調表示を無効にすることでコピー/貼り付けの問題が修正された場合は、以下を読んでこれを確実に修正することをお勧めします。
なぜそれが起こっているのですか?
この問題の引き金となるのは、背景色を一部のフォントに設定していることです(多くの場合、defaultフォント)。その結果、emacsは背景を空の文字で埋めて、画面を好きなように「ペイント」できるようにします。コピーと貼り付けのアクションには、これらの偽の空白が含まれます。
それを修正する方法は?
faceのカスタマイズ(defaultフォントの場合はM-x customize-face <RET> default <RET>
を使用できます)を確認する必要があります)そして、unspecified-bg
とは異なるbackground-colorがある場合、これが原因です。 unspecified-bg
はある種の透明な背景色であり、カスタマイズしなかった場合、実際にはemacsのデフォルトの背景色になります。
自動生成されたunspecified-bg
ブロックの後に、これを~/.emacs
に追加することで、emacsの開始時にバックグラウンドでcustom-set-faces
を使用するように強制できます。
(unless window-system
(custom-set-faces
'(default ((t (:background "unspecified-bg"))))))
次に、emacsを再起動するか、このブロックでM-x eval-region
を実行して結果を確認します。
ちなみに、emacsでファンシーな端末のバックグラウンドトリックを取り戻すこともできます(透明度や背景画像を考えています...)。
注:これを使用しても、ゴーストの空白が特別なテキストにキャプチャされると、フォントの強調表示が不十分になるという悪い驚きが生じる可能性があります。このような場合は、最初のトリックの使用を検討してください。
これが起こっている理由の詳細な説明
端子には独自の背景色があります(一部の端子では、画像を背景として表示したり、透明にすることもできます)。したがって、コンソールの場合、無色(アルファチャネルのように表示)のようなものがあり、これがコンソールのデフォルトの色です。
コンソールアプリケーションは、ANSIエスケープシーケンスを介してフォントの色と背景の両方を変更できます。
Emacsに背景色の変更を依頼する場合は、独自の背景色を選択したものに設定した空白文字で画面を人為的にペイントする必要があります。
選択するときは、ターミナルのコピー貼り付け機能を使用することがよくあります。これは、使用しているコンソールアプリケーションをまったく認識していません。画面に表示されている文字をコピーして貼り付けることで機能するため、空白がコピーされます。
コンソールアプリケーションが実際にマウス入力を受け取り、選択とコピー&ペーストを管理できるように設定できることに注意してください。しかし、それはそれほど一般的ではなく、端末でアクティブになっている最も一般的なアプリであるシェルはマウスをサポートしていません。