TotalSpaces
From Snow Leopard to Big Sur
An early version of TotalFinder was first released in November 2009 during the golden days of Snow Leopard. Although many still remember that operating system with fondness, the Finder implementation of the time was ripe for improvement. We think that TotalFinder was able to really make a difference in the usability of Finder, and we found there was a great deal of support for it.
In April 2012 we released TotalSpaces for macOS Lion, since the grid spaces functionality that we absolutely loved was removed by Apple after the Snow Leopard release. We were able to replace that functionality, and add some configurability and improvements of our own.
TotalSpaces is a third-party application that brings the grid back to Spaces while also adding a handful of other handy features. With TotalSpaces, you can: Change your transitions; Swipe between. TotalSpaces provides a grid of spaces on OSX Lion. Icewm home page. If you have a patch, a bug report or a feature request to submit, please. Jul 07, 2013 TotalSpaces lets you configure many, many desktops. You can additionally change the transition used when switching desktops, drag windows between desktops within the overview, and assign. Make an Offer Your offer is binding for 7 days or until your offer is declined or a counter offer is made. If accepted, you are obligated to complete the transaction. If this offer is not accepted within 7 days it will automatically be withdrawn.
As time went by, we continued to develop these products and support them. Amazingly, TotalFinder has been available for over 11 years, and TotalSpaces for almost 9 years.
Over the years Apple has erected many obstacles, the most important of which was their “rootless” implementation, System Integrity Protection. This prevented modification of the system software, and had to be turned off for the installation or running of our products. Turning SIP off was uncomfortable to do (requiring two reboots), and uncomfortable for us to recommend.
Also notable was that Apple to some extent “Sherlocked” TotalFinder by implementing their own tabs implementation in Finder. We found that some people preferred the TotalFinder tabs, but this did reduce the relevance of TotalFinder to many people.
What now?
At the end of this post from 2018 we noted that TotalFinder and TotalSpaces2 have had a good run, but it is certainly becoming more difficult to support these products. This is due to the additional protections Apple are adding, the changing technology, and more generally the lack of Apple provided APIs to do the kind of system modifications that our customers want.
At that time we promised to support the products during the lifetime of Mojave. As it happened, we did better - we continued to make releases in 2019 and 2020, bringing support to Catalina and now to Big Sur.
However, the support in Big Sur is imperfect, and we are not able to support Apple Silicon macs at all.
So we have to admit that it’s the end of the road for TotalFinder and TotalSpaces2. We will not work on making TotalFinder or TotalSpaces2 work with the next version of macOS, and they will not be ported to Apple Silicon macs.
We will continue to provide limited support TotalFinder and TotalSpaces2 until the end of 2021. We will cease selling new licenses in the summer.
It is unlikely we will make these apps open source. Interested persons may want to look at Yabai which uses some of the same APIs that TotalSpaces2 does (and I believe early on reversed some TotalSpaces2 code - we don’t mind!). It also uses a similar code injection mechanism to TotalFinder and TotalSpaces.
Also Aditya Vaidyam independently discovered some important APIs we use, documented here.
Finally I’d like to mention and credit that the original reversing of the Core Graphics APIs was done by Richard J Wareham, and something may still be learned from this code.
TotalSpaces3
It’s not all bad news! For a while now we have been working on a new version of TotalSpaces, TotalSpaces3. This version will work without modifying the system, and works with SIP enabled. It is a significant challenge to achieve an equivalent experience without the level of access that code injection provided us, but we believe it will be more than usable.
It is intended for Apple Silicon macs only (at this time), and is currently in private alpha testing. We don’t have any release timetable set at the moment, but we will make announcements at the appropriate time.
11 years of BinaryAge
We like to think that we have achieved much during the lifetime of BinaryAge, including the release of various free utilities as well as our paid apps, we have found ways around all kinds of macOS technical roadblocks, and we hope we have helped with the productivity of our users.
BinaryAge is not going anywhere. TotalSpaces3 is coming, and we may continue release new products and utilities in the future.
Sealing Crawl Space Vents
Although these days BinaryAge is a side project for Antonin and I, we hope we can continue to provide good products and service for our customers - and who knows what the future will bring.
Wishing you a safe and prosperous 2021.
Stephen (and Antonin)
#include<stdio.h> |
intmain(void) { |
int n1, n2, n3, n4; |
scanf('%d%d%d%d', &n1, &n2, &n3, &n4); |
/* |
I. PRINTING THE POUND SIGNS |
PATTERN I.A: |
The number of pound signs depends on the |
value of n1 (e.g. if n1 = 5, there are 5 |
pound signs, so we loop from pound 1 to |
pound 5). |
PATTERN I.B: |
For each of the pound sign, EXCEPT FOR |
THE LAST ONE, print a space after it. |
PATTERN I.C: |
After printing all the pound signs, print |
a newline character. |
*/ |
for(int pound = 1; pound <= n1; pound++) { |
printf('#'); |
if(pound < n1) { |
printf(''); |
} |
} |
printf('n'); |
/* |
II. PRINTING THE FORWARD SLASHES |
PATTERN II.A: |
The number of forward slashes depends on the |
value of n2 (e.g. if n2 = 3, there are 3 |
forward slashes, so we loop from forward slash 1 to |
forward slash 3). |
PATTERN II.B: |
Before we print each forward slash, we print some |
spaces. |
PATTERN II.C: |
The INITIAL number of total spaces (the total spaces |
of the first forward slash) to print is dependent |
on the value of n1. Examples: |
n1 = 5 --> totalSpaces = 9 |
n1 = 3 --> totalSpaces = 5 |
We see that there's a formula to it which is: |
totalSpaces = n1 * 2 - 1; |
PATTERN II.D: |
The totalSpaces increases by 1 after every forward slash. |
PATTERN II.E: |
At the end of each forward slash, we print a newline character. |
*/ |
for( |
int fSlash = 1, totalSpaces = n1 * 2 - 1; |
fSlash <= n2; |
fSlash++, totalSpaces++ |
) { |
for(int space = 1; space <= totalSpaces; space++) { |
printf(''); |
} |
printf(''); |
printf('n'); |
} |
/* |
III. PRINTING THE BACKWARD SLASHES |
PATTERN III.A: |
The number of backward slashes depends on the |
value of n3 (e.g. if n3 = 4, there are 4 |
backward slashes, so we loop from backward slash 1 to |
backward slash 4). |
PATTERN III.B: |
Before we print each backward slash, we print some |
spaces. |
PATTERN III.C: |
The INITIAL number of total spaces (the total spaces |
of the first backward slash) to print is dependent |
on the value of n1 and of n2. Examples: |
n1 = 5, n2 = 3 --> totalSpaces = 11 |
n1 = 3, n2 = 2 --> totalSpaces = 6 |
We see that there's a formula to it which is: |
totalSpaces = (n1 * 2 - 1) + (n2 - 1); |
PATTERN III.D: |
The totalSpaces decreases by 1 after every forward slash. |
PATTERN III.E: |
At the end of each backward slash, EXCEPT FOR THE LAST ONE, |
we print a newline character. |
*/ |
for( |
int bSlash = 1, totalSpaces = (n1 * 2 - 1) + (n2 - 1); |
bSlash <= n3; |
bSlash++, totalSpaces-- |
) { |
for(int space = 1; space <= totalSpaces; space++) { |
printf(''); |
} |
printf('/'); |
if(bSlash < n3) { |
printf('n'); |
} |
} |
/* |
IV. PRINTING THE UNDERSCORES |
PATTERN IV.A: |
The number of underscores depends on the |
value of n4 (e.g. if n4 = 7, there are 7 |
underscores, so we loop from underscore 1 to |
underscore 7). |
*/ |
for(int underscore = 1; underscore <= n4; underscore++) { |
printf('_'); |
} |
return0; |
} |