Skip to content

VoylinsGamedevJourney/teledot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

135 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TeleDot

A Teleprompter solution made with Godot. This standalone app is all you need for your teleprompting needs.

Features

  • Standalone teleprompter: Easily edit, format, and scroll through your scripts;
  • Bluetooth controller support: Control playback, speed, and scroll using any Bluetooth media remote or keyboard;
  • NeoVim integration: Seamlessly send scripts directly from your code editor;

How use TeleDot?

TeleDot is a standalone application. Simply create a new script inside the app, configure your settings (scroll speed, font size, margin, mirroring), and start the teleprompter!

Bluetooth Controller Controls

You can control the teleprompter using a connected Bluetooth keyboard/remote:

  • Play/Pause: Space or Play/Pause button
  • Speed Up: Right arrow or Next track
  • Speed Down: Left arrow or Previous track
  • Scroll Up/Down: Up/Down arrows
  • Exit Prompter: Escape, Backspace, or Back Button

Send with NeoVim

-- TeleDot --
vim.api.nvim_create_user_command("Teledot", function()
	local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(0), ":t")
	local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
	local text = filename .. "\n" .. table.concat(lines, "\n")
	local uv = vim.loop
	local udp = uv.new_udp()
	udp:bind("0.0.0.0", 0)
	udp:set_broadcast(true)

	local timeout = uv.new_timer()
	timeout:start(2000, 0, vim.schedule_wrap(function()
		if not udp:is_closing() then
			udp:close()
			vim.notify("TeleDot: App not found on network (is it open and on the same Wi-Fi?)", vim.log.levels.ERROR)
		end
	end))

	udp:recv_start(function(err, data, addr, flags)
		if data == "TELEDOT_ACK" then
			if not udp:is_closing() then
				udp:recv_stop()
				udp:close()
				timeout:stop()
				timeout:close()
			end

			local client = uv.new_tcp()
			client:connect(addr.ip, 4242, function(tcp_err)
				if tcp_err then
					vim.schedule(function() vim.notify("TeleDot TCP error: " .. tcp_err, vim.log.levels.ERROR) end)
					return
				end
				client:write(text, function(write_err)
					if write_err then
						vim.schedule(function() vim.notify("TeleDot write error: " .. write_err, vim.log.levels.ERROR) end)
					end
					client:shutdown()
					client:close()
					vim.schedule(function() vim.notify("TeleDot: Script sent successfully!") end)
				end)
			end)
		end
	end)

	udp:send("TELEDOT_DISCOVER", "255.255.255.255", 4243, function(err)
		if err then
			vim.schedule(function() vim.notify("TeleDot UDP error: " .. err, vim.log.levels.ERROR) end)
		end
	end)
end, {})

vim.keymap.set("n", "<leader>t", ":Teledot<CR>")

Support this project

ko-fi Patreon page

About

A better teleprompter (made with Godot)

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors