All of these environments are good choices for many reasons. However, they aren't without major flaws.
Smalltalk environments do tend to be a bear when following the code around window after window, emacs keychords are not very human friendly or composable and can give you RSI, and lisp parentheses are mainly for the convenience of the language parser, not for the programmer (contrary to the famous quote).
I always miss the convenience of modifying code with Paredit when I'm working in another language.
Try using another language which allows macros and you'll see what I mean. For example, Haxe allows macros, and while it's syntax for them has recently improved, it still has a ways to go. Here's an example macro which checks if its argument is a constant string, and if it is, reads the file it represents. http://haxe.org/manual/macros/#manipulating-expressions
edit: The equivalent in clojure would be something like
(defmacro get-file-contents [s]
(if-not (string? s)
(throw (Exception. "Expected string"))
(slurp s)))
Which happens to look very similar to a function that does the same thing, but at runtime instead of at compile time. (defmacro get-file-contents [s]
(if-not (string? s)
(throw (Exception. "Expected string"))
`(slurp ~s)))Whereas Smalltalk IDE window handling could be improved tremendously from the mid-90's designs it still carries to this day. Not the reflective/debugging/refactoring capabilities (the good parts). Just the GUI and the handling.