Thanks. I have no better ideas, so this will have to do. Does anyone
else have any opinions?

I have some more explanation. After this commit (https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=9e77c1b7bcfd0807be7fe67daf73c2320e864309)
which introduce input_was_pending, read_char became to redisplay always 
after processing special event.

```
input_was_pending = input_pending;
```
is a way to prevent redisplay. The same code is placed at end of read_char.


Emacs at current emacs-27 branch cannot use isearch with macOS native 
input method (I checked with macOS Japanese input method and get 
```
ns-delete-working-text: Wrong type argument: arrayp, nil
```
).  This is worse situation for macOS native input method users.
Even if modifying keyboard.c is not acceptable, I think reverting the position of 
```
  if (workingText != nil)
    [self deleteWorkingText];
```
in insertText should be done.

If the patch I sent before is acceptable, I have two patch for improvement.

0001-proper-selection-window-position-for-isearch.patch
This is to show candidate window for IM at proper position when isearch.