Every handle type now guards Close against nil receivers and repeated calls by clearing its C pointer after freeing it, matching the pattern SnapshotDecoder already used. Previously, a second Close on a Terminal, Formatter, Search, RenderState, encoder, event, parser or iterator would double-free the underlying C allocation.
Terminal.Close also clears its effect buffer fields after freeing them.
Note: I know you're going to potentially break the API, but I'm trying to complete a convention the codebase already started; Go programmers expect Close to be repeatable like most stdlib types.