I can't remember whether this source was referred to before, but just to make a complete record here for future reference, I found C3 code that purports to allow any key on a 4x3 matrix keypad to wake up the C3, with no diodes, using "RTC" GPIO pins:
https://github.com/grobasoz/arduino_code/tree/main/XIAO_ESP32_C3
The relevant stuff is in the Readme and the "keypad" sketch. It appears to allow any of the column pins to wake the MCU directly. It looks like the key parts are:
#define COL_PIN_0 GPIO_NUM_2 // D0
#define COL_PIN_1 GPIO_NUM_3 // D1
#define COL_PIN_2 GPIO_NUM_5 // D3
#define COL_PIN_MASK ((1 << COL_PIN_0) + (1 << COL_PIN_1) + (1 << COL_PIN_2))
[and later at line 80]
if (esp_deep_sleep_enable_gpio_wakeup(COL_PIN_MASK, ESP_GPIO_WAKEUP_GPIO_LOW) == ESP_OK)
[etc]
But what about the time required to wake up? Will the key be released before the post-wakeup scan is completed? I think this is not a problem with Arduinos so long as USB isn't connected, but I don't know about ESP stuff.
Also, there would be a question as to how much more current is drawn during deep sleep when keeping these GPIOs alive.