Выделить и скопировать из режима просмотра (F3)

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

Выделение/ копирование текста в Просмотрщике

Post by 2useven10 »

Latest post of the previous page:

Это реализация возможности выделения произвольных кусков файла в просмотре с минимальными затратами.
Протяжка логично работает в паре с курсором. Делать курсор надо, но на это времени нет.
Кроме того протяжка хороша для небольших файлов, если тянуть долго это неудобно (больше экрана уже удобство сомнительное). Да и сам механизм 'протяжки' надо делать.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Выделение/ копирование текста в Просмотрщике

Post by HaRT »

2useven10 wrote: Протяжка логично работает в паре с курсором. Делать курсор надо, но на это времени нет.
Кроме того протяжка хороша для небольших файлов, если тянуть долго это неудобно
Я вижу такие сценарии:
* если нужный фрагмент небольшой, то он в один заход выделяется протяжкой — для этого незачем вспоминать, что тут используется какое-то особенное действие;
* если требуется фрагмент, вылезающий за пределы текущего окна, то его начало/конец выделяем протяжкой, затем проматываем к другому краю и до-выделяем посредством Shift-клика — точно так же, как в привычных редакторах.
И каретка (курсор) не обязательна.
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

Выделение/ копирование текста в Просмотрщике

Post by 2useven10 »

Это делается относительно просто.
Правда протяжка просто мышкой несовместима с текущим мышиным скроллином в просмотре,
но если делать её с тем же Shift-ом противоречия не будет.
Осталось найти того, кто готов этим заняться. У меня нет достаточной мотивации.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Выделить и скопировать из режима просмотра (F3)

Post by citRiks »

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

Вот думаю намакросить что-ли..
технически выполнимо, но сомнения терзают стоит ли того соотношение усилие\польза
Если делать, то пока такие идеи:
+ FFI ReadConsole(..) - переваривать то что имеем на экране
+ far.Text(..) - рисовать курсор на экране
+ far.Viewer.GetFilePos, SetFilePos, LeftPos - знать хотя бы приблизительно где мы находимся в файле
Задача - соотнести произвольную точку на экране с позицией в файле.
GetFilePos соотносим с тем что начитали из ReadConsole, и получаем точную позицию (координату) в файле.
Точная позиция с файлом нужна для привязки куда рисовать (=эмиулировать) визуальный курсор,
иначе он будет скакать непредсказуемо.
Т.е. связка такая должна быть такая:
{координата курсора на экране} <= (уметь переводить в обоих направлениях) => {позиция в реальном файле}
Все согласны?
Есть какие-то еще идеи какими средствами реализовывать?
Ввиду явной пользы обществу, не проще ли это реализовать в самом ФАРе?
чтобы зря луа-писателям не трудится
Last edited by citRiks on Mon 24 Feb, 2020 17:35, edited 2 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Выделить и скопировать из режима просмотра (F3)

Post by citRiks »

PS
для простой навигации курсором в просмотрщике сотношение с реальной позицией в файле может и не нужно,
но нужно для нормального многострочного и многостраничного selection, в котором и весь смысл
Last edited by citRiks on Mon 24 Feb, 2020 17:58, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Выделить и скопировать из режима просмотра (F3)

Post by zg »

citRiks wrote: Mon 24 Feb, 2020 17:29+ far.Viewer.GetFilePos, SetFilePos, LeftPos - знать хотя бы приблизительно где мы находимся в файле
почему приблизительно? всё точно находится.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Выделить и скопировать из режима просмотра (F3)

Post by citRiks »

zg,
Приблизительно - потому что с точки зрения вьювера он стоит всегда на начале первой (или второй) строчки которая на экране
сдвинули экран - позиция переехала на другую строчку, и эта строчка опять вторая сверху
далее, это всегда начало строчки, даже если строка длинная и смотря ее мы далеко уехали вправо,
для просмотрщика положение вфахле не изменилось
Наша цель:
курсор может и должен гулять по всему видимому экрану, поэтому берем эту позицию (=GetPos) и от нее как-то добираемся до желаемой позиции на экране
Т.е.
1.) GetPos - абсолютная позиция, всегда вторая строчка экрана - есть
2.) CurPos - позиция (курсора) относительно GetPos, в любом месте экрана - надо вычислить

GetPos приблизительный для нас, потому что для нашей цели "любая позиция на экране" он не подходит,
это будет, для упрощения где-то так:
АбсолютнаяПозиция=GetPos + CurPos
Last edited by citRiks on Mon 24 Feb, 2020 19:26, edited 2 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Выделить и скопировать из режима просмотра (F3)

Post by citRiks »

В вашем замедчательном HexEde вообще не углядываю аналогии,
вы там создает кастомный кавдратный layout и творите дальше в нем все что хотите,
а у нас прозивольной длины строчки, еще и wrapping может быть,
еще разделители строк могут быть или двухбайтовые или однобайтовые,
еще и табы, еще и UTF8\unicode\ASCII.
Поэтому у нас во вьювере все плавает, а в HexEditе все стабильно как на кладбище :)
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Выделить и скопировать из режима просмотра (F3)

Post by citRiks »

Впрочем, сейчас вот что понял
Эмулиремый курсор можно сделать цело-строчный, на всю current line.
это где-то на 80% облегчает задачу при этом удовлетворяя где-то 90% потребности и удобства пользвования
на следующем эволюционном этапе можно начать вычислять уже внутристрочную позицию
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Выделить и скопировать из режима просмотра (F3)

Post by zg »

citRiks wrote: Mon 24 Feb, 2020 19:27В вашем замедчательном HexEde вообще не углядываю аналогии
он открывается в текущей позиции, она определяется однозначно, не очень понимаю, зачем читать с экрана?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Выделить и скопировать из режима просмотра (F3)

Post by citRiks »

zg wrote: Mon 24 Feb, 2020 19:51 он открывается в текущей позиции, она определяется однозначно, не очень понимаю, зачем читать с экрана?
извиняюсь за свою непонятность
я не хочу открывать никакую новую сущность, ни диалог, ни редактор, ни панель, ни еще чего кастомного.
Напротив, я излагаю на тему как оставаться с нашим любимым шустрым вьювером,
и прозрачно-натурально добавить ему такую нехватающую функциональность:
1.) Cursor
2.) rmulti string multi page selection
это два пункта, но на самом деле второй пункт для своей корректной работы должен включать в себя первый.
И я не вижу как это сочетается с открытием нового окна-диалога с custom element? как вы делаете HеxEd.

Мне удалось изложить понятнее?

PS
viewer.GetPos - это всего лишь якорь вверху страницы, а user cursor должен и может гулять по всей странице.
user (человек) двигает этот курсор туда-сюда естественно.
Двигает, оставаясь в пределах user screen, пока не сдвинул в итоге всю страницу (сам это screen уехал).
Если сдвинулся\уехал сам этот screen (=видимый кусок текста), это значит якорь сдвинулся, ок, перерасчет.
Т.е., наша адача - знать точно какой длины цепь (точнее расстояние от якоря) на которой сидит cursor в данный произвольный момент
Last edited by citRiks on Mon 24 Feb, 2020 20:51, edited 3 times in total.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Выделить и скопировать из режима просмотра (F3)

Post by zg »

очень много текста, а ответ на вопрос отсутствует.
citRiks wrote: Mon 24 Feb, 2020 20:42И я не вижу как это сочетается с открытием нового окна-диалога с custom element?
HеxEd был приведён, как пример точного определения позиции в файле, которая сейчас отображается на экране.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Выделить и скопировать из режима просмотра (F3)

Post by DrKnS »

citRiks wrote: Mon 24 Feb, 2020 20:42 второй пункт для своей корректной работы должен включать в себя первый
Не должен, потому что уже давно есть.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Выделить и скопировать из режима просмотра (F3)

Post by citRiks »

DrKnS wrote: Mon 24 Feb, 2020 22:52 Не должен, потому что уже давно есть.
В смысле использовать односимвольный (длина=1) selection как курсор?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Выделить и скопировать из режима просмотра (F3)

Post by citRiks »

еще идея и вопрос вот такой
Речь про feature "selection with Shift-Click, Shift-Click"
Во вьювере мы можем кликать мышью и вьювер знает какая это позиция в файле.
т.е., переводит экранную позицию в позицию в файле
Вопрос, может эту замечательную функицю во вьювер АПИ?
Никакую функциональность это не ломает и не меняет, просто будет экспорт наружу.
было бы например так:

Code: Select all

viewer.ScreenPosToFilePos(X, Y) 
viewer.FilePosToScreenPos(offset) 
м..?
Last edited by citRiks on Tue 25 Feb, 2020 16:51, edited 1 time in total.
Post Reply

Return to “Предложения и идеи”