User Tools

Site Tools


protocol_handler

Protocol handler

Description

The following script implements a basic protocol_handler (HTTP and HTTPS are not passed to the handler for obvious reasons).

The handler implementation

(function() {
	var run = Uzbl.run;
	delete self.Uzbl;
	var escape = self.escape;
	var String_methods = {
		replace: String.prototype.replace,
		slice: String.prototype.slice,
		match: String.prototype.match
	};
 
	var protocol_handler = function(event) {
		var element = event.target;
		if (event.button === 0 && element.nodeName === "A") {
			var protocol = element.protocol;
			if (!String_methods.match.call(protocol, /^https?:$/)) {
				var handler = run("print @protocol_handler");
				if (String_methods.match.call(handler, /^sh\s|^spawn\s/)) {
					var href = String_methods.replace.call(element.href, /'/g, escape("'"));
					event.stopPropagation();
					event.preventDefault();
					run(handler + " '" + href + "'");
				}
			}
		}
	};
 
	window.addEventListener("click", protocol_handler, false);
})();
 
// vim: set noet ff=unix

An example handler

#!/bin/bash
 
PROTOCOL=${8%:*}
ADDRESS=${8}
 
case ${PROTOCOL} in
	mailto)
		${XTERM} -e mutt "${ADDRESS}"
		;;
	ftp|ftps)
		${XTERM} -e lftp "${ADDRESS}"
		;;
esac
 
# vim: set noet ff=unix

Installation

Save the above scripts to a directory of your choice and add the script to your load_commit_handler and set the protocol_handler eg.

@on_event LOAD_COMMIT script @scripts_dir/protocol_handler.js
set protocol_handler = spawn @scripts_dir/protocols.sh

See also

protocol_handler.txt · Last modified: 2016/08/31 14:10 (external edit)