An eye-catching keyhole contour appears on p. 250 of the Complex Variables book by Ablowitz and Fokas [2003].
c0 = chebfun('1.5*exp(1i*pi*s)',[0.51 2.49]); % big circle
c1 = chebfun('1+.2*exp(-1i*pi*s)',[-0.93 0.93]); % right circle
c2 = -c1; % left circle
p1 = c0(0.51); p2 = c0(2.49);
p3 = real(c0(2.49)) + 1i*imag(c1(-0.93));
p4 = c1(-0.93); p5 = c1(0.93); % corner points
p6 = c2(-0.93); p7 = c2(0.93);
p8 = real(c0(0.51)) + 1i*imag(c2(0.93));
s = chebfun('s',[0 1]);
z = join( c0, p2+s*(p3-p2), p3+s*(p4-p3), c1, ... % the contour
p5+s*(p6-p5), c2, p7+s*(p8-p7), p8+s*(p1-p8) );
plot(z,'k'), ylim([-1.8 1.8])
hold on, plot([-1 1],[0 0],'.r'), hold off
axis equal, title('Ablowitz-Fokas contour')

Now consider the following integral over this contour (equal to $1/2\pi i$ times the integral as defined by Ablowitz and Fokas), $$ J = {1\over 2\pi i} \int {(z^2 - 1)^{1/2}\over {1+z^2}} dz. $$ We can write the integrand like this,
ff = @(z) (.5i/pi)*(z^2-1)^(1/2)*(-1)^(real(z)>0)/(1+z^2);
where the factor involving real(z) appears in order to avoid inappropriate jumps of branch when $z$ crosses the negative imaginary axis. To compute the keyhole integral in Chebfun, all we need is this:
I = sum(ff(z)*diff(z))
I = 0.707106781186547 + 0.000000000000000i
This compares well with the exact answer:
Iexact = sqrt(2)/2
Iexact = 0.707106781186548
Of course, as always with complex contour integrals, you can move the curves without changing the result, so long you are careful not to cross any branch cuts. Here for example we break a few symmetries:
c0 = chebfun('1.5*exp(1i*pi*s)',[0.51 2.38]); % big circle
c1 = chebfun('1-.03i+.2*exp(-1i*pi*s)',[-0.91 0.80]); % right circle
c2 = chebfun('-1+.07i-.3*exp(-1i*pi*s)',[-0.89 0.82]); % left circle
p1 = c0(0.51); p2 = c0(2.38);
p3 = real(c0(2.38)) + 1i*imag(c1(-0.91));
p4 = c1(-0.91); p5 = c1(0.80); % corner points
p6 = c2(-0.89); p7 = c2(0.82);
p8 = real(c0(0.51)) + 1i*imag(c2(0.82));
z = join( c0, p2+s*(p3-p2), p3+s*(p4-p3), c1, ... % the contour
p5+s*(p6-p5), c2, p7+s*(p8-p7), p8+s*(p1-p8) );
plot(z,'k'), ylim([-1.8 1.8])
hold on, plot([-1 1],[0 0],'.r'), hold off
axis equal, title('Another equivalent contour')

The result is the same:
I = sum(ff(z)*diff(z))
I = 0.707106781186548 - 0.000000000000000i
Reference:
M. J. Ablowitz and A. S. Fokas, Complex Variables: Introduction and Applications, Cambridge University Press, 2003.

