Compare commits

...

10 Commits
v0.7 ... main

Author SHA1 Message Date
Paul van Tilburg 6ee6a68694
Bump the version to 0.9 2023-12-12 15:08:04 +01:00
Paul van Tilburg 5b7130c2f9
Fix infinite loop when the viewer exits
* The viewer now sends `SIGHUP` to the main process when it exists
* The main process signal handler kills the viewer and terminates the
  notifier/main event loop when receiving `SIGINT`/`SIGTERM`/`SIGQUIT`
* The main process signal handler just terminates the notifier/main
  event loop when receiving `SIGHUP`
* Clean just after the notifier/main loop finishes
2023-12-12 15:08:04 +01:00
Paul van Tilburg fb1a0606fd
Fix code style and log message 2023-12-12 15:08:04 +01:00
Paul van Tilburg 174ec96c6d
Remove (commented) code that cleans after compile
This removes code commented out/refactored in commit 2cf1654.
2023-12-12 15:08:00 +01:00
Paul van Tilburg 2c996c7a18
Rename TODO to TODO.md because it is in Markdown format 2022-11-05 15:15:59 +01:00
Paul van Tilburg 0fe0a966f0
Rename COPYING to LICENSE for consistency 2022-11-05 15:15:23 +01:00
Paul van Tilburg 240ea58411
Fix confusing syntax 2022-11-05 15:08:15 +01:00
Paul van Tilburg 84b231d729
Bump the version to 0.8 2021-12-09 17:45:34 +01:00
Paul van Tilburg d78227a8e2
Just use relative paths (so they match up) 2021-12-09 17:45:09 +01:00
Paul van Tilburg c50791cba1
Preserve dirname for .with_extension; drop .base 2021-12-09 17:42:17 +01:00
3 changed files with 25 additions and 23 deletions

View File

View File

View File

@ -70,10 +70,8 @@ def compile(infile, mode)
params = ARGV.join(" ")
err_file = infile.with_extname("err")
_ret = system "rubber --inplace #{mode_opt} #{params} #{infile} 2> #{err_file}"
system "rubber --inplace #{mode_opt} #{params} #{infile} 2> #{err_file}"
File.open(err_file) { |file| puts file.read }
# Remove the output save file if compile was succesful.
# clean(infile) if ret
end
# Start the right viewer based on the mode.
@ -109,7 +107,7 @@ end
## Initialisation
PROGRAM = File.basename($PROGRAM_NAME).freeze
VERSION = "0.7".freeze
VERSION = "0.9".freeze
# Parse the command line options.
# Determine the compile mode from the options.
@ -128,8 +126,10 @@ opts.each do |opt, _arg|
when "--ps"
mode = :ps
when "--pdf"
mode = if mode == :ps then :pspdf
else :pdf
mode = if mode == :ps
:pspdf
else
:pdf
end
when "--version"
puts "#{PROGRAM} #{VERSION}"
@ -143,12 +143,9 @@ if ARGV.empty?
exit 1
else
infile = Pathname.new(ARGV.shift)
def infile.base
basename(extname)
end
def infile.with_extname(ext)
file = base
file = dirname + basename(extname)
file.extname = ".#{ext}"
file
end
@ -162,7 +159,7 @@ rescue SystemCallError => e
exit 2
end
# Find the dependancies of the input file using rubber-info and
# Find the dependencies of the input file using rubber-info and
# do an initial run.
files = `rubber-info --deps #{infile}`.chomp.split
compile(infile, mode)
@ -175,23 +172,14 @@ viewer_pid =
view(infile, mode)
# If xdvi/evince exits, this program should exit too.
puts "#{PROGRAM}: viewer exited, so will I!"
Process.kill("TERM", pid)
Process.kill("HUP", pid)
end
# Handle signals.
["INT", "TERM", "QUIT"].each do |sig|
Signal.trap(sig) do
Process.kill(sig, viewer_pid)
clean(infile)
exit
end
end
## Main event loop
# Add input file with dependancies to the watch list and start event loop.
notifier = INotify::Notifier.new
dirs = files.map { |file| Pathname.new(file).dirname.realpath }.uniq
dirs = files.map { |file| Pathname.new(file).dirname }.uniq
dirs.each do |dir|
# Set up a watch per directory
notifier.watch(dir.to_s, :close_write) do |ev|
@ -199,11 +187,25 @@ dirs.each do |dir|
file_path = (dir + ev.name).to_s
next unless files.include? file_path
puts "I: file #{ev.name} modified, compiling #{infile}..."
puts "#{PROGRAM}: file #{ev.name} modified, compiling #{infile}..."
compile(infile, mode)
reload(infile, mode)
puts
end
end
# Handle signals during the main event loop.
["INT", "TERM", "QUIT"].each do |sig|
Signal.trap(sig) do
puts "#{PROGRAM}: caught signal #{sig}, stopping the viewer..."
Process.kill(sig, viewer_pid)
notifier.stop
end
end
Signal.trap("HUP") { notifier.stop }
# Run the main event loop.
notifier.run
# Clean before finishing!
clean(infile)