LINUX.ORG.RU

Буфер обмена и другие нестандартные данные в удаленных терминалах

 , , , ,


1

1

В Linux мы до сих пор работаем с текстовыми терминалами. Многим это представляется удобным. Но к текущему моменту накопился ворох проблем, которые никак не решается.

Например, тексты, с которыми происходит работа в терминале (в редакторе) зачастую шире и длиннее, чем экран терминала. И до сих пор не существует возможности скопировать текст, уползающий в редакторе «за экран», в буфер обмена.

Так же, в терминал не передаются нажатия клавиш-модификаторов, таких как Shift, Alt, Ctrl. Их коды передаются только с кодами символов основной клавиатуры. И существующие релизации плохо работают с не-символьными клавишами.

Из-за этих (и других) проблем до сих пор в *NIX не существует человеческого текстового редактора для терминала. Есть vi/vim/emacs с марсианскими интерфейсами, в которых стандартные действия в корне отличаются от тех, которые предусмотрены в DE. Человеку трудно работать в таких редакторах и DE-окружении, так как постоянно приходится для одних и тех же стандартных действий использовать разные клавиши и их сочетания. Это как минимум неэргономично.

Последняя сильная попытка сделать человеческий текстовый редактор для терминала - редактор micro. В нем искаропки сделано выделение шифтами+стрелками, работают стандартные сочетания Ctrl+C/V, и происходит копирование в/из буфера обмена средствами редактора (через xclip/xsel) а не терминала. Наконец-то это сделали, ведь XXI век на дворе.

И все, казалось бы, замечательно, за одним исключением: эти долгожданые возможности толком не работают при удаленном редактировании файлов. И если работу шифтов+стрелок и работу Ctrl+C/V еще можно настроить, то с буфером обмена полный облом. Он просто не может работать.

И сами авторы micro говорят: да, все эти проблемы есть, но ничего сделать не можем. При запуске micro локально пользуйтесь встроенным методом выделения и копирования текста. При запуске по SSH для копипаста используйте мышку+модификатор и клавиши копирования, которые предоставляет терминал. Да, это неудобно, неэргономично и выносит мозг. Но вот так. Да, и не забывайте, что сможете скопировать только символы на экране. Если текст шире/длинне экрана, тогда упс. Это же терминал. XXI век.

В связи с вышеперечисленным можно сформулировать несколько путей решения данной проблемы для редактора micro:


1. Продавить новый стандарт на протокол терминала, в котором будет сделана возможность передавать произвольные данные, в том числе и организовать буфер обмена. Дождаться, когда линуховые терминалы будут работать с новым стандартом. Допилить под этот стандарт редактор micro.

Реализуемость: нереально.


2. Забить на стандарты и сделать специальный терминал, который будет понимать самодельный расширенный протокол. Допилить под него micro.

Недостаток: все возможности micro все так же не будут работать в стандарных терминалах. Поэтому удобства нет.

Реализуемость: вполне возможно.


3. Сделать для micro специального сетевого клиента, который цепляется к удаленному хосту, где запущен micro, и пробрасывает между удаленным micro и локальным компьютером туннель, через который гоняются данные, не предусмотренные в терминальном протоколе.

Достоинства: возможность работать в любом эмуляторе терминала без его доработки. Для пользователя все будет выглядеть так, как будто он работает с локальным редактором.

Недостатки: слишком замороченное подключение - запустить micro в SSH сессии, и запустить клиента. При последовательном редактрировании нескольких файлов соединение клиента будет переустанавливаться, ведь редактор запускают/останавливают. Для клиента надо будет выделять отдельный порт, что приведет к дополнительным настройкам фаивола, если таковой используется.

Реализуемость: вполне возможно.


Вопрос: если начать заниматься решением данной проблемы, то какой путь надо выбрать? Я пока склоняюсь к третьему пути, потому что в центре внимания должен быть пользователь, ибо компьютеры создаются для людей а не наоборот.

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

В общем, прошу высказаться по данному вопросу.

★★★★★

Ответ на: комментарий от Xintrea

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

Признаю, я иногда по невыспанности в Excel'е нажимаю :w вместо Ctrl+S. Но это бывает редко.

