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

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

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

Post by Grom PE » Sat 30 Sep, 2017 08:54

Решил жить с [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: 11794
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 126 times

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

Post by John Doe » Sat 30 Sep, 2017 10:53

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: 28
Joined: Sun 21 Jun, 2015 14:24
Has thanked: 5 times

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

Post by Grom PE » Thu 19 Oct, 2017 14:44

Изредка при копировании по Ctrl+C вышеприведённый макрос почему-то вызывает ошибку "attempt to index a nil value".

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

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

Post by John Doe » Thu 19 Oct, 2017 14:50

Это значит что PasteFromClipboard завершается с ошибкой.
Причины этого мне не известны.

Shmuel
Posts: 5440
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 19 times
Been thanked: 172 times

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

Post by Shmuel » Thu 19 Oct, 2017 14:56

Code: Select all

result = far.PasteFromClipboard ([type])
.....
**Returns:**
  result: string, or nil
nil возвращается, когда буфер обмена пустой, то есть в нём нет даже пустой строки (в последнем случае должна возвращаться пустая строка).

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

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

Post by John Doe » Thu 19 Oct, 2017 15:30

Спасибо.

Логично добавить 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: 28
Joined: Sun 21 Jun, 2015 14:24
Has thanked: 5 times

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

Post by Grom PE » Thu 19 Oct, 2017 16:04

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

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: 11794
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 126 times

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

Post by John Doe » Thu 19 Oct, 2017 16:28

Очень интересно.
У меня не воспроизводится.

Shtirla
Posts: 79
Joined: Wed 04 Mar, 2009 20:09
Has thanked: 2 times

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

Post by Shtirla » Fri 20 Oct, 2017 07:18

Не буду отдельную тему создавать, подскажите как в редакторе по быстрому 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: 901
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 3 times
Been thanked: 7 times

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

Post by Yegor » Fri 20 Oct, 2017 07:29

Shift+F2
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

User avatar
zg
zero-gravity
Posts: 5453
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 63 times
Contact:

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

Post by zg » Fri 20 Oct, 2017 09:48

Shtirla wrote:
Fri 20 Oct, 2017 07:18

Code: Select all

state=editor.Select(nil,1,1,1,1,99999)
ммм, рошал-стайл.

Shtirla
Posts: 79
Joined: Wed 04 Mar, 2009 20:09
Has thanked: 2 times

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

Post by Shtirla » Fri 20 Oct, 2017 12:03

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

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

Post Reply

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