Editor: Reload a file

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

Editor: Reload a file

Post by siberia-man » Tue 17 Jan, 2017 17:47

Бывает, что редактируемый файл изменяется внешней командой. Задумался о макросе для перезагрузки открытого файла:

Code: Select all

Macro {
	area = "Editor";
	key = "CtrlF4";
	flags = "";
	description = "Editor: Reload a file";
	action = function()
		Keys("F6 F6")
	end;
}
Хотелось бы добавить проверку, что файл изменен и несохранен - выдавать предупреждение, что данные будут утеряны. Подскажите, пожалуйста, какие флаги проверять?

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

Editor: Reload a file

Post by HaRT » Tue 17 Jan, 2017 19:36

siberia-man wrote: какие флаги проверять?
RTFM:
[i][b]%FarHome%\Encyclopedia\macroapi_manual.ru.chm[/b][/i] wrote:Editor.State: … 0x00000008 редактируемый файл модифицирован (в статусной строке редактора присутствует символ '*')
А вообще почин похвальный. Если ещё и (только) на время переключения будете отключать историю, чтобы туда не попадал просмотр, будет вообще здорово.
Фар есть инструмент, а не нянька. © 2009 DrKnS

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

Editor: Reload a file

Post by siberia-man » Wed 18 Jan, 2017 10:41

Code: Select all

--[[

Editor: Reload a file
http://forum.farmanager.com/viewtopic.php?f=57&t=10599

This macro allows to reload a file from the disk.
Any changes made in the editor may be lost.

]]

---------------------------------------------------------------------------

local EDITOR_MODIFIED = 0x00000008

local MSG_WARNING  = 0x00000001
local MSG_OKCANCEL = 0x00020000

---------------------------------------------------------------------------

local msg_title = "Warning"
local msg_text = "FIle modified, everything will be lost"

---------------------------------------------------------------------------

Macro {
	area = "Editor";
	key = "CtrlR";
	flags = "";
	description = "Editor: Reload a file";
	action = function()
		local state = bit.band(Editor.State, EDITOR_MODIFIED)
		if state ~= 0 then
			local answer = msgbox(msg_title, msg_text, MSG_WARNING + MSG_OKCANCEL)
			if answer ~= 1 then return end
		end

		local history = Far.DisableHistory()
		Far.DisableHistory(-1)

		-- Avoid saving the file
		Keys("F6 " .. ( state ~= 0 and "Right Enter" or "" ) .. " F6")

		Far.DisableHistory(history)
	end;
}

---------------------------------------------------------------------------

-- EOF

2useven10
Posts: 3045
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 83 times

Editor: Reload a file

Post by 2useven10 » Wed 18 Jan, 2017 10:51

Imho, восстанавливать history не обязательно.
Запрет работает только для данного макроса.
Last edited by 2useven10 on Wed 18 Jan, 2017 10:52, edited 1 time in total.

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

Editor: Reload a file

Post by siberia-man » Wed 18 Jan, 2017 11:26

2useven10, не знал. Тем не менее для надежности оставлю.

Вопрос. Какая клавиша (комбинация клавиш) лучше для данного действия? Сейчас - CTRL+F4, можно было бы CTRL+R.

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

Editor: Reload a file

Post by HaRT » Thu 19 Jan, 2017 14:57

siberia-man wrote: можно было бы CTRL+R
Я за этот вариант — по аналогии с файловой панелью.
Спасибо за макрос!

Вот идея для развития: отслеживать изменение файла внешними программами и предлагать его перегрузить либо делать это автоматически (разумеется, отключаемо). Это позволило бы, например, следить за дописыванием в лог (tail -f), но при этом иметь раскраску. Ну и разные другие „следить“…
Фар есть инструмент, а не нянька. © 2009 DrKnS

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

Editor: Reload a file

Post by siberia-man » Thu 19 Jan, 2017 16:48

HaRT wrote: отслеживать изменение файла внешними программами и предлагать его перегрузить либо делать это автоматически
Такие мысли бродили в моей голове. Но я - пас. Я не настолько знаток luafar, чтобы запрограммировать это. В notepad++ такая фича полностью реализована. В notepad-mod2 файл надо перечитывать вручную.

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

Editor: Reload a file

Post by siberia-man » Thu 19 Jan, 2017 17:02

siberia-man wrote: можно было бы CTRL+R
Самому тоже нравится единообразие. Исправил в сообщении выше. Оигинал тут - https://github.com/ildar-shaimordanov/t ... adFile.lua

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

Editor: Reload a file

Post by HaRT » Thu 19 Jan, 2017 17:32

siberia-man, исправьте, пжлст, цитату — Вы приписали мне свои слова.
Фар есть инструмент, а не нянька. © 2009 DrKnS

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

Editor: Reload a file

Post by siberia-man » Thu 19 Jan, 2017 22:01

HaRT, done

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

Editor: Reload a file

Post by siberia-man » Thu 19 Jan, 2017 23:20

Поправил сообщение viewtopic.php?p=142329#p142329 - удалил объявление неиспользуемой переменной. Спасибо VictorVG
Last edited by siberia-man on Thu 19 Jan, 2017 23:21, edited 1 time in total.

2useven10
Posts: 3045
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 83 times

Editor: Reload a file

Post by 2useven10 » Fri 20 Jan, 2017 10:03

siberia-man, через Shift-F4 можно перегрузить файл без переключения на просмотр.

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

Editor: Reload a file

Post by siberia-man » Fri 20 Jan, 2017 10:24

2useven10, SHIFT+F4 - для создания нового файла. Не хотелось бы ломать устоявшиеся привычки.

tstr
Posts: 513
Joined: Thu 16 Apr, 2009 16:15
Has thanked: 4 times
Been thanked: 5 times

Editor: Reload a file

Post by tstr » Fri 20 Jan, 2017 10:40

siberia-man wrote:2useven10, SHIFT+F4 - для создания нового файла. Не хотелось бы ломать устоявшиеся привычки.
Так маросом же по Shift-F4 и перегружать...

Да, очень хотелось бы получить функционал современных редакторов: если текст сохранён - перегружать автоматом при "внешнем" сохранении, иначе спрашивать о действии сразу при "внешнем" изменении.

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

Editor: Reload a file

Post by HaRT » Fri 20 Jan, 2017 13:32

tstr wrote: перегружать автоматом при "внешнем" сохранении
Лично я предпочёл бы иметь выбор:
* ничего не предпринимать;
* спрашивать даже про сохранённый — может дополнительно зависеть от того, находится ли редактор в режиме только для чтения (Locked: Ctrl+L);
* спрашивать только про изменённый;
* перегружать независимо от сохранённости — впрочем, этот вариант экстремальный.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

Return to “Нужна помощь”