
- #Explain all options of ditto clipboard manager how to
- #Explain all options of ditto clipboard manager free
Apps can send data to the compositor (maybe via a sealed memfd) or just tell the compositor to ask for the data when it wants it. It does seem to me that a hybrid implementation may have been the best. However the app can always start with a simple implementation (just make a copy/reference count internally) then migrate to a better implementation when it makes sense. Of course this does add a lot of complexity to do it "well". If the owning app is offering to do conversions (for example text/csv or text/html for a table) it only needs to hold one version in memory.

#Explain all options of ditto clipboard manager how to
(For example if you are copying images you just need to reference-count the image, or if you are copying a table in an app with an undo history you are holding that data anyways, you just need to know how to rebuild the old version for the copy).Ģ. If the owning app doesn't need it anymore it does need to keep it around until the clipboard is replaced, but this is likely still cheaper than copying. I think you are right but it is still an optimization in the common case.ġ. Speaking of which, I've never been able to get BetterTouchTool's own clipboard manager to work.
#Explain all options of ditto clipboard manager free
I would appreciate suggestions other alternatives, whether free or paid. The closest I've found is Maccy while limited to 999 clips, it supports 3 and I can partially replicate 4 with BetterTouchTool's help. I have tried ClipDrop, Clipy, Cop圜lip, Clips, ClipMenu, Jumpcut, and Qlipper, but nothing has all virtues. It was broken on Monterey 12.5.1 with Monterey 12.6 it is mysteriously working again, but I know I can't depend on it forever. Ondesoft hasn't updated ClipBuddy in years, and each new MacOS version makes it creakier. Scroll up and down the history before pasting, again with the keyboard. Paste without formatting from the keyboard.Ĥ. Unlimited clip storage, with no limit whether by time or space.ģ. It is, by far, the best MacOS clipboard manager:ġ. On MacOS I have eight years of clips saved in a SQLite database created by Ondesoft's ClipBuddy. With a serializing copy the cost of serialization for the copy must be paid up front because we can't know whether the same application will be the receiver. If I have two copies of an image resource in my document, I can just use the same image in both locations. For example, an immutable data structure can just be added as another reference. One huge benefit of the no-actual-clipboard design that I can immediately see is the fact that probably 99% of all cut/copy/paste operations are within the same application, and this design allows a shortcut where the data can be cloned as the application sees fit. copy and persist data so that apps don't have to take care of it themselves? But still: the fact that it doesn't survive a shutdown sounds problematic.Ĭan a clipboard manager fill that gap completely, i.e. Obviously this is more elegant for several reasons (performance, security/privacy) etc. What's the reason for this unusual no-actual-clipboard design? The user's mental model of a clipboard is that things are copied to the clipboard, so breaking that mental model has to have a reason? Go also had trouble with setuid() for the same reason (it would only get set for the current thread on Linux), although IIRC that's long since been fixed (this was around Go 1.5 or so). Modern service managers don't really rely on processes to "daemonize" any more, which was always a bit hacky, and in my 8 years of Go this is the only time I ever wanted to do anything like this.

I think in general it's just not really considered much of a priority. The C++ runtime is tiny in comparison, and doesn't do anything like the Go scheduler. I'm sure it's not literally impossible, but I wasn't able to get it to work in a reasonable amount of time so I just shrugged and exec'd xclip instead. Or something along those lines it's been a while and this kind of stuff isn't really my expertise.

As I understand it, the problem is that the Go scheduler uses threading to schedule the goroutines, and fork(2) says: "the child process is created with a single thread-the one that called fork()", so your fork then lose access to the scheduler.
