From 32b40e2a532d930c58e85a39f47bf807470f08a8 Mon Sep 17 00:00:00 2001 From: TheMohawkNinja Date: Tue, 1 Sep 2020 20:40:54 -0400 Subject: [PATCH] updateTermInfo now properly handles closed terminals and duplicate terminal entries in the TermInfo file --- README | 2 +- nohup.out | 842 +++++++++++++++++++++++++++++++++++++++++++++ updateTermInfo | Bin 36528 -> 40936 bytes updateTermInfo.cpp | 52 ++- 4 files changed, 881 insertions(+), 15 deletions(-) diff --git a/README b/README index d7fe1f3..8ec6571 100644 --- a/README +++ b/README @@ -36,7 +36,7 @@ ISSUES It's not the most lightweight thing in the world. I developed this on a Dell Latitude E6540, and while the htop output for the program itself always shows <10%, the overall core usage clearly increases by ~10% during it's usage. It may not be an issue for machines with a descrete GPU, however. - Moving a terminal to a different monitor while the previous monitor is under a transition can cause flickering foreground color until its' current monitor transitions. + Due to how terminal information is updated, if you need to restart updateTermInfo or WallFade altogether, this will necessitate a system reboot to function properly. TO CONTRIBUTORS diff --git a/nohup.out b/nohup.out index 1b93a31..a26ed53 100644 --- a/nohup.out +++ b/nohup.out @@ -137124,3 +137124,845 @@ Updating term info Getting terminal positions Updating term info +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info +Getting terminal positions +Updating term info +Terminal 6 NOT located, deleting + Setting term[0]=12 + Setting term[1]=0 + Setting term[1] to 0 + +TERM ORDER +12 + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info +Getting terminal positions +Updating term info + + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info +Getting terminal positions +Updating term info + + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info +Getting terminal positions +Updating term info + + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions +Updating term info + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + +Getting terminal positions + 4, 0x0160000a, 10, 10 + +Updating term info +Terminal 4 located (0x0160000a), checking for duplicates + Re-cached term 4 (0x0160000a) at: 10, 10 + diff --git a/updateTermInfo b/updateTermInfo index df8cc15e3644c12284e4dab2199aa9a1f0ac54aa..6c96e539d9c39e8ce865992ffdd95ddda11a74ab 100755 GIT binary patch literal 40936 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 by^ts~lwQS$*9nrAKVyU77#3F`j%5D>CK&0b diff --git a/updateTermInfo.cpp b/updateTermInfo.cpp index 1c80826..c88cba0 100644 --- a/updateTermInfo.cpp +++ b/updateTermInfo.cpp @@ -38,13 +38,24 @@ int main() string termID[maxTerms]; ifstream readstream; - while(true) - //while(getCmdOut("ps -aux | grep WallFade | grep -v grep")!="") + //while(true) + while(getCmdOut("ps -aux | grep WallFade | grep -v grep")!="") { + + //Reset terminal arrays + for(int i=0; i> term[i]; @@ -59,34 +70,45 @@ int main() getline(readstream,line); std::istringstream sy (line); sy >> termY[i]; - } + + if(term[i]!=0) + { + cout<<"\t"+to_string(term[i])+", "+termID[i]+", "+to_string(termX[i])+", "+to_string(termY[i])< "+configpath+"tty").c_str()); - for(int i=0; term[i+1]!=0; i++) + for(int i=0; term[i]!=0; i++) { readstream.open(configpath+"tty"); - getline(readstream,line); - do + while(readstream) { //Check if terminal still exists, remove duplicates, and write back to TermInfo + getline(readstream,line); std::istringstream stty (line); stty >> tty; + if(stoi(tty)==term[i]) { - cout<<"Terminal "+to_string(term[i])+" located, checking for duplicates"<> termY[i]; system(("echo "+to_string(termY[i])+" >> "+configpath+"TermInfo").c_str()); - cout<<"\tTerm "<