OS независимый буфер обмена копировать / вставлять текст в C - PullRequest
9 голосов
/ 16 февраля 2010

Я работаю над проектом, который должен работать как на Windows, так и на Linux (с неофициальным портом Mac), который эмулирует консоль системы истинного цвета.

Моя проблема в том, что недавно появился запрос на поддержку текстового поля (да, на основе консоли) и было бы здорово добавить возможность копирования текста в буфер обмена и вставки из него. Есть ли способ достичь этого, который будет:

  • быть сделано в C (не C ++),
  • работает как в Windows, так и в Linux (макросы препроцессора являются опцией, если нет независимого от платформы кода),
  • не требуется никаких дополнительных библиотек для ссылки на?

Заранее спасибо за помощь.

Ответы [ 4 ]

5 голосов
/ 16 февраля 2010

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

Помните, что на Macintoshes вы копируете с помощью Command-C, а не Ctrl + C:)

4 голосов
/ 16 февраля 2010

Лично я бы определил свою собственную функцию

getClipboardText();

Это определяется в двух разных заголовочных файлах (linux_clipboard.h, windows_clipboard.h и т. Д.), А затем выполняется предварительная обработка, чтобы загрузить соответствующий файл. На самом деле я не пишу код на C / C ++, поэтому извините, если это не имело смысла или является плохой практикой, но я бы так и поступил.

#if WIN32
#include windows_clipboard.h
#endif

Такого рода вещи

Помните: Для linux вам приходится иметь дело с разными оконными менеджерами (Gnome, KDE), все с разными способами управления буфером обмена. Помните об этом при разработке приложения.

4 голосов
/ 16 февраля 2010

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

1 голос
/ 16 февраля 2010

Вы можете общаться с буфером обмена, используя xclip . Вы можете использовать этот скрипт на Python здесь, чтобы выполнить эту работу, связавшись с 'dcop' и 'klipper' здесь . Это для KDE, я не знаю, как это будет сделано под GNOME ... Вы также можете сделать это независимо от GNOME / KDE, используя DBUS, хотя я не могу сказать на 100% уверенно об этом либо ...

Просто имейте в виду, что для действительно кроссплатформенной работы вы должны учитывать различные GUI, такие как в Linux, X является интерфейсом главного оконного менеджера и либо GNOME / KDE стоит поверх него .. Я не выделяю другие графические интерфейсы, такие как FluxBox, WindowMaker и многие другие, и что будет много зависимого от платформы кода, а также, вместе с тем, вы также будете иметь дело с буфером обмена Windows ... все, большой интегрированный код ...

Не задумывались ли вы о том, чтобы смотреть на необработанный API X-программирования для поддержки буфера обмена? Может быть, это было бы лучше, как я себе представляю, GNOME / KDE и т. Д. Используют API X для работы с буфером обмена ... если это подтвердится, то работа будет исключена и не будет зависеть от основных интерфейсов GUI ... (Я надеюсь, что это будет так, поскольку это облегчит жизнь вашему проекту!)

Возможно, использовать переключатели времени компиляции для каждой платформы ... WIN, KDE, GNOME, MAC или использовать тот, который уже предопределен ..

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

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