It is currently March 28th, 2024, 10:23 pm

LuaTailFile - A skin to read logs, todo lists, etc.

Skins that control functions in Windows or Rainmeter
User avatar
jsmorley
Developer
Posts: 22628
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

LuaTailFile - A skin to read logs, todo lists, etc.

Post by jsmorley »

This skin is another showcase for the new Lua capabilities in Rainmeter 1.4. It will allow you to read any text file (I see it being useful for logs, notes, todo lists, etc) and display any number of lines from the file in reverse order from the bottom (like the unix "tail" function)

You must install the latest Rainmeter 1.4 beta (at least r676) from http://Rainmeter.net.

Then just install this skin:
LuaTailFile_1.0.rmskin
Open the skin .ini and the .lua file included to see how to use this, and for some general tips on using Lua in Rainmeter skins.
12-21-2010 11-03-22 AM.png
This could easily be extended, using for instance the built-in Regular Expression support in Lua to have it only display lines with a certain pattern like "error" or something. There is a very good site for learning Lua here: http://lua-users.org/wiki/LuaTutorial
You do not have the required permissions to view the files attached to this post.
tyler.j.cw
Posts: 1
Joined: February 9th, 2011, 2:35 pm

Re: LuaTailFile - A skin to read logs, todo lists, etc.

Post by tyler.j.cw »

I can see this coming in really handy for parsing an XML file or something of that nature. Once i get some time i'll get on that.
Fayainz
Posts: 1
Joined: February 28th, 2011, 10:54 am

Re: LuaTailFile - A skin to read logs, todo lists, etc.

Post by Fayainz »

jsmorley wrote:This could easily be extended, using for instance the built-in Regular Expression support in Lua to have it only display lines with a certain pattern like "error" or something. There is a very good site for learning Lua here: http://lua-users.org/wiki/LuaTutorial

How would I go about doing this? I have an application that outputs the status of Services on a PC to a text file, I'd like to read the textfile using this skin. How would I go about only outputting certain lines from my log file? I LUA knowledge is shocking and I am not a coder by nature :(

Appreciate the help
User avatar
jsmorley
Developer
Posts: 22628
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

Re: LuaTailFile - A skin to read logs, todo lists, etc.

Post by jsmorley »

You will really need to use that Lua tutorial site and learn a bit about Lua to edit that part of the skin.

However, changing the loop that is in the .lua file now with

Code: Select all

	while true do
		local sLine = io.read()
		if sLine == nil then break end
		if string.find(sLine, "error") ~= nil then
			tAllLines[iCount] = sLine
			iCount = iCount + 1
		end	
	end	
Replacing "error" with whatever pattern you are looking for in the lines, should be a good start.
Zool
Posts: 2
Joined: March 15th, 2011, 3:08 pm

Re: LuaTailFile - A skin to read logs, todo lists, etc.

Post by Zool »

I'm fiddling about with a variant of this skin and script - putting IRC channel logs on the desktop.

Right now, my trouble is that the resulting text is not UTF-8 - it looks like an ANSI-interpretation of a UTF-8 encoded file.

Danish chars æøå ÆØÅ look like æøå ÆØÅ


Since it's really only 6 different chars that bug me, I've set out to simply do substitution. In the rainmeter manual, it says that all measures can have substitution.

However, it doesn't seem to work at all, when I put
Substitute="æ":"æ", "ø":"ø", "Ã¥":"å", "Æ":"Æ", "Ø":"Ø", "Ã…":"Å"
in the [Measure] paragraph


Did anyone else overcome trouble like this? I'd be happy to hear about it :)
User avatar
Chewtoy
Moderator
Posts: 995
Joined: June 10th, 2009, 12:44 pm
Location: Sweden

Re: LuaTailFile - A skin to read logs, todo lists, etc.

Post by Chewtoy »

First of: Have you made sure that the logs you are reading are in UTF-8?
If saved as UTF-8, rainmeter will get the correct characters.

Second: Have you tried using CodePage=Number ?
http://rainmeter.net/cms/Plugins-WebParser

Third: You could check and see if Lua fixes it for you.
Use string.gsub(something, something, something)
http://lua-users.org/wiki/StringLibraryTutorial
I don't think, therefore I'm not.
Zool
Posts: 2
Joined: March 15th, 2011, 3:08 pm

Re: LuaTailFile - A skin to read logs, todo lists, etc.

Post by Zool »

Yes, I'm sure that the files are saved as UTF-8 - It's Mirc log files; they display flawless with Notepad, but flawed with Wordpad.

Second: I'm not using the webparser plugin - actually I've tried, but it needs exclusive rights when opening the file, and Mirc seems to keep the file open - so no go

Third: Thanks for the suggestion, I'll look into it.


First of all, I'm going to try and use this skin as-is, since (like I told ealier) I'm using a variant of it. Then we could definitely be on the same page, when talking about it :)

[EDIT]: I've just tried and used this skin as-is. Just like my own fiddlings, it displays the chars wrongly. I've verified (using firefox), that the encoding of the file is indeed UTF-8.

[Second EDIT]: Your suggestion around gsub() seems to work.

I've added some lines in the second loop in the update function:

Code: Select all

function Update()

	hReadingFile = io.input(sFileToRead)
	
	tAllLines = {}
	iCount = 1
	while true do
		local sLine = io.read()
		if sLine == nil then break end
		tAllLines[iCount] = sLine
		iCount = iCount + 1
	end	
	
	for i = 1, iLinesToRead do
		tAllLines[iCount-i]=tAllLines[iCount-i]:gsub("æ","æ")
		tAllLines[iCount-i]=tAllLines[iCount-i]:gsub("ø","ø")
		tAllLines[iCount-i]=tAllLines[iCount-i]:gsub("Ã¥","å")
		tAllLines[iCount-i]=tAllLines[iCount-i]:gsub("Æ","Æ")
		tAllLines[iCount-i]=tAllLines[iCount-i]:gsub("Ø","Ø")
		tAllLines[iCount-i]=tAllLines[iCount-i]:gsub("Ã…","Å")
		tMeters[i]:SetText(tAllLines[iCount-i])
	end
	
	io.flush(hReadingFile)
	
end -- function Update
Now, Rainmeter displays IRC channels correctly on my monitor :)

I'm not a coder, so if anyone can find a more effective solution, it would be highly appreciated

Again, thanks a bunch - also for the speedy reply :thumbup:
User avatar
Yggdrasil
Posts: 24
Joined: June 25th, 2011, 5:09 pm

Re: LuaTailFile - A skin to read logs, todo lists, etc.

Post by Yggdrasil »

Hello all!
I am a Lua scripter, and I am really happy that you've added Lua support - it makes my life easier :) Just some note about the codes above:

Code: Select all

function Update()

	hReadingFile = io.input(sFileToRead)
	
	tAllLines = {}
	iCount = 1
	while true do
		local sLine = io.read()
		if sLine == nil then break end
		tAllLines[iCount] = sLine
		iCount = iCount + 1
	end	
	
	for i = 1, iLinesToRead do
		tMeters[i]:SetText(tAllLines[iCount-i])
	end
	
	io.flush(hReadingFile)
	
end -- function Update
Why don't you use this instead?

Code: Select all

function Update()
    local hReadingFile = io.open(sFileToRead)
    tAllLines = {}
    for sLine in hReadingFile:lines() do
      table.insert(tAllLines,sLine)
    end
    local iCount = #tAllLines
    for i = 1, iLinesToRead do
      tMeters[i]:SetText(tAllLines[iCount-i])
    end
    hReadingFile:close() -- Don't forget to close it,
	
end -- function Update
About gsub'ing the strange characters: an easier way to use os.setlocale("Hungarian_Hungary.1252") (in my case, change it to yours, or use os.setlocale("") ), or open the file in binary mode (local hReadingFile = io.open(sFileToRead,"rb") ).
Great work, developers ;)
By the way, what about LuaJIT?
Image
User avatar
jsmorley
Developer
Posts: 22628
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

Re: LuaTailFile - A skin to read logs, todo lists, etc.

Post by jsmorley »

Yggdrasil wrote:Hello all!
I am a Lua scripter, and I am really happy that you've added Lua support - it makes my life easier :) Just some note about the codes above:

Why don't you use this instead?
Glad to have someone who is actually using Lua outside of Rainmeter around. Someone with some expertise in Lua, to maybe answer the occasional question about it on these forums, would be welcome indeed. The answer to your question is that I first laid eyes on Lua when our developer MattKing first started trying to hook it up with Rainmeter not long ago, and that code above was probably the second or third snippet of Lua code I ever wrote. That it worked at all made me happy!

:-)

Welcome aboard!
User avatar
Yggdrasil
Posts: 24
Joined: June 25th, 2011, 5:09 pm

Re: LuaTailFile - A skin to read logs, todo lists, etc.

Post by Yggdrasil »

It's my pleasure if I can help you to make RainMeter better :great:
If you (or somebody else) have a question, please don't hesitate to contact me, I work with Lua since 2004, so I can say I'm experienced :D Lua is an easy-to-learn language, and that's what make it the best (imho). So, if you open a topic for Lua, I help everybody with pleasure.
Regards ;)
Image