CopyToClipboard

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

CopyToClipboard

Post by John Doe »

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: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

CopyToClipboard

Post by Shmuel »

John Doe wrote:Не баг ли это?
Если так и было задумано, то это - недокументированная фича. Но больше похоже на баг.
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

CopyToClipboard

Post by John Doe »

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

Мысли по поводу: хранить в формате FAR_VerticalBlock_Unicode копию текста избыточно, достаточно было бы флага 1/0.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

CopyToClipboard

Post by Shmuel »

John Doe wrote:Мысли по поводу: хранить в формате FAR_VerticalBlock_Unicode копию текста избыточно, достаточно было бы флага 1/0.
Но буфер обмена Windows не понимает флагов. Или понимает?
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

CopyToClipboard

Post by John Doe »

Shmuel wrote: Но буфер обмена Windows не понимает флагов. Или понимает?
Положить можно что угодно.
Интерпретировать-то будет фар.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

CopyToClipboard

Post by Shmuel »

John Doe wrote: Положить можно что угодно.
Интерпретировать-то будет фар.
Тогда незачем называть это CopyToClipboard, потому что предполагается возможность вставки и в других аппликациях, не только в Фаре.
А CopyToClipboard делает как раз то, что заявлено.
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

CopyToClipboard

Post by John Doe »

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

Это именно так работает и сейчас.
Shmuel wrote: А CopyToClipboard делает как раз то, что заявлено.
Разумеется. Не считая бага.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

CopyToClipboard

Post by Shmuel »

Windows clipboard, если я не ошибаюсь, хранит формат и содержимое, но не флаги.
Если флаг вставить в текст, то в других аппликациях (не в Фаре) он будет вставляться как текст.
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

CopyToClipboard

Post by John Doe »

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

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

Речь о том, что фару нет нужды пихать в FAR_VerticalBlock_Unicode копию CF_UNICODETEXT, а можно ограничиться флагом.
User avatar
HaRT
Moderator
Posts: 9595
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 114 times
Been thanked: 233 times

CopyToClipboard

Post by HaRT »

John Doe wrote:хранить в формате FAR_VerticalBlock_Unicode копию текста избыточно, достаточно было бы флага 1/0.
Не знаю, есть ли какие-то формальные причины так делать, но то, что именно так принято, — это точно. Например, при копировании текста из веб-страницы в буфере обмена окажется и HTML, и Unicode text, и, скорее всего, ещё несколько разных представлений выделенного фрагмента. А при копировании диапазона ячеек из Экселя в буфер попадут и текст, и формулы, и картинка, и OLE-объект.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 9595
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 114 times
Been thanked: 233 times

CopyToClipboard

Post by HaRT »

John Doe wrote:FAR_VerticalBlock_Unicode понятен только фару, остальные приложения при вставке прочтут CF_UNICODETEXT и пр.
Идеально было бы, чтобы Фар помещал вертикальный блок в буфер в таком виде, который правильно поймут и другие приложения — от Ворда до Студии, SciTE и Notepad++.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

CopyToClipboard

Post by John Doe »

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: 4107
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 194 times

CopyToClipboard

Post by 2useven10 »

SciTe обрабатывает и MSDev и Delphi блоки.
Если их поддерживать, то надо не вместо, а вместе с собственным фаровским.
Иначе не будет совместимости со старыми версиями far.
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

CopyToClipboard

Post by John Doe »

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

Имхо этим сценарием можно с чистой совестью пренебречь.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 4 times

CopyToClipboard

Post by Skirda »

В 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!
Post Reply

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