[about] [index] [prev] [2021-09-01 13:46:28+03:00] [95379ffa55702403012f547af8a04c34fd7c1217]
Topics: [tip][web]

edbrowse вполне себе серьёзный броузер

Подольше поигрался я с этим броузером (b808c84c797a82f570dcf478fbb83ab3b9d2efb0)
и очень впечатлили подходы в нём. А точнее не в самом броузере, а этом
ed редактора на стероидах. В отличии от стандартного ed-а, тут есть
параллельные независимые сессии. Аналог буферов vi. Каждая сессия имеет
свою "историю" переходов между буферами (файлами). Открывая новую
страницу, у меня в текущей сессии появляется новый буфер, но до старого
можно дойти через "^" команду. Если мне хочется открыть несколько ссылок
в отдельных табах, то в eb (edbrowse) я сделаю:

    > b www.stargrave.org/Links.html
    < 6757
    < 941
    > /Aerospace/g
    < *http://www.stargrave.org/LinksCatAerospace.html
    < 3512
    < 430
    > M
    < moved to session 2
    < • {Aerospace (4 items)}:| |
    > /DNS/g
    < *http://www.stargrave.org/LinksCatDNS.html
    < 4936
    < 786
    > M
    < moved to session 3
    < • {DNS (10 items)}:| |
    > bflist
    < 1: Interesting links (Sergey Matveev’s homepage)
    < 2: Links category: Aerospace (Sergey Matveev’s homepage)
    < 3: Links category: DNS (Sergey Matveev’s homepage)

"M" создаёт новую сессию, перемещает текущий "буфер" в неё, а в
исходящей сессии выполняет "^" команду перемещения по истории назад.
Из-за кэша ничего лишнего не подгружается, зато можно ссылки в фоне
пооткрывать удобно независимые (пример из документации):

    < 1g
    < M2
    < 2g
    < M3
    < 3g
    < M4

Ввод в textarea делается тоже через выделение нового буфера в котором
заполняется текст, а после сохранения он станет содержимым textarea.
Можно вызвать редактирование строки с ссылками, чтобы например добавить
в файл с закладками:

    > b www.stargrave.org/Links.html
    < 6757
    < 941
    > /XBEL/
    < All of these are also exported in {recfile}, {XBEL} and {OPML} formats.
    > g?
    < multiple links present, please use g1 through g3
    > g2?
    < http://www.stargrave.org/links.xbel
    > A
    185
    > ,n
    < 1 <br><a href='http://www.stargrave.org/links.rec'>
    < 2 recfile
    < 3 </a>
    < 4 <br><a href='http://www.stargrave.org/links.xbel'>
    < 5 XBEL
    < 6 </a>
    < 7 <br><a href='http://www.stargrave.org/links.opml'>
    < 8 OPML
    < 9 </a>
    > /xbel/iJ
    > /xbel/iJ
    > v/xbel/d
    > w+ $books
    < 61
    > ^
    < All of these are also exported in {recfile}, {XBEL} and {OPML} formats.

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

    % mkdir src dst
    % touch src/gotcha
    % eb src
    < directory mode
    < 54
    > ,n
    < 1 ../ 1472 Sep  1 2021 13:58
    < 2 gotcha 0 Sep  1 2021 13:54
    > e dst
    < directory mode
    < 27
    > M
    < moved to session 2
    < gotcha 0 Sep  1 2021 13:54
    > /gotcha/m2
    < ?
    > h
    < directories are readonly, type dw to enable directory changes
    > dw
    > /gotcha/m2
    < gotcha → dst
    > e2
    < dst
    > /got/t1
    < gotcha ≡ src
    > q
    % bfs -type f src dst
    src/gotcha
    dst/gotcha

Небольшие скриптовые способности достаточны чтобы реализовать jump-list
как в Lynx:

    function+S{
        b https://lite.duckduckgo.com/lite/?q=~0
        /Next Page/+1
        z20
    }

    > <S "hello world program"
    [выдача 20 строчек DuckDuckGo игнорируя ненужный заголовок]

    function+Spy{
        b https://pypi.org/project/~0/
        /^h1/
        z20
    }

    > <Spy pygost
    < 69245
    < 7662
    <
    < h1 pygost 5.6
    <
    < pip install pygost < Copy PIP instructions>
    < {Latest version}
    <
    < Released: Apr 22, 2021
    [...]

Мне всё равно ещё непривычно сидеть и не видеть весь вывод, весь текст.
Нажимать ,n каждый раз -- геморройно, да и надо проматывать будет. Так
как я использую rlwrap с eb-ом (чтобы получить vi редактирование строки,
историю и автодополнение путей к файлам), то добавил в нём mapping на
F1, вводящий "<Scroll\n", который в свою очередь запускает вот такую функу:

    function+Scroll{
        +,+20n
        if(?) {
            +,$n
            if(?) {
                0<Scroll
            }
        }
    }

Весь этот геморрой с if-ами только для того чтобы он мог проматывать по
20 строчек находясь и в конце файла. Долбя F1 я буду видеть chunk-и
текста. Но думаю что вообще сделать сохранение во временный файл и
натравливание на него less, нажав какой-нибудь F2. Но это наверное
совершенно не ed-way.

Видя как можно получить текст web-страницы или директории (или FTP
директории), что можно её всю из себя исковеркать всякими g// и v//
командами удаляющими ненужный мусор типа рекламы, а потом применяя
очередные команды -- понимаешь что в Plan9 Acme редактора ведь именно
подобная идея тоже исповедуется. Очень необычно и впечатляюще. Насколько
разными могут быть подходы к работе с текстом и манипуляциями с почтой,
web-ом, файлами и СУБД (ни почту, ни СУБД я в edbrowse не пробовал,
только читал в документации про них).

[leave comment]