Questions about Digistump's Digikeyboard

Hello everyone,

I would like to properly understand Digikeyboard.h (link)
What puzzles me is that you can do the following:

#include "DigiKeyboard.h"
void setup() {

DigiKeyboard.delay(3000);
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.print(F("ABCD"));
}

I can only find the definition for delay() and sendKeyStroke() in DigiKeyboard.h but not print().
I would really like to understand how print() works in DigiKeyboard.

Does anybody happen to know where print() and F() are defined?

Thank you very much!

They are defined in the core library.

testtesttesttesttestestest:
Does anybody happen to know where print()

it is inherited from the Print class:
https://github.com/digistump/DigisparkArduinoIntegration/blob/a4dd9f65b7289935d561e188e2e21dab5e62017f/libraries/DigisparkKeyboard/DigiKeyboard.h#L132

class DigiKeyboardDevice : public Print {

The definition of the Print class is here:

This is some pretty cool code. It converts any printable type down to a call to a virtual method named write(). write() is defined by the class that inherits the Print class. So that same Print class code can be used for the DigisparkKeyboard library, HardwareSerial, SoftwareSerial, Ethernet, LiquidCrystal, and on and on…

testtesttesttesttestestest:
and F() are defined?

It seems they left it out of their “tiny” core. You can see it here in the “pro” core:
https://github.com/digistump/DigistumpArduino/blob/111396ffe5163c3613b9315cbea1a3eabc9ba6dc/digistump-avr/cores/pro/WString.h#L38

Thank you very much for the detailed answer!

While looking into it I also started to wonder how it's done that a PC recognizes the Digispark as a HID device.
Is this simply because

defines it as a keyboard?