LINUX.ORG.RU

О развитии GUI

 


1

6

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

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

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

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

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

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

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

★★

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

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

Венда кстати через OLE тоже что-то подобное могла.

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

https://www.youtube.com/watch?v=7RNbIEJvjUA

Начал смотреть.

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

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

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

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

Смотрю дальше, интересно…

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

Угу, у винды есть два слоя, которые помогают наводить такие мосты:

  • Классическое winapi на передаче событий в ивент лупе. Стандартные контроллы типа полей ввода предсказуемо отвечают на команды.
  • OLE.

В винде легко можно программно инстанцировать копию Word-а, например. И заставить его трудиться на благо юзера.

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

С учетом того, что в винде с древних пор присутствовала HTA, позволяющая делать нативные «приложения на HTML» (еще до всякого Метро и без всякого Метро), возможности по скриптованию системы были весьма хороши.

Линуксовый GUI по сравнению с этим просто мальчик для битья.

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

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

Так это же TempleOS

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

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

Главное что бы в будущем бог с тобой не заговорил на эту тему - https://youtu.be/1QPvm7JVh_8?t=29

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

Судя по этим отрывистым кадрам, имеет смысл запустить это в виртуалке.

Неужели мы живём в удивительном мире, где человек, имевший шизофрению, более нормален, чем весь отдел разработки Гнома?

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

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

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

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

А ещё там в классических Mac OS при установке официальных инструментов для разработки появлялся интересный интерактивный терминал MPW Shell или Worksheet:

Его концепция как раз напоминала то, что описал @wandrien в своём посте ниже.

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

Подход действительно был интересный и в чём-то даже удобный. Ибо адок с историей в терминалах с Bash всегда вызывал отвращение, а тут у тебя документ со всей историей набранных команд, редактируй его как хочешь, добавляй, удаляй, модифицируй, комментируй важное. Подсветка синтаксиса тоже из коробки. Увы с уходом классических macOS подобные терминалы тоже ушли и похоже больше нигде подобное не встречалось, разве что в Emacs.

EXL ★★★★★
()

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

ЕМНИП, WinAPI 15 лет назад уже предоставлял часть этих функций. Как минимум, можно было вставлять текст в textbox’ы чужих окон без костылей.

Я согласен, современные GUI все топорнее и хуже.

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

Линуксовый GUI по сравнению с этим просто мальчик для битья.

Это как раз отлично показывает недостатки Рэймондовского Базара и преимущества хорошо спроектированного Собора, который слюниксоеды так ненавидят. В итоге получается низкопробное убогое недоразвитое говно как, например, GTK.

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

Так gtk делает как раз Собор, просто там вместо мозгов хлебушек.

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

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

Вот именно, это вполне конкретные «Они», а не Базар.

Ну вот решили они выкинуть говно под названием Иксы. А лучше не стало. Еще и на эффект второй системы напоролись.

Что ни делает дурак, всё он делает не так. (с)

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

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

Это возможно через интерфейсы для методов ввода.

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

При чём. Вот есть у них gobject. Спроектировали достаточно продвинутую объектную систему с поддержкой интерфейсов и прицелом на интероперабельность между кодом на разных ЯП. Почти изобрели COM.

И казалось бы, логично использовать этот инструмент на полную – проектировать программы как совокупности объектов, реализующих некоторые интерфейсы.

И чо? Нет, они наворачивают по-старинке прибитые гвоздями so-шки с дикой как внутренней, так и межмодульной связностью. Интерфейсы использованы по минимуму, в основном это тупо захардкоженные функции и фиксированные иерархии классов. Каждый релиз gtk – монолитный блоб без архитектуры.

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

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

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

У них для этого dbus, но с gobject он почти никак не интегрирован. А мог бы быть.

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

Не дописал мысль:

В результате вместо работ по архитектуре, имеем «переписывание тестовых редакторов» и «изобретение новых поп-оверов».

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

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

Едрить прогресс

А тебя не напрягает, что вообще-то речь о библиотеке, которая изначально делалась по принципу «как получится» и от которой в среднем требуется отрисовать файлопикер, контекстное меню и иногда ещё меню бар? Или что библиотека не существует нигде за пределами «десктопного» линукса, где не найдешь даже 2-3 презентабельных файловых менеджера с GUI?

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

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

Тебе приснился гипертекст

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

А тебя не напрягает, что вообще-то речь о библиотеке, которая изначально делалась по принципу «как получится» и от которой в среднем требуется отрисовать файлопикер, контекстное меню и иногда ещё меню бар?

Эту библиотеку уже 4-й раз переписывают. Якобы «переписывают».

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

Так все давно поняли, что она никуда не годится. Это эталонная паршивая овца, с которой всякие Steam, Chromium и Electron берут шерсти клок. Ни GTK2, ни GTK3 не перепишешь так, чтобы всё стало как надо, да и никому это не нужно кроме гнома. Оно конечно никуда не пропадет, но это считай уже легаси.

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

Ты не там границу проводишь.

Принципиальная разница проходит между командно-ориентированным и меню-ориентированным интерфейсом.

TUI и GUI оба суть разновидность второго.

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

строго моноширным шрифтом, и лучше даже растровым

Очевидно. Только растровые шрифты нужны. Векторные шрифты (как и сглаживание-размытие шрифтов) — неюзабельное говно.

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

Еще скажи строго моноширным шрифтом, и лучше даже растровым

Не то чтобы это прямо бредовая мысль. То есть, даже в 2024 году нормально настроить сглаживание под конкретный монитор – настолько чудовищный геморрой, что растровый Terminus до сих пор выглядит куда лучше чем любой сглаженный шрифт на экранах с <200dpi. Особенно мыло хорошо видно на чёрных темах со светлым шрифтом, там мыло прямо просвечивает.

Причём я даже не представляю, как все эти шревтоделатели умудряются так в глаза-то долбиться, чтобы так плохо было. И если бы проблема была только у лялеха, я бы ещё понял, но нет – венда и мак тоже вызывают рвотные рефлексы. Хотя у мака официально нет экранов с <200dpi, так что там может и насрать.

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

Ну я сам тоже Terminus’ом пользуюсь в консоли и Alacritty, еще удобно что он полностью Full HD экран заполняет, кириллица разве что там походу болгарская.

Со шрифтами я лично тоже шизу словил - Nerd Fonts все время с зазорами, прогерские с лигатурами никак === нормально не отобразят как три полоски. Все размеры перепробовал, все степени хинтинга, все субпиксельные рендеринки, все lcdfilter’ы - никак, но у меня просто скейлинг 150%, на 100% сидеть невозможно, а на 200% почти невозможно. Хотя стараюсь где можно прописывать числа, которые при умножении на 1.5 дадут целое, но это не работает (кроме конечно же Terminus’а, Alacritty его корректно скейлит, но у него и нет возможности выставить дробный размер).

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

То есть, даже в 2024 году нормально настроить сглаживание под конкретный монитор – настолько чудовищный геморрой, что растровый Terminus до сих пор выглядит куда лучше чем любой сглаженный шрифт на экранах с <200dpi.

Не выглядит. Хорошо хинтированный шрифт выглядит лучше терминуса на экране с 163dpi.

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

То есть, даже в 2024 году нормально настроить сглаживание под конкретный монитор – настолько чудовищный геморрой, что растровый Terminus до сих пор выглядит куда лучше чем любой сглаженный шрифт на экранах с <200dpi.

Не выглядит. Хорошо хинтированный шрифт выглядит лучше терминуса на экране с 163dpi.

Выложи фото экрана (не скриншот), что по-твоему выглядит хорошо. Просто редактор и текст, тёмная и светлая темы.

Потому что если с чёрным текстом на белом фоне ещё норм, то наоборот – мыло мыльное. У меня настольный монитор тоже около 160dpi, есличо.

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

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

Так-то говоря это сильно контекстно зависимая информация. Что именно спрашивать? Где сейчас находится каретка ввода?

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

На TempleOS не смотрел? Не совсем оно, но графика, анимация и 3D как неотъемлемая часть текстового файла там были.

Автора с нами уже нет, но исходники остались.

P.S. А, выше уже подсказали.

P.P.S. По случаю перечитал биографию Терри. Ё-моё, он ведь всего на 2 недели старше нас с Линусом был, оказывается…

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

Венда кстати через OLE тоже что-то подобное могла

powershell скрипты умеют. Прикол в том, что раньше через win32com что угодно могло, но только 32-bit приложения/интерпретаторы (!)

Shadow ★★★★★
()

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

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

plumbing из Plan 9

Perl urxvt plumbing script: urxvt-plumb

anonymous
()