5

Используя emacs в режиме консоли, я хочу скопировать выделенный мышью текст из emacs и вставить его в другое приложение (возможно, другой термин).

Но emacs добавит в выделение пробелы, чтобы заполнить всю ширину экрана.

Чтобы добавить оскорбление травмы, vim работает отлично. Мне пришлось переключиться на vim (или cat), чтобы сделать простое копирование / вставку.

В качестве тестового сценария вы можете написать этот текст в emacs (работает в режиме консоли):

(echo Does it work: \
 true)
  1. Выделите этот текст (обе строки) с помощью мыши.
  2. Вставьте его в терминал и нажмите

Если это пишет:

Does it work: true

Тогда это работает как задумано (копирование-вставка сработала), у вас нет моей проблемы (почему?). Но на моем компьютере я вижу:

Does it work:

И "истина" отсутствует: она терпит неудачу, как в настоящее время описано в этом выпуске.

Любое предложение ?

1 ответ1

6

Находясь в режиме консоли, подсветка синтаксиса может мешать и генерировать целые строки "пробелов", копируемых в выбранный вами код.

Проверка это виновник

Чтобы проверить, является ли это тем, что вас мучает:

  • временно отключите подсветку синтаксиса с помощью M-x global-font-lock-mode .
  • Затем попробуйте скопировать-вставить и посмотреть, сможете ли вы воспроизвести проблему.
  • После подтверждения / подтверждения вы можете установить подсветку синтаксиса обратно с помощью той же команды.

Если отключение подсветки синтаксиса устранило проблему копирования / вставки, возможно, вы захотите прочитать следующее, чтобы окончательно это исправить.

Почему это происходит?

Проблема в том, что вы установили цвет фона для некоторых шрифтов (часто на шрифте по умолчанию ). В результате emacs заполняет фон пустыми символами, чтобы он мог "рисовать" экран так, как вам нужно, и любое действие копирования-вставки будет содержать эти ложные пробелы.

Как это исправить?

Вы должны проверить настройки лица (для шрифта по умолчанию вы могли бы использовать M-x customize-face <RET> default <RET>), и если у вас цвет фона, отличный от unspecified-bg то это виновник. 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 изменить цвет фона, ему придется искусственно закрасить экран символами пробелов, для которых собственный цвет фона будет установлен на то, что вы выбрали.

При выборе вы часто используете функцию вставки копии терминала, которая совершенно не знает о консольном приложении, которое вы используете. Он выполняет свою работу, вставляя любые символы на экране, и таким образом копирует пробелы.

Обратите внимание, что у вас может быть настройка, которая позволит вашему консольному приложению фактически получать ввод мыши и управлять выбором и копированием-вставкой. Но это не так часто, и оболочка, которая является наиболее распространенным приложением, активным в вашем терминале, не поддерживает мышь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .