Реализация функциональности буфера обмена на X (* nix) без доступа к циклу событий? - PullRequest
0 голосов
/ 21 октября 2011

Возможно ли реализовать копирование-вставку текста, если у вас есть окно, но нет доступа к циклу событий, и вы можете выполнять только вызовы функций для X. Я реализовал буфер обмена в Windows и OSX только с вызовами функций API,Возможно ли то же самое на * nix с X?Мне сказали, что вам абсолютно необходим доступ к циклу событий X.Есть ли способ реализовать базовую функциональность буфера обмена строк только с вызовами API?

1 Ответ

3 голосов
/ 21 октября 2011

Короткий ответ "нет".

Длинный ответ после ...

Основное различие между буфером обмена Windows и X (не знаю об OSX) заключается в том, что:

  • В Windows данные копируются в кусок общей памяти, когда пользователь выполняет КОПИРОВАНИЕ, и доступны для любого приложения, выполняющего ПАСТУ.
  • В X, когда приложение выполняет КОПИРОВАНИЕ, оно просто владеет буфером обмена. Затем, когда другое приложение (или то же самое) выполняет вставку, данные передаются из одного приложения в другое.

Итак, чтобы реализовать COPY в X-клиенте, вы должны сначала иметь буфер обмена, а затем прослушивать и отвечать на сообщения получать содержимое буфера обмена . А чтобы внедрить PASTE, вы должны отправить сообщение получить содержимое буфера обмена и дождаться ответа. Обе эти операции требуют, чтобы вы связались с циклом событий.

Вот почему в X скопированные данные недоступны после того, как вы убьете исходное приложение. Если вы не используете какой-либо сервер буфера обмена, то есть приложение, которое прослушивает событие , владелец буфера обмена умирает и сохраняет копию данных для будущих вставок.

Честно говоря, буфер обмена Windows может работать и в режиме прямой передачи, но он редко используется, AFAIK, и только для очень больших фрагментов данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...