Я работаю над проектом, это, как предполагается, работает и над Windows и над Linux (с неофициальным портом Mac также), который эмулирует системную консоль истинного цвета.
Моя проблема состоит в том, что недавно там появился запрос на поддержку текстового поля (да, основанный на консоли), и будет здорово добавить возможность копирования текста к буферу обмена и вставке от него. Есть ли способ достигнуть этого, которое будет:
Заранее спасибо за Вашу справку.
Если вы не используете кроссплатформенную библиотеку пользовательского интерфейса (например, wx или что-то в этом роде), то похоже, что вам просто нужно будет написать собственный код буфера обмена для каждой платформы, которую вы хотите поддерживать.
Помните, что на Macintosh вы копируете с помощью Command-C, а не Ctrl + C :)
Буфер обмена по сути является концепцией, определяемой операционной системой. Сам язык C не знает, что такое буфер обмена и как с ним работать. Вы должны либо взаимодействовать напрямую с ОС, либо использовать библиотеку переносимости, которая делает это от вашего имени. Нет никакого способа обойти это.
Лично я бы определил свою собственную функцию
getClipboardText();
, которая определена в двух разных файлах заголовков (linux_clipboard.h, windows_clipboard.h и т. Д.), А затем сделайте предварительный обработчик, чтобы загрузить соответствующий файл соответственно. Я действительно не кодирую на C / C ++, поэтому извините, если это не имело никакого смысла или было плохой практикой, но я бы сделал это именно так.
#if WIN32
#include windows_clipboard.h
#endif
Подобные вещи
Помните: Для Linux вам нужно иметь дело с разными оконными менеджерами (Gnome, KDE), у всех есть разные способы управления буфером обмена. Помните об этом при разработке своего приложения.
Вы можете связываться с буфером обмена, используя xclip . Вы можете использовать этот скрипт python здесь, чтобы выполнить эту работу, установив связь с 'dcop' и 'klipper' здесь . Это для KDE, я не знаю, как это будет сделано в GNOME ... Вы также можете сделать это независимо от GNOME / KDE, используя DBUS, хотя я также не могу сказать на 100% уверенно по этому поводу ...
Просто имейте в виду, что для действительно кроссплатформенной работы вы должны учитывать различные графические интерфейсы, например, в Linux, X - это интерфейс главного оконного менеджера, и либо GNOME / KDE находится поверх него .. Я не выделяю другие графические интерфейсы, такие как FluxBox, WindowMaker, и это лишь некоторые из них, и что будет много кода, зависящего от платформы, а также вместе с ним вы также будете иметь дело с буфером обмена Windows ... все в целом, большой интегрированный код ...
Вы не задумывались о том, чтобы взглянуть на необработанный программный API X для поддержки буфера обмена? Возможно, это могло бы быть лучше, как я мог бы себе представить, GNOME / KDE и т. Д. Используют API X для работы с буфером обмена ... если это подтвердится, тогда работа будет вырезана и не будет зависеть от основных интерфейсов GUI ... (Я надеюсь, что так и будет, поскольку это упростит жизнь вашему проекту!)
Возможно, используя переключатели времени компиляции для каждой платформы ... WIN, KDE, GNOME, MAC или используйте тот, который уже предварительно -defined ..
Надеюсь, это поможет, С уважением, Том.