lXtermSelectPaste.sh 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #!/bin/bash
  2. sleep 0.1;echo "
  3. ┌────────────────────────────────────────────────────────────────────────────────┐"
  4. sleep 0.1;echo -e "
  5. \e[1;36m Select/Paste \e[0m\e[36m Выделить/вставить\e[0m"
  6. sleep 0.1;echo "
  7. X-клиенты обеспечивают поддержку выбора и вставки, отвечая на запросы, переданные
  8. X-сервером. X-сервер хранит данные в «атомах», которые соответствуют различным
  9. типам выделения (PRIMARY, SECONDARY, CLIPBOARD), а также аналогичному механизму
  10. буфера вырезания (CUT_BUFFER0 — CUT_BUFFER7). Они задокументированы в ICCCM.
  11. ICCCM имеет дело с базовым механизмом выбора/вставки.
  12. В нем не упоминается подсветка. Выбор не то же самое, что выделение.
  13. Xterm (как и многие приложения) использует подсветку, чтобы показать вам
  14. выделенный в данный момент текст.
  15. Приложение X может владеть выделенным фрагментом, что позволяет ему быть
  16. источником данных, скопированных с использованием заданного атома выделенного
  17. фрагмента. Xterm может продолжать владеть выделенным фрагментом после прекращения
  18. выделения (см. KeepSelection).
  19. "
  20. sleep 0.1;echo -e "\e[32m PRIMARY\e[0m НАЧАЛЬНЫЙ
  21. При настройке на использование основного выбора (по умолчанию) xterm может
  22. предоставлять данные выбора способами, которые помогают сохранить информацию
  23. о кодировке символов при ее вставке.
  24. Токен PRIMARY — это стандартная функция X, описанная в ICCCM (Руководстве по
  25. межклиентским коммуникациям), в котором говорится:
  26. Выбор, названный атомом PRIMARY, используется для всех команд, которые принимают
  27. только один аргумент, и является основным средством связи между клиентами,
  28. использующими механизм выбора.
  29. Пользователь «выбирает» текст в xterm, который выделяет выбранный текст.
  30. Последующая «вставка» другому клиенту перенаправляет запрос клиенту, владеющему
  31. выбором. Если xterm владеет первичным выбором, он делает данные доступными в виде
  32. одной или нескольких «целей выбора». Если он не владеет первичным выбором,
  33. например, если он освободил его или другой клиент подтвердил право собственности,
  34. он полагается на буферы вырезания для передачи данных. Но cut-buffers обрабатывают
  35. только данные ISO-8859-1 (официально — некоторые клиенты игнорируют правила).
  36. "
  37. sleep 0.1;echo -e "\e[32m CLIPBOARD\e[0m БУФЕР ОБМЕНА
  38. При настройке на использование буфера обмена (используя ресурс selectToClipboard)
  39. проблема с сохранением права собственности обходится. В противном случае нет
  40. никакой разницы в отношении данных, которые могут быть переданы посредством выбора.
  41. Ресурс selectToClipboard представляет собой компромисс, позволяющий обращаться с
  42. БУФЕРОМ ОБМЕНА почти как с ПЕРВИЧНЫМ, в отличие от ICCCM, который описывает
  43. БУФЕР ОБМЕНА в терминах, отличных от ПЕРВИЧНОГО или ВТОРИЧНОГО.
  44. Его длинное объяснение начинается с основных моментов:
  45. Выделение, названное атомом CLIPBOARD, используется для хранения данных, которые
  46. передаются между клиентами, т. е. данных, которые обычно вырезаются, а затем
  47. вставляются или копируются, а затем вставляются.
  48. Всякий раз, когда клиент хочет передать данные в буфер обмена:
  49. • Он должен утверждать право собственности на БУФЕР ОБМЕНА.
  50. • Если ему удастся получить право собственности, он должен быть готов ответить
  51. на запрос содержимого БУФЕРА ОБМЕНА обычным способом (сохранив данные, чтобы
  52. иметь возможность их вернуть).
  53. Запрос может быть сгенерирован клиентом буфера обмена, описанным ниже.
  54. "
  55. sleep 0.1;echo -e "\e[32m SELECT\e[0m ВЫБРАТЬ
  56. Однако многие приложения используют CLIPBOARD, имитируя другие оконные системы.
  57. Ресурс selectToClipboard (и соответствующий пункт меню Select to Clipboard)
  58. представляет маркер SELECT (известный только xterm),
  59. который выбирает между маркерами PRIMARY и CLIPBOARD.
  60. Без использования этой функции можно использовать обходные пути, такие как
  61. программа xclip, для отображения содержимого буфера обмена X в окне xterm.
  62. "
  63. sleep 0.1;echo -e "\e[32m SECONDARY\e[0m ВТОРИЧНЫЙ
  64. Используется реже, чем PRIMARY или CLIPBOARD. Согласно ICCCM, он используется
  65. • В качестве второго аргумента для команд, принимающих два аргумента (например,
  66. «поменять местами первичный и вторичный выбор»)
  67. • Как средство получения данных, когда есть первичный выбор и пользователь
  68. не хочет его нарушать
  69. "
  70. sleep 0.1;echo -e "\e[32m Selection Targets\e[0m Цели выбора
  71. Различные типы передаваемых данных зависят от того, что запрашивает принимающий
  72. клиент. Они называются целями отбора.
  73. При запросе данных выбора xterm пробует следующие типы в следующем порядке:
  74. \e[32m UTF8_STRING\e[0m Это расширение XFree86, означающее, что данные
  75. закодированы в UTF-8. Когда xterm построен с поддержкой расширенных символов,
  76. он одновременно принимает и предоставляет этот тип.
  77. \e[32m TEXT\e[0m текст находится в кодировке, соответствующей вашей текущей локали.
  78. \e[32m COMPOUND_TEXT\e[0m это формат для данных с несколькими наборами символов,
  79. таких как многоязычный текст.
  80. В качестве особого случая он может хранить данные UTF-8.
  81. "
  82. sleep 0.1;echo -e "\e[32m STRING\e[0m строка Это данные Latin 1 (ISO-8859-1).
  83. "
  84. sleep 0.1;echo " Два средних (TEXT и COMPOUND_TEXT) добавляются, если xterm настроен с ресурсом
  85. i18nSelections, установленным на «true».
  86. UTF8_STRING является предпочтительным (поэтому первым в списке), так как xterm
  87. сохраняет текст как данные Unicode при работе в режиме расширенных символов, и
  88. перевод не требуется. С другой стороны, TEXT и COMPOUND_TEXT могут потребовать
  89. перевода. Если перевод неполный, они вставят X «defaultString», значение которого
  90. не может быть установлено и может быть просто пустым. Ресурс Xterm defaultString
  91. указывает строку, используемую для неполных переводов UTF8_STRING.
  92. Вы можете изменить типы, которые xterm пытается использовать, используя ресурсы
  93. восемьBitSelectTypes или utf8SelectTypes. Например, у вас может быть определенная
  94. настройка локали, которая не использует кодировку UTF-8. Значение ресурса
  95. представляет собой список целей выбора, разделенных запятыми, которые состоят из
  96. показанных имен. Вы можете использовать специальное имя I18N для обозначения
  97. необязательного включения TEXT и COMPOUND_TEXT. Имена сопоставляются без учета
  98. регистра и могут быть сокращены.
  99. Список по умолчанию может быть выражен несколькими способами, например,
  100. UTF8_STRING,I18N,STRING
  101. utf8,i18n,string
  102. u,i,s
  103. "
  104. sleep 0.1;echo -e "\e[32m Mouse Protocol\e[0m Протокол мыши
  105. Приложения могут отправлять escape-последовательности в xterm, чтобы заставить
  106. его отправлять escape-последовательности обратно на компьютер при нажатии кнопки
  107. указателя или даже (в зависимости от того, какая escape-последовательность) от-
  108. правлять escape-последовательности обратно на компьютер при перемещении указателя.
  109. Эти escape-последовательности и ответы, называемые протоколом мыши,
  110. задокументированы в XTerm Control Sequences. Они не отображаются в действиях,
  111. вызываемых ресурсом переводов, потому что ресурс не изменяется при запуске xterm,
  112. тогда как приложения могут изменять протокол мыши (т. е. включать, отключать,
  113. использовать разные режимы).
  114. Однако протокол мыши интерпретируется в действиях, которые обычно связаны с
  115. кнопками указателя. Xterm игнорирует протокол мыши в действии выбора вставки,
  116. если одновременно нажата клавиша Shift. Он также изменяет несколько других
  117. действий, если нажата клавиша Shift, например, подавляет ответ с положением
  118. указателя, но не устраняет изменения в выделенном тексте."
  119. sleep 0.1;echo "
  120. └────────────────────────────────────────────────────────────────────────────────┘
  121. "