Ok, I got it working using timer1 interrupts to update the 7-segment and this bit of logic running in the main loop:
void loop (){
if (digitalRead(buttonPin) == 0){ // keep previousMillis
previousMillis = millis(); // and currentMillis in
currentMillis = previousMillis; // sync when button is open
}
if (digitalRead(buttonPin) == 1){
currentMillis = millis(); // measure length of button press
}
if(currentMillis - previousMillis > interval) { // long press?
previousMillis = currentMillis; // Don't need this yet.
allOff(); // clear LEDS
TIMSK1=0x00; // stop timer interrupts
}
if (alarm == 1){
delay(1000);
allOff();
while ( true ){
digitalWrite(G,!digitalRead(G));
delay(200);
}
}
}