Скорее тебе трудно признать, что переключаться между двумя методами не так уж и сложно. Это как владеть двумя языками: ты ж не путаешь русский и английский?

Kroz ★★★★★
()
Ответ на: комментарий от Deleted

По ссылке же написано:

Зачем нужен еще один переключатель клавиатуры?

Кратко: если нужно переключаться Шифтами, то переключение должно поизводиться при отжатии Шифта. И только в том случае, если была нажата и отжата только клавиша Шифт (чистое нажатие).

Представь, что было бы если бы переключение срабатывало при нажатии шифта. Человек находится в EN раскладке, ему нужно написать заглавную букву A. Он нажимает Шифт, раскладка при нажатии переключается на RU, и при нажатии A на экране появляется буква Ф.

Чтобы это лучше понять, вот видео: http://www.youtube.com/watch?v=z0EA5wllB14

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Kroz

Не расскажешь почему так?

ORLY?

Читаю ICCCM:

The cut buffers consist of eight properties on the root of screen zero, named by the predefined atoms CUT_BUFFER0 to CUT_BUFFER7. These properties must, at present, have type STRING and format 8. A client that uses the cut buffer mechanism must initially ensure that all eight properties exist by using ChangeProperty requests to append zero-length data to each.

Копирую текст в Firefox.

Делаю:

vadim@aquila:~$ xprop -root CUT_BUFFER0
CUT_BUFFER0:  not found.
vadim@aquila:~$ 

Нет такой буквы в этом слове.

Не расскажешь почему так?

Нет, у меня тоже основные KDE, с запущенным Clipboard (или как тем его), и я могу про это не париться. Не едиными ж кедами...

Еще раз:

Все приложения поддерживают PRIMARY.

Абсолютное большинство приложений поддерживает CLIPBOARD.

cut-buffers не поддерживает никто. Obsolete. Deprecated. Nothing. Null.

Deleted
()
Ответ на: комментарий от Xintrea

Чукча очень невнимательный читатель. %-)

Так. Ага. Щас соображу... А почему приложение работает с событиями ядра? Почему иксовую раскладку не переключать по иксовым же событиям, как это сделано в xneur?

Deleted
()
Ответ на: комментарий от Deleted

А почему приложение работает с событиями ядра? Почему иксовую раскладку не переключать по иксовым же событиям, как это сделано в xneur?

Потому что XNeur не умеет нормально работать с иксовыми событиями:

Переключатель клавиатуры LoLo Switcher v.0.15 (комментарий)

И до сих пор не научился. А он разрабатывается уже 10 лет как.

А выражается это в том, что в одних программах переключатель работает, в других - нет. И автор даже признал, что проблема есть. Но тут же сказал, что, например, для xterm проблема нерешаема, и это авторы xterm должны допилить xterm так, чтобы xterm мог работать с переключателем клавиатуры xneur! Я считаю, что автор невменяемый.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

А ты посчитай, сколько времени ты уже потратил на борьбу с ветряными мельницами.

Немного на самом деле. Я же пользуюсь тем что есть. ПлАчу, мучаюсь, но пользуюсь. Понимаю, что специалисты по взаимодействию человек-машина ужаснулись бы от того, что понаворотили в линупсе. Понимаю, что знаний этих специалистов у линупсомакак нет. Их все устраивает. Периодически взбрыкиваю и порождаю треды как вот этот. Ведь призрачная надежда на micro есть, и из него получится человеческий консольный редактор.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Deleted

vadim@aquila:~$ xprop -root CUT_BUFFER0
CUT_BUFFER0: not found.
Нет такой буквы в этом слове.
Не расскажешь почему так?

Не знаю. xprop - твоя тулза. Наверное, ты что-то не так делаешь. Потому что:

$ xsel -o -seletion buffer-cut
$ xsel -o -seletion secondary
Error: target STRING not available

То есть буквы нет для sceondary, для buffer-cut она есть.

Кстати, в моем пример два буфера: primary и clipboard. Да, не buffer-cut, но их всё равно два. Потому я и пытался выяснить у ТС'а насколько глубоко он интересовался вопросом.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

xprop - твоя тулза.

vadim@aquila:~$ man xprop | grep -A1 AUTHOR
AUTHOR
       Mark Lillibridge, MIT Project Athena

Заглянул в паспорт: нет, вроде Вадим с утра был.

Наверное, ты что-то не так делаешь.

Например, читаю спецификации. И маны.

man xsel:

       The X server maintains three selections, called PRIMARY, SECONDARY and CLIPBOARD. The PRIMARY
       selection is conventionally used to implement copying and pasting via the middle  mouse  but‐
       ton. The SECONDARY and CLIPBOARD selections are less frequently used by application programs.
       This program operates on the PRIMARY selection unless otherwise specified.

       Selection options

       -p, --primary
              operate on the PRIMARY selection (default).

       -s, --secondary
              operate on the SECONDARY selection.

       -b, --clipboard
              operate on the CLIPBOARD selection.

Кстати, в моем пример два буфера: primary и clipboard.

Бинго.

— Есть cut buffers и selections.
— Нет, cut buffers давно не используется. А из трех стандартизированных selections реально используется два.
— Вот пример с cut buffers.
— Нет, в этом примере нет cut buffers.
— Кстати, в моем пример два selections: primary и clipboard. Но я всё равно прав.

Вот и поговорили, чо. Неужели ЧСВ не даёт честно сказать: «запутался. был не прав.»?

Но ты что-то говорил про DE. Я всё еще хочу услышать развёрнутую мысль.

Deleted
()
Ответ на: комментарий от Xintrea

У xneur код невысокого качества, но я же не предлагаю тебе им пользоваться. А только посмотреть идею. Насколько я знаю иксовый протокол, ничего невозможного в этом нет.

Deleted
()
Ответ на: комментарий от Xintrea

специалисты по взаимодействию человек-машина
что понаворотили в линупсе.
знаний этих специалистов у линупсомакак нет

Каких именно знаний? Двигать засаленным пальцем квадратики в десяточке?

Тебе дали два крутых исторических столпа редактирования: vim и emacs.

Выбери из этих двух то, что подходит тебе больше, ну или объедини подходы, emacs это позволяет, даже запилили вон крутой spacemacs.

Ты пытаешься решить костыльную инженерную задачу. Поставь emacs, и погоняй tramp, увидишь, насколько костыльно вообще что-то редактировать в удалённом терминале. Он не для этого нужен.

Файлы редактировать нужно локально.

А если, как ты говоришь, не можешь привыкнуть и осилить пяток элементарных команд вима, из-за того, что тебе приходится каждый раз редактировать что-то в новых условиях, которые понимают только ctrl/c/v, то тогда тебе похрен на редактирование, ибо всё, чем ты занимаешься, это правишь пару байтиков. А в чём это делать, не важно.

Поэтому, освой нормальный редактор (любой вообще, sublime, vim, emacs, kate, gedit, что-то еще). И забудь про удалённое редактирование в терминале.

Может тогда и поймёшь, почему в линуксе не уживаются «специалисты по взаимодействию человек-машина». Этих криворуких говнюков типа джобса нужно гнать ссаными тряпками.

anonymous
()
Ответ на: комментарий от Deleted

> xprop - твоя тулза.
Заглянул в паспорт: нет, вроде Вадим с утра был.

И почему я знал, что ты так ответишь?
Я имел ввиду, что это ты знаешь что эта тулза делает. Поэтому только ты можешь сказать что ты делаешь не так. Потому как другая тулза как минимум признает существование cut buffer.

Вот и поговорили, чо. Неужели ЧСВ не даёт честно сказать: «запутался. был не прав.»?

Запутался, был не прав, второй буфер - не cut buffer.
Но суть моего поста было в том, что их, буферов, более одного. Поэтому говорить про «обобщесистемный буфер обмена» - некорректно.

Но ты что-то говорил про DE. Я всё еще хочу услышать развёрнутую мысль.

Запутался, был не прав, наверное не правильно называть это «DE'шый буфер обмена».
И еще раз повторю: суть проблемы не в названии, а в том, что их два, и какой конкретно буфер ТС хочет передавать по ssh и насколько он привязывается к конкретному DE (так как некоторые DE это менеджат, некоторые нет).

Так лучше?

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Вот эту мысль и я пытаюсь донести: нет никакого DE-шного буфера. Есть два буфера, которые были определены в документах в задолго до всяких DE.

конкретному DE (так как некоторые DE это менеджат, некоторые нет).

У этих буферов разное назначение: один для выделенного текста, второй для специально запомненного. Те, кому такое разделение не нравится, ставят всякие тузлы типа parcelite, которые умеют синхронизировать буферы. Но никаких космических технологий типа «это работает только в KDE» (или наоборот - не работает) тут нет.

Потому как другая тулза как минимум признает существование cut buffer.

Кстати, в моём мане на xsel нет ни слова про cut buffer. Мы точно про одну тулзу говорим?

$ xsel --version
xsel version 1.2.0 by Conrad Parker <conrad@vergenet.net>

Deleted
()
Ответ на: комментарий от anonymous

Каких именно знаний? Двигать засаленным пальцем квадратики в десяточке?

В Советском Союзе эти знания назывались инженерной психологией. Я эти знания имею в виду, а не твои представления о десяточке и джобсах.


Тебе дали два крутых исторических столпа редактирования: vim и emacs. Выбери из этих двух то, что подходит тебе больше

Раньше я выбирал FarEdit под Wine, а теперь выбираю micro. И скорее всего этот micro мне еще придется самому дописывать.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Немного на самом деле.

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

Кстати, про копирование по Ctrl-c. Я долгое время использовал MS-DOS. В большинстве приложений для копирования использовался Ctrl-Ins/Shift-Ins/Shift-Del, и это было просто и понятно. И я помню, как было дико использование Ctrl-c/v/x мне и моим знакомым, тоже привыкшим ко старому сочетанию. Я каждый раз боялся Ctrl-c нажать, это ведь могло просто отрубить приложение.

А теперь ты нам тут вещаешь, что Ctrl-c/v — единственно-правильный way.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от Xintrea

в линупсе

Дело-то не в линуксе, а в жутком legacy, которое тянется со времён летописных.

Сделать систему без legacy можно. Но это получится BeOS, которая вообще никому не нужна.

Deleted
()
Ответ на: комментарий от Deleted

Мы точно про одну тулзу говорим?

Сорри, не xsel, а xclip.
Как-то не задался у меня сегодня день в плане точности.

Но там в мане тоже нет про cut-buffers. Инфу брал отсюда: http://blog.rot13.org/2009/11/x11-selection-clipboard-and-how-to-use-them.html

$ xclip -version
xclip version 0.13
Copyright (C) 2001-2008 Kim Saunders et al.
Distributed under the terms of the GNU GPL

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от Deleted

без legacy

О каком легаси речь? Человеку нужен редактор, он есть в линуксе. Но человек почему-то предпочитает жрать говно.

Есть же нормальные редакторы. Emacs, sublime, gedit, kate, gvim, что-то еще. Не требуют терминала вообще.

anonymous
()
Ответ на: комментарий от i-rinat

Я долгое время использовал MS-DOS. В большинстве приложений для копирования использовался Ctrl-Ins/Shift-Ins/Shift-Del, и это было просто и понятно.

Вот скажи мне, как ты запоминал эти сочетания? Имею в виду, как ты их не путал? Я тоже ими пользовался, но все время мучался, вспоминая, что нужно нажать Shift+Ins или Ctrl+Ins. Были и другие сочетания типа Ctrl+K+h Ctrl+K+y (вроде так) в доснавигаторе. Но и их нельзя назвать удобными.


И я помню, как было дико использование Ctrl-c/v/x мне и моим знакомым, тоже привыкшим ко старому сочетанию. Я каждый раз боялся Ctrl-c нажать, это ведь могло просто отрубить приложение.

Зато было время, когда даже на клавиатурах без клавиши Win на боку кнопок было написано их действие: на Ctrl+C - copy, на Ctrl+V - paste и все остальные действия. То есть, впечатано в хардваре. И запомнить было очень просто: C-copy, V-вставка, X-перечеркивание означал вырезать, Z-зачеркивание зигзагом - то есть отмена. Причем саму клавишу Ctrl запоминать ненужно, она всегда одна и та же. А какие мнемотические правила были у тебя для запоминания всевозможных сочетаний Shift, Ctrl, Del, Ins?

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от anonymous

Да оно везде, легаси. Терминал — легаси. sh — легаси. Иксы — легаси. Но без этого легаси ничего не заработает, нельзя его просто так выкинуть на мороз.

Человек хочет, чтобы всё было однотипненько, предсказуемо, задизайнено одним большим куском.

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

Есть же нормальные редакторы. Emacs, sublime, gedit, kate, gvim, что-то еще. Не требуют терминала вообще.

Это да.

Deleted
()
Ответ на: комментарий от Xintrea

Вот скажи мне, как ты запоминал эти сочетания?

Легко. А как ты запоминаешь, что Alt+Tab - переключить окно, и тэ дэ?

Я тоже ими пользовался, но все время мучался, вспоминая, что нужно нажать Shift+Ins или Ctrl+Ins.

Ты что-то говорил про моторную память. Вот это она и есть. Запоминаешь и пользуешься автоматически.

Но и их нельзя назвать удобными.

Они удобны для нажатия. В отличие от Ctrl+X/C/V, ради которых приходится ломать пальцы на левой руке.

Зато было время, когда даже на клавиатурах без клавиши Win на боку кнопок было написано их действие: на Ctrl+C - copy, на Ctrl+V - paste и все остальные действия. То есть, впечатано в хардваре. И запомнить было очень просто: C-copy, V-вставка, X-крестик означал вырезать, Z-зачеркивание зигзагом - то есть отмена. Причем саму клавишу Ctrl запоминать ненужно, она всегда одна и та же. А какие мнемотические правила были у тебя для запоминания всевозможных сочетаний Shift, Ctrl, Del, Ins?

А какие мнемонические правила нужны, чтобы не путать газ, тормоз и сцепление? Это моторная память.

Deleted
()
Ответ на: комментарий от Xintrea

Вот скажи мне, как ты запоминал эти сочетания?

Не помню уже, это почти 20 лет назад было. Помню, что путался поначалу. Может, и мнемоники были, этого уже не помню.

Нажимать их на полноразмерной клавиатуре было удобнее, чем комбинации с Ctrl.

на боку кнопок было написано их действие

Видел такие. Они мне клааиатуру Дельта-С напоминали. Это клон ZX-Spectrum. Бессмымленные и беспощадные.

И запомнить было очень просто: C-copy, V-вставка, X-перечеркивание означал вырезать, Z-зачеркивание зигзагом - то есть отмена.

И Ctrl-a от английского all или от русского фсё.

i-rinat ★★★★★
()
Ответ на: комментарий от Deleted

А какие мнемонические правила нужны, чтобы не путать газ, тормоз и сцепление?

У меня такие:

  • Тормоз между ног! - это самое главное правило.
  • Газуем правой - то есть, чтобы увеличить скорость, жмем правой. Право - это увеличение, улучшение (логично).
  • Слева сцепление - просто по остаточному принципу.


Это моторная память.

... и даже она не всегда помогает. Постоянно случаются аварии из-за того что перепутали педали. То есть, путают педали даже если они все время на одном месте. Что уж говорить про ситуацию, когда тормоз возле зеркальца.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

... и даже она не всегда помогает. Постоянно случаются аварии из-за того что перепутали педали.

Поэтому расположение органов управления должно быть по возможности естественным. Жмёт-то человек на автомате, и ошибается тоже на автомате. Надо помогать моторной памяти, упрощая задачу.

Ctrl/Shift+Insert/Delete — удобно нажимать большим пальцем + любым другим (в зависимости от размера конкретной ладони; я вот средним прожимаю). А Ctrl+X/C/V — не удобно.

Но если кому-то Ctrl+X/C/V удобнее, да ради бога.

Кстати, о мнемонике. Мнемоника может быть такая: Shift — сдвиг. Операции с Shift изменяют текст (сдвигают строки). Shift+Insert — вставляет буфер в текст (Insert — вставка). Shift+Delete — вырезает выделение из текста в буфер. (Delete — удаление; часть текст исчезает)

Ну а Ctrl+Insert — копировать, по остаточному признаку.

Deleted
()

в твой любимый $EDITOR не завезли :set wrap и родилось вот это? или я чего-то не понял?

ЗЫ тлдр

mos ★★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.