CRLF при копировании в буфер обмена в редакторе

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
Post Reply
User avatar
Grom PE
Posts: 34
Joined: Sun 21 Jun, 2015 14:24
Has thanked: 5 times
Been thanked: 2 times
Contact:

CRLF при копировании в буфер обмена в редакторе

Post by Grom PE »

Решил жить с [far:config] Editor.NewFileUnixEOL=true, но обнаружил неприятную особенность:
при копировании текста с концами строк только LF они так и помещаются в буфер, что приводит к неправильной вставке в ряде Win32-программ.

Понятно, что по уму надо было бы исправить те программы, но всё же хотелось бы опцию, чтоб несмотря на концы строк в файле, в буфер всегда складывалось CRLF. Ведь при вставке в Far CRLF конвертируется в LF, если он думает, что текущий файл с концами строк LF.
Last edited by Grom PE on Sat 30 Sep, 2017 08:56, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CRLF при копировании в буфер обмена в редакторе

Post by John Doe »

Grom PE wrote: Sat 30 Sep, 2017 08:54 Ведь при вставке в Far CRLF конвертируется в LF, если он думает, что текущий файл с концами строк LF.
Ровно как и наоборот: LF может конвертироваться в CRLF.
А что там нужно вашим сторонним программам фар знать не может.

Решается макросом.

Code: Select all

Macro { description="LF>CRLF";
  area="Editor"; key="CtrlIns"; --flags="EVSelection";
  id="F9FC5D9C-C11F-4BD3-983F-1BF03B7D1CA3";
  action=function()
    Keys"AKey"
    far.CopyToClipboard(far.PasteFromClipboard():gsub("\r-\n","\r\n"))
  end;
}
Last edited by John Doe on Thu 19 Oct, 2017 15:28, edited 1 time in total.
User avatar
Grom PE
Posts: 34
Joined: Sun 21 Jun, 2015 14:24
Has thanked: 5 times
Been thanked: 2 times
Contact:

CRLF при копировании в буфер обмена в редакторе

Post by Grom PE »

Изредка при копировании по Ctrl+C вышеприведённый макрос почему-то вызывает ошибку "attempt to index a nil value".
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CRLF при копировании в буфер обмена в редакторе

Post by John Doe »

Это значит что PasteFromClipboard завершается с ошибкой.
Причины этого мне не известны.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

CRLF при копировании в буфер обмена в редакторе

Post by Shmuel »

Code: Select all

result = far.PasteFromClipboard ([type])
.....
**Returns:**
  result: string, or nil
nil возвращается, когда буфер обмена пустой, то есть в нём нет даже пустой строки (в последнем случае должна возвращаться пустая строка).
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CRLF при копировании в буфер обмена в редакторе

Post by John Doe »

Спасибо.

Логично добавить flags="EVSelection";
Хотя, без выделения CtrlIns тоже работает, строку копирует..
Last edited by John Doe on Fri 20 Oct, 2017 07:51, edited 1 time in total.
User avatar
Grom PE
Posts: 34
Joined: Sun 21 Jun, 2015 14:24
Has thanked: 5 times
Been thanked: 2 times
Contact:

CRLF при копировании в буфер обмена в редакторе

Post by Grom PE »

Пробовал с насильно очищенным буфером обмена, да, воспроизводится стабильно. Ошибка происходит при активном выделении.

far.PasteFromClipboard() вызывается ещё до того, как Far успевает внести в буфер?
Last edited by Grom PE on Thu 19 Oct, 2017 16:05, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CRLF при копировании в буфер обмена в редакторе

Post by John Doe »

Очень интересно.
У меня не воспроизводится.
Shtirla
Posts: 117
Joined: Wed 04 Mar, 2009 20:09
Has thanked: 10 times
Been thanked: 2 times

CRLF при копировании в буфер обмена в редакторе

Post by Shtirla »

Не буду отдельную тему создавать, подскажите как в редакторе по быстрому CrLf->Lf и обратно менять, а то иной раз для линуксоподобного конфиг напишешь, потом начинаются извращения. Фар корректно понимает какие концы строк у файла, но когда их надо поменять приходится что то придумывать(плагин textconv умеет конечно, но не в редакторе). Имхо в редакторе в настройках вызываемых по AltShiftF9 по холошему должна быть настроечка CRLF
через макрос пробую, фар помнит настройку (кривенький макрос конечно, проба) и не меняет

Code: Select all

Macro {
area="Editor"; key="AltF3 AltDel"; flags=""; description="Crlf->LF";
action = function()
Editor.Undo(0)
state=editor.Select(nil,1,1,1,1,99999)
str=Editor.SelValue:gsub("\r\n","\n")
editor.DeleteBlock (nil)
msgbox("3",str)
editor.InsertText(nil,str)
state=editor.Select(nil,0)
Editor.Undo(1)
end;
}
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

CRLF при копировании в буфер обмена в редакторе

Post by Yegor »

Shift+F2
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

CRLF при копировании в буфер обмена в редакторе

Post by zg »

Shtirla wrote: Fri 20 Oct, 2017 07:18

Code: Select all

state=editor.Select(nil,1,1,1,1,99999)
ммм, рошал-стайл.
Shtirla
Posts: 117
Joined: Wed 04 Mar, 2009 20:09
Has thanked: 10 times
Been thanked: 2 times

CRLF при копировании в буфер обмена в редакторе

Post by Shtirla »

Вот я тормоз. спасиб.

а скриптик тестовый чисто проверить был. поэтому и 99999
Post Reply

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