On Tuesday, 17 February 2015 at 19:29:52 UTC, Adam D. Ruppe wrote:
On Tuesday, 17 February 2015 at 19:17:42 UTC, Paul wrote:
I don't understand the error and Google doesn't help - can it be fixed or am I just using the wrong approach?

Trying to create it as a global tries to make it as a static variable which means it constructs at compile time. It can't access the TERM environment variable at compile time and that causes the error.

Putting Terminal at global scope isn't really ideal, there'd be potential destructor problems (the terminal needs to be cleaned up at program termination). You could stick a pointer to it up there though:


Terminal* terminal; // maybe make it shared too but i'd try to avoid that, terminal isn't quite thread safe


void main() {
   auto main_terminal = Terminal(options...);
   terminal = &main_terminal;
scope(exit) terminal = null; // clean up the pointer too when it goes invalid
   // the rest of your program goes normally
   // and other functions can use the global pointer
}



Just make sure you set it in main before doing anything else so the pointer isn't null and you should be good to go. Then when main returns, it will clean up.

I see, thanks once again :D I don't know why the environment variable isn't accessible at compilation (from a terminal) but that's OS business I guess rather than D related.

I did try something similar to your solution but not using a pointer - I'd prefer to avoid using pointers if at all possible!

Reply via email to