CopyToClipboard

Здесь можно сообщить о найденных багах в Far.
User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

CopyToClipboard

Post by John Doe » Wed 08 Jul, 2015 16:19

Code: Select all

far.CopyToClipboard("test 1",far.Flags.FCT_STREAM)
far.CopyToClipboard("test 2",far.Flags.FCT_COLUMN)
В результате буфер обмена содержит обе строки!

По ShiftIns в редакторе вставляется вторая, а в прочих местах — первая.
Не баг ли это?

Update: http://bugs.farmanager.com/view.php?id=3062

Shmuel
Posts: 5697
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 200 times

CopyToClipboard

Post by Shmuel » Wed 08 Jul, 2015 21:01

John Doe wrote:Не баг ли это?
Если так и было задумано, то это - недокументированная фича. Но больше похоже на баг.

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

CopyToClipboard

Post by John Doe » Wed 08 Jul, 2015 22:16

Такое только через апи, а при выделении с клавиатуры не воспроизводится.

Мысли по поводу: хранить в формате FAR_VerticalBlock_Unicode копию текста избыточно, достаточно было бы флага 1/0.

Shmuel
Posts: 5697
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 200 times

CopyToClipboard

Post by Shmuel » Wed 08 Jul, 2015 22:19

John Doe wrote:Мысли по поводу: хранить в формате FAR_VerticalBlock_Unicode копию текста избыточно, достаточно было бы флага 1/0.
Но буфер обмена Windows не понимает флагов. Или понимает?

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

CopyToClipboard

Post by John Doe » Wed 08 Jul, 2015 22:23

Shmuel wrote: Но буфер обмена Windows не понимает флагов. Или понимает?
Положить можно что угодно.
Интерпретировать-то будет фар.

Shmuel
Posts: 5697
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 200 times

CopyToClipboard

Post by Shmuel » Wed 08 Jul, 2015 22:33

John Doe wrote: Положить можно что угодно.
Интерпретировать-то будет фар.
Тогда незачем называть это CopyToClipboard, потому что предполагается возможность вставки и в других аппликациях, не только в Фаре.
А CopyToClipboard делает как раз то, что заявлено.

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

CopyToClipboard

Post by John Doe » Wed 08 Jul, 2015 22:36

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

Это именно так работает и сейчас.
Shmuel wrote: А CopyToClipboard делает как раз то, что заявлено.
Разумеется. Не считая бага.

Shmuel
Posts: 5697
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 200 times

CopyToClipboard

Post by Shmuel » Wed 08 Jul, 2015 22:40

Windows clipboard, если я не ошибаюсь, хранит формат и содержимое, но не флаги.
Если флаг вставить в текст, то в других аппликациях (не в Фаре) он будет вставляться как текст.

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

CopyToClipboard

Post by John Doe » Wed 08 Jul, 2015 22:46

В буфере в любом случае присутствует CF_UNICODETEXT.
А при копировании вертикального блока фар дополнительно вставляет свой собственный формат FAR_VerticalBlock_Unicode.

FAR_VerticalBlock_Unicode понятен только фару, остальные приложения при вставке прочтут CF_UNICODETEXT и пр.

Речь о том, что фару нет нужды пихать в FAR_VerticalBlock_Unicode копию CF_UNICODETEXT, а можно ограничиться флагом.

User avatar
HaRT
Moderator
Posts: 8639
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 78 times
Been thanked: 142 times

CopyToClipboard

Post by HaRT » Wed 08 Jul, 2015 23:45

John Doe wrote:хранить в формате FAR_VerticalBlock_Unicode копию текста избыточно, достаточно было бы флага 1/0.
Не знаю, есть ли какие-то формальные причины так делать, но то, что именно так принято, — это точно. Например, при копировании текста из веб-страницы в буфере обмена окажется и HTML, и Unicode text, и, скорее всего, ещё несколько разных представлений выделенного фрагмента. А при копировании диапазона ячеек из Экселя в буфер попадут и текст, и формулы, и картинка, и OLE-объект.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
HaRT
Moderator
Posts: 8639
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 78 times
Been thanked: 142 times

CopyToClipboard

Post by HaRT » Wed 08 Jul, 2015 23:49

John Doe wrote:FAR_VerticalBlock_Unicode понятен только фару, остальные приложения при вставке прочтут CF_UNICODETEXT и пр.
Идеально было бы, чтобы Фар помещал вертикальный блок в буфер в таком виде, который правильно поймут и другие приложения — от Ворда до Студии, SciTE и Notepad++.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

CopyToClipboard

Post by John Doe » Thu 09 Jul, 2015 10:01

HaRT wrote: Идеально было бы, чтобы Фар помещал вертикальный блок в буфер в таком виде, который правильно поймут и другие приложения — от Ворда до Студии, SciTE и Notepad++.
Кстати интересный вопрос (стоит проверить и в других редакторах).

Студии у меня нет, проверьте у себя, а вертикальные блоки winword и SciTE между собой не совместимы.
Что касается реализации, то в ворде всё не просто, зато SciTE и Notepad++ основаны на одних и тех же компонентах, и вертикальные блоки у них реализованы через формат Borland IDE Block Type (1 байт).
Возможно и в фаре имеет смысл поддержать, вместо собственного формата.

P.S.
Вот тут ещё упоминаются такие форматы как MSDEVColumnSelect и Preferred DropEffect.
(А тут VisualStudioEditorOperationsLineCutCopyClipboardTag, впрочем, это уже не о вертикальных блоках)

http://bugs.farmanager.com/view.php?id=3061

2useven10
Posts: 3750
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 148 times

CopyToClipboard

Post by 2useven10 » Thu 09 Jul, 2015 11:48

SciTe обрабатывает и MSDev и Delphi блоки.
Если их поддерживать, то надо не вместо, а вместе с собственным фаровским.
Иначе не будет совместимости со старыми версиями far.

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

CopyToClipboard

Post by John Doe » Thu 09 Jul, 2015 12:32

2useven10 wrote: Иначе не будет совместимости со старыми версиями far.
Т.е. если у кого-то параллельно запущен старый фар, то в нём вместо вертикального вставится поточный.

Имхо этим сценарием можно с чистой совестью пренебречь.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

CopyToClipboard

Post by Skirda » Thu 15 Oct, 2015 15:20

В build 4436 реализация двух форматов (борланд проверить не на чем).
Про сабж:
Тут plugapi.cpp::apiCopyToClipboard()
Для FCT_STREAM юзается SetClipboard, которая самостоятельно очищает буфер.
Для FCT_COLUMN юзается SetClipboardFormat(FCF_VERTICALBLOCK_UNICODE), которая не очищает буфер, а добавляет туда данные. Соответственно OEM остается нетронутым.
Видимо надо перед вызовом SetClipboardFormat вызывать очистку клипборда.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
HaRT
Moderator
Posts: 8639
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 78 times
Been thanked: 142 times

CopyToClipboard

Post by HaRT » Thu 15 Oct, 2015 17:50

Skirda wrote: борланд проверить не на чем
Так ведь
John Doe wrote: SciTE и Notepad++ основаны на одних и тех же компонентах, и вертикальные блоки у них реализованы через формат Borland IDE Block Type (1 байт)
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

Return to “Глюки и баги”