LINUX.ORG.RU

О развитии GUI

 


1

6

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

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

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

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

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

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

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

★★

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

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

у меня были похожие сны, но только наяву

примерно вот так https://youtu.be/ainUEAYCHIk

https://youtu.be/yBu0M8iCtVw

и вот так https://youtu.be/znMYZOGQ3S0

anonymous
()

самая продвинутая автоматизация в этом смысле была в Amiga AREXX: vvedenie-v-programmirovanie-na-arexx

у программ были стандартные «порты», куда можно было слать сообщения

программы поддерживали высокоуровневую автоматизацию через порты

дефолтные GUI виджеты, которые в MUI (ZUNE в AROS) поддерживали низкоуровневую автоматизацию, на уровне отдельных кнопок

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

я вообще считаю вслед за софтпанорамой что более правильный Emacs – это XEDIT и его форки (KEDIT, THE, X2)

например, в X2 есть NNTP клиент реализованный на самом REXX

THE есть с обычным REXX-ом (Regina) или c ООП (ooRexx) в духе смоллтокового ООП

правда, командный интерфейс там ещё старый довольно а не ООП. но довольно мощный.

например, тот же фолдинг делается скриптом

скриптом на REXX вообще в THE делается всё что угодно.

автоматизация браузера на AREXX (Mosaic): вот

/* Called from Mosaic to cause emacs-w3 to display the current document. */
/* Gnu emacs on the Amiga, like AMosaic, has extensive arexx support */ 
/* If there isn't an emacs we can talk to, create one */
if ~show('P', 'EMACS1') = 0 then do
    address command                          /* Send commands to the shell */
    call pragma 'stack', 200000              /* stack does not grow on the Amiga */
    'run nil: gnuemacs:temacs'        /* Run emacs */
    'WaitForPort' portname                   /* Wait for it to be ready */
    address                                  /* Now send commands to Mosaic */
    end

options results                              /* Request a result string from mosaic */
'get url'                                    /* get the url into the variable result */
address EMACS1 '(w3-fetch "'result'")'       /* Now, tell emacs to use w3 to fetch that URL */

exit 0                                       /* Exit cleanly */

arexx-wikibooks и в конце ссылки, например:

arexx guide в формате Amiga Guide на aminet

это кстати ещё один гипертекст типа info из емакса.

только форматы картинок например были сделаны плагинами и в итоге были расширяемыми.

arexxguide

wikibooks/Aros/Rexx#Program_IPC

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

из API: arexx-wikipedia:

BUTTON NAME/A, LABEL/K, WINDOW/K, PROMPT/S, CMD/F
Some applications could set aside a number of action gadgets (buttons) to which the user can assign ARexx scripts. The BUTTON command would allow the user to modify these special gadgets.

SELECT NAME/A, FROM/K, NEXT/S, PREVIOUS/S, TOP/S, BOTTOM/S
SELECT is used to select an object from a list of similar objects. The main use for this command is to allow the user to select the current project from a list of projects. Returns the name of the current project.

FROM specifies the list from which the user can select. The default should be the main project list.
NEXT specifies that the next object on the list should be selected.
PREVIOUS specifies that the previous object on the list should be selected.
TOP specifies that the first object on the list should be selected.
BOTTOM specifies that the last object on the list should be selected.


GETATTR OBJECT/A, NAME, FIELD, STEM/K ,VAR/K
GETATTR obtains information about the attributes of an object.

OBJECT specifies the object type to obtain information on.
NAME specifies the name of the object.
FIELD specifies which field should be checked for information.
STEM (keyword) specifies that the information is to be placed in the following stem variable rather than the RESULT field.
VAR (keyword) specifies that the information is to be returned in a simple variable.
In the above OBJECT argument, the user could be seeking information on the attributes of any of the following items:

APPLICATION
PROJECT
WINDOW
PROJECTS
WINDOWS

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

да и вообще, поддержка ARexx добавлялась несложно.

даже если ничего не добавлять а просто поддерживать порты сообщений – дефолтно можно было управлять MUI гаджетами

как и меню, кнопками, окнами и т.п.

… капча подсовывает круги на полях разгадывать…

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

похоже что тебе снилась Temple OS либо Mother Of all Demos

Mother of all demos на хабре статья1 статья2

Брет Виктор: Несколько слов о Дугласе Энгельбарте [432794](https://habr.com/ru/companies/engelbart/articles/432794/

забудьте про сегодня, просто подумайте о том, что он делал, с точки зрения его целей.

Многие эксперты, к сожалению, часто упускают суть его работы, потому что они рассматривают всё как техническую задачу. Энгельбарт посвятил свою жизнь проблемам человечества, технологии были лишь частью их решения. Когда я читаю интервью экспертов с Энгельбартом, я представляю, как они брали бы интервью у Джорджа Оруэлла, задавая глубокие вопросы про его пишущую машинку.

Это, как если бы вы взяли человека, который изобрёл письменность, и назвали бы его создателем первого карандаша. (Эта аналогия наиболее точно показывает суть проблемы.)

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

Проблема с утверждением, что Энгельбарт «изобрёл гипертекст» или «изобрёл видеоконференции», состоит в том, что вы пытаетесь осмыслить прошлое, опираясь на настоящее. «Гипертекст» — это понятие, которое имеет конкретное значение для нас сегодня. Говоря, что Энгельбарт изобрёл гипертекст, вы приравниваете это же значение работам Энгельбарта.

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

Но в случае с Энгельбартом вы теряете суть особенно сильно.

Наш гипертекст не то же самое, что гипертекст Энгельбарта, потому что он предназначен для других задач. Современные видеоконференции не то же самое, что видеоконференции Энгельбарта, потому что они также созданы для другого. Они могут выглядеть внешне похожими, но имеют разный смысл. Их можно назвать омофоны, если вам так будет понятнее.

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

я тоже пытался: отсюда и выше по треду

впрочем, откуда мне знать? может, тебе Lain снилась и её сериальные эксперименты. а ещё oscean и ronin

или мемекс какой-нибудь

… главное, чтобы тебе метапрог (тоже Ronin или dotgrid ) какой-нибудь не приснился…

а вот сотня зайцев тыц obsolence с варварой и uxn гораздо лучше продвинулась в осознанных сновидениях :))

у них даже свой метапрог имеется: orca :)))

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

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

оно могло бы работать дальше плоского текста, если эту идею «plumbing» из plan9 и inferno подогнать под ЯОС например

A2: текст это объект как в поверщели, только здесь можно реализовать (например, паттерном carrier & rider) наследование между объектами, и например, запускалка вроде plumbing становится объектно-ориентированной

см. исходники StdInterpreter и подобных коммандеров, интеркликов мышкою и т.п.

там выцепляются цепочки текста как объектов – из которых получаем текст вида Module.Command Foo bar baz ~ который интерпретируем и запускаем.

потом,

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

плагин для этого делать совершенно не обязательно. например в org-capture из Emacs org mode реализуется через bookmarklet

а вообще можно было бы и расширяемый интерфейс плагинов подумать

вот например в Dillo (недавно его реанимировали на гитхабе) появился интерфейс плагинов и там gopher, spartan, gemini, ipfs

и работает всё через чисто текстовый интерфейс, stdin/stdout

в plan9 тоже есть например «командный файл» /dev/window/ctl, /net/tcp/12345/ctl, /net/udp rtfm , dial(3)

см: Сетевая_организация_в_Plan_9#2.3_Устройства_протокола

также см. faq.l13d:

How do you set up a TCP connection?
  Usually don't care that it's a TCP connection!
  E.g., want to talk SMTP (mail protocol) to host mail.stanford.edu
  Open /net/cs,  Write that you want SMTP channel to mail.stanford.edu
  Cs says:  open file /net/tcp/clone, write "connect 171.67.20.25!25"
  Do that, then read clone file, get back, e.g., "5".
  This means the file you opened as clone is really /net/tcp/5/ctl
  So open /net/tcp/5/data to read and write data to SMTP server

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

например тех же irc ботов (и там в contrib была парочка таких)

остальные драйвера устройств сделаны похожим образом:

  • *ctl файл куда писать команды (текстовые)
  • и обычный каталог с фс драйвера, отображаемой через bind
  • и какой-то файл типа *n/data куда нужно читать или писать данные (не обязательно текстовые, возможно гипертекстовые бинарные)
anonymous
()

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

так тебе надо ARexx с портами приложений и командой ADDRESS myapp в нужный порт чтобы рулить любым приложением, даже дефолтными гаджетами – или плюмбинг из Plan 9 и Inferno?

см. выше urxvt-plumb

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

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

CUA, BOOPSI, ARexx message ports, MUI (shareware gadget library), ZUNE (AROS MUI’s opensource clone)

Plan 9, Inferno: plumbing

sam, acme: plumbing

A2, BBCP: commanders, StdInterpreter

TemplateOS

eev в emacs, hyperbole в GNU emacs/XEmacs

ну и т.п.

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

целый архитектурный слой, на котором это решение должно располагаться.

AREXX и порты приложений

OS/2 и реализация Workbench: ОО десктоп на SOM, SOM объекты можно дёргать из REXX

dbus и systemd, лол :)

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

Гуй это треш и угар.

да ладно, вот в девятом плане меню приложения например легко реализуется : plan9c

cм. там в конце Plan 9 Menu Example Plan 9 Drawing Example

cм. также часики с котиком: plan9_clock и сравни с иксовым catclock

а вообще везде оно конечно, трешЪ и угар, ога. куда же без него. избычно сложно реализовано.

более-менее адекватно в RED, REBOL, Limbo/tk, plan9/rio, Intuition/MUI/ARexx, AROS/ZUNE, Haiku

а обычно везде – трешЪ и угар, конечно же.

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

обычный пользователь вообще не может ни на что влиять, а программист (вот как ты) может пилить только мелкие проекты, которые в апстрим вряд ли пролезут

вот кстати, да: collapse

Imagine that software development becomes so complex and expensive that no software is being written anymore, only apps designed in devtools.

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

А какие варианты?

назад в 6502 , Uxn и варвару c ромами, конечно же :))

resilence и collapseOS

CollapseOS, DuskOS кстати тоже клёвые. там где-то компилятор си на форте в десяток тыщ строчек всего

настоящие жопоголики свои инструменты пишут

вот например, у сотни кроликов – перестал запускаться фотошоп, и он свой написал dotgrid, потом электрон ему не понравился и он начал писать uxn, варвару, пиксельный графический редактор и прочую аниму

anonymous
()

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

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

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

имеет смысл запустить это в виртуалке

запускай, там прикольно

tinkeros.github.io

they encourages code obsfucation. They make it more complicated than necessary. TempleOS is, literally, more simple than necessary. It is obnoxiously simple… to the point it hurts.

ещё есть более современный форк TempleOS: zealOS Zeal-Operating-System/ZealOS

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

гиперссылки там или например тут не только кликабельны, но ещё наверное можно и картинки вставлять (или нет)?

вот кстати, что это за DolDoc такой c виджетами ?

X Expression For cursor movements, the horizontal value. Y Expression For cursor movements, the vertical value.

PopUp For macro’s, run the macro in a PopUp window. Do this when making a macro to run a program, so it doesn’t tie-up memory.

потыкай эту ссылку в виртуалочке священносишечным гипертекстером

anonymous
()

Не существует надежного способа вставить текст в окно стороннего приложения.

это чтоб фейковые урлы вставлять старушкам в браузер, чтобы они оставили все свои копейки ципсоте и прочим клоунам?

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

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

а работе бубунта 18.04 с говняным гномом, я просто смирился и забил, потому что дальше будет только хуже

ну и зачем так страдать?

на смартфон же можно целый мультикс поставить, изначальный майнфрейм Project MAC в симуляции

от которого есть пошёл этот весь ваш юникс

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

потыкать например Емакс на лиспе или лисп на PL/1…

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

ты описал оберон: BBCP с коммандерами и StdInterpreter где документ это бинарный гипертекст, объект в компонентном API а например вставляемые в него виджеты – это персистентные объекты реализующие Deposit=Save, ….=Open.

либо A2 AOS ЯОС BlueBottle где примерно тоже самое, только на активных объектах = акторах

и не виндовый IStorage через COM, а свой API

файлы исходников не текстовые, а гипертекстовые бинарные – в A2 впрочем в Fox Compiler Active Oberon и чисто текстовые могут быть.

а plumbing-подобные интерклики мышкою могут выделенный текст распарсить как текстовый объект через carier/rider паттерн, и далее StdInterpreter может его исполнить

то есть, интерфейс acme в plan 9 и inferno из него содрали

было ещё в изначальном классическом однозадачном Project Oberon

API документов как компонентов в компонентной модели и виджеты-гаджеты в них внедряемые как персистентные объекты

про реализацию что-то такое было написано в «долой жирные программы»

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

там же была когда-то CORBA и Bonobo (на базе корбы), но выпилили их лет 20 назад или даже 25

до SOM подобной из OS/2 так и не допилили…

rexx тоже не запилили, но был какой-то gtkserver где можно было писать гуй скриптом на перле или чем угодно через текстовый интерфейс

а что там через dbus сделать можно?

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

отсюда:

/net, or #I

Сетевой стек предоставляется драйвером устройства «#I». У него имеется по каталогу на каждый протокол, например, tcp. Когда «#I» монтируется по умолчанию в /net, tcp-стек становится доступен в /net/tcp. Библиотечные функции, которые имеют дело сетевыми соединениями (такие как dial и announce, для соединения и обслуживания) могут быть реализованы при помощи обычных вызовов open/read/write к файлам в каталоге /net/tcp. Чтобы продемонстрировать легкость, с которой может быть использован /net/tcp, давайте рассмотрим следующий шелл-скрипт, который осуществляет HTTP-запрос:

<>[3]/net/tcp/clone {
        dir=/net/tcp/^`{cat <[0=3]}
        echo connect 74.125.77.99!80 >$dir/ctl &&
        {
                echo 'GET /search?q=inferno-os&btnI=I''m+Feeling+Lucky HTTP/1.1' &&
                echo 'connection: close' &&
                echo 'host: www.google.com' &&
                echo ''
        }>$dir/data
        cat $dir/data
}

И результат его работы:

HTTP/1.1 302 Found
Location: http://www.vitanuova.com/inferno/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Date: Sat, 18 Apr 2009 19:57:52 GMT
Server: gws
Content-Length: 230
Connection: close

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.vitanuova.com/inferno/">here</A>.
</BODY></HTML>

Это демонстрация мощи хорошо спроектированной абстракции, и такого превосходного инструмента как командный интерпретатор Inferno. В подобной манере, можно сделать dns-запрос при помощи /net/dns, и более общее преобразование сетевых адресов посредством /net/cs.

в исходниках инферно spree, whiteboard – на shell инферно который rc shell можно и tk gui приложения писать, см. примеры

anonymous
()