Your comments

This is old, error-prone SVN style. Usually, you have to get the whole working tree at the state of a certain branch. That's what the normal checkout is for. But maybe I don't understand why you need this feature (so often) that you propose a more direct way than the current one.

You should be able to check out every file in every repository state by selecting the commit in the Log, right-clicking the file and selecting Save As.

You can create a wrapper batch file (as diff tool) that simply passes just one (the second) parameter to the tool of your choice.

I agree with you - this update process is bad. Unfortunately, from the technical side I don't know of a better way. The problem is not solely with SmartGit but also by Mercurial's website and incompatible changes of their API.

What exactly you'd expect SmartGit to do? To open the file existing in your working tree, switching to the selected commit and then open the file existing in your working tree, create a temporary clone of the whole repository and invoke it from there or simply create a copy of the selected file in a temporary directory and invoke the tool?

You already can configure the accelerators in Edit | Customize.

The file in the main window are actually files. The entries you see in the Log are historic files - they may have different content locally, be moved or renamed, or deleted. IMHO it makes no(t much) sense to show it in the Log's Files view.

Do you mean the text of the merge commit? Of course, this would be possible, but what problem would this solve?

"Nicer" seems odd. More compact, yes, but nicer? For example, syntax highlighting will not be possible in the unified diff.

Could you please explain what makes the coloring in GitKraken more useful than in SmartGit or other Git clients?