A function to cancel a single specific event, I used Ripley's change_duration as the model 
 
I also added an "interrupt_events" function which I call in "command_interpreter", so you can have events interrupted or canceled just like how you become un-hidden if you hit enter or do anything else.
Code:
void event_cancel_specific(struct char_data *ch, event_id iId)
{
  struct event * pEvent;
  struct mud_event_data * pMudEvent = NULL;
  bool found = FALSE;
  if (ch->events == NULL)
    return;
  if (ch->events->iSize == 0)
    return;
  clear_simple_list();  
  while ((pEvent = (struct event *) simple_list(ch->events)) != NULL) {
    if (!pEvent->isMudEvent)
      continue;
     pMudEvent = (struct mud_event_data * ) pEvent->event_obj;
    if (pMudEvent->iId == iId) {
     found = TRUE;
     break;
    }
  }
  if (found) 
      event_cancel(pEvent);
  
  return;
} 
 
Code:
void interrupt_events(struct char_data *ch)
{
    /* Cancel events that require player to wait before completion..
     * Replace 'eREPAIR' with your own events    
     */
    event_cancel_specific(ch, eREPAIR); 
   
}