LINUX.ORG.RU

О развитии GUI

 


1

6

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

  1. Не существует способа узнать положение клавиатурного курсора в окне стороннего приложения. Это необходимо, чтобы открывать произвольные меню и панели «по месту» ввода.
  2. Не существует способа узнать выделенный текст в окне стороннего приложения. Буфер PRIMARY предназначен не для этого, соответственно его содержимое не сбрасывается после сброса выделения.
  3. Не существует надежного способа вставить текст в окно стороннего приложения. Используемые сейчас варианты - это костыли с эмуляцией нажатия клавиш, которые в зависимости от приложения, могут либо не работать, либо давать непредсказуемые эффекты.

Ровно этот же список я мог бы назвать 15 лет назад, с тех пор ничего не изменилось.

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

Банальные примеры подобных интеракций:

  • Вставить текущую дату в выбранном пользователем формате.
  • Выполнить выделенный текст как команду оболочки и вставить результат.

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

★★

Последнее исправление: wandrien (всего исправлений: 1)

Банальные примеры подобных интеракций:

  • Вставить текущую дату в выбранном пользователем формате.
  • Выполнить выделенный текст как команду оболочки и вставить результат.

В emacs’е все это есть уже 20 лет

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

С тех пор, как Xerox изобрела окошки, индустрия не додумалась ни до чего более архитектурно продвинутого, чем программы «всё в одном», которые в некоторых случаях еще имеют костыли в виде плагинов.

И данное архитектурное убожество еще кто-то умудряется называть «нормальными программами», а архитектурно чистое решение - костылями.

Совсем все ориентиры шиворот навыворот.

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

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

А твое «архитектурно чистое» решение дальше плоского текста не работает.

anonymous
()

Ровно этот же список я мог бы назвать 15 лет назад, с тех пор ничего не изменилось.

Потому что это никому не нужно?

Вместо решения задач подобного рода, «разработка GUI стека» сосредоточена

Потому что там такие же как ты сидят и, например, вместо проведения фундаментальных исследований с последующим выпуском стандарта по human-computer interaction и запиливанием эталонной расширяемой реализации, делают всякое тупое говно.

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

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

Ты описал пример, которому ничего кроме плейнтекста не требуется.

А твое «архитектурно чистое» решение дальше плоского текста не работает.

И теперь жалуешься, что плейнтекста недостаточно.

Давай придумай другой пример.

Но самое главное:

Ты ведь знаешь, что механизм selections позволяет обмениваться данными любого MIME-типа? Видимо, не знаешь.

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

Потому что там такие же как ты сидят и, например, вместо проведения фундаментальных исследований с последующим выпуском стандарта по human-computer interaction и запиливанием эталонной расширяемой реализации, делают всякое тупое говно.

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

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

Видимо, это как раз та мотивация, которая должна меня сподвигнуть всё бросить и начать бесплатно и принудительно «осчастливливать» человечество.

Нет, это не «таким как мне» «ненужно». Это ВАМ «ненужно». Нечего перекладывать ответственность.

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

У тебя с аргументами тоже беда.

Мой аргумент очевиден для любого, кто хоть раз рефакторил код, разбивая монструозную функцию с самоповторами кода на набор чётких и коротких функций или классов, которые потом легко вызываются еще из 20 разных мест кода, инкапсулируя задачу.

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

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

Речь не о мыши. Речь о позиции курсора ввода.

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

Но все называют курсором и то, и то. Отсюда путаница.

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

Забудь про мышь, речь не про мышь.

Когда в текстовом редакторе я нажимаю Shift + F10, контекстное меню открывается рядом с текущей строкой.

Задача – чтобы так же могла сделать сторонняя программа, которая исполняется в другом процессе.

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

А тут вопрос безопасности всплывает. Вот выбрал юзверь, значит, пароль (причём даже не в текстовом файлике, а, например, в эмуляторе терминала из выхлопа pass lk.pro-E-Bank.ru), а сторонняя программа его — хренакс, скопипастила и отправила Пашке на валидацию…

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

Это и сейчас так же работает, содержимое выделенного текста публично доступно всем.

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

В таком случае программа может делать только то, что предусмотрено манифестом, к ней приложенным.

А по итогу ничего не сделано, мы имеем дырявые Иксы, в которых всё можно, и вейланд, в котором архитектурно ничего нельзя, потому что разрабы не смогли понять сущность подхода «отделение механизма от политики».

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

Это должно решаться интеграцией дисплейного сервера с MAC наподобие SELinux или AppArmor.

Вот, честно, хоть как-то вменяемо реализованную мандатку видел разве что в Астре (да и то…) Так-то, кмк, ты в нужную сторону воюешь, но выглядит это как задача опенсорсу непосильная в принципе, потому что требует волевых решений и насильной унификации, а у нас тут каждый второй, не считая каждого первого, уникальнейшая снежинка с NIH-синдромом, плюс ещё корпорации норовят свои неповторимые стандарты (у каждой, ессно, свой) притащить, в итоге маемо що маемо.

У меня голова болеть начинает, как представлю, сколько надо всего учесть, чтоб взять, да и спроектировать с нуля графический стек, да чтоб расширялось, да чтоб расширялась именно функциональность, а не дыры…

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

35 лет уже гуйня находится в таком состоянии, что под неё только кейлоггер и возможно написать, а что-то полезное – шиш.

А форумные неадекваты живут в мире грёз, красота.

wandrien ★★
() автор топика

В принципе можно поперёк графической системы изобразить нечто-подобное. В лиспе есть SWANK, который позволяет подключиться к удалённому процессу и менять состояние программы напрямую. В plan9 можно изобразить часть ресурсов программы в виде файловой системы и дать её подмонтировать.

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

Без знания внутренней кухни тулкита не получится. А со знанием - проще собрать пропатченный тулкит.

Я тут пока хожу по делам, как раз думаю на тему пропатчить тулкит.

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

Дык надо к выделенному тексту прикрутить меню по пкм, типа «передать текст в такую-то программу (из настраиваемого списка)» или «расшарить для всех в буфер обмена». А то внатуре несекурно.

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

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

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

Дык надо к выделенному тексту прикрутить меню по пкм, типа «передать текст в такую-то программу (из настраиваемого списка)» или «расшарить для всех в буфер обмена». А то внатуре несекурно.

Я считаю, что несекурность более правильно исправлять на уровне мандатного контроля доступа.

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

Я в своих рассуждениях стараюсь придерживаться принципа, что «приложение» или «окно» – это просто сущности,которые умеют сообщать о себе некоторую информацию или отвечать на определённые запросы/команды, поданные извне. А кем и для чего поданы эти команды – не их ума дело. Точно так же как grep не знает, для кого и зачем он фильтрует строки.

Если же приложение знает, что есть какой то «список программ», в которые можно «передавать текст» – это уже другой уровень связности компонент в системе.

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

Корпы уже и так сделали из Линукса Винду, где обычный пользователь вообще не может ни на что влиять, а программист (вот как ты) может пилить только мелкие проекты, которые в апстрим вряд ли пролезут. Даже патчи хрен примут в ГТК от левого чела. Хз чем сейчас Линукс отличается от Винды, и зачем за него копротивляться.

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

Речь о позиции курсора ввода.

Ты наверняка в курсе, но я не могу не упомянуть что и в tty позицию курсора узнать (выставить легко) мягко говоря проблематично. И в DOS это тоже было костыликом.

Вообще, проблема растёт сразу из нескольких мест:

  • Переключившись на другое приложение, ты переключаешь и ввод, а значит позиция курсора в неактивном приложении должна быть NULL, так как в противном случае ввод будет идти и туда;
  • Трекать позицию курсора в одном активном поле ввода проблематично, а если ещё и в неактивном (даже внутри одного приложения) — б😱ль;
  • Поля ввода с форматированием это вообще наркомагия;

Может ещё что-то забыл.

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

Анонимусы на ЛОРе почему-то считают ответ самому себе «разговором с самим собой».

И при этом сами постоянно отвечают сами себе. На любые вопросы в ответ звучит типичная отмазка «это был другой аноним».

Gentooshnik ★★★★★
()

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

anonymous
()

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

Ну перечисленное является с точки зрения «развития гуя» адским несекьюрным зашкваром и вот целый вяленд придумали чтобы это было не просто тяжело а в принципе невозможно. То есть это не развитие а деградация.

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

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

Ну перечисленное является с точки зрения «развития гуя» адским несекьюрным зашкваром

Да, системы контроля доступа в 2024-м еще не изобрели. Какая жалость.

wandrien ★★
() автор топика