clipboard(n)

πŸ“¦
version 9.0.3 Β· 3 versions
, in alpine 3.23, alpine 3.24, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable

🌸 NAME 🌸

clipboard β€” Manipulate Tk clipboard. This is clipboard(n) from the Tk Built-In Commands, and it's about to be your new fave for clipboard stuff πŸ’–.

✨ SYNOPSIS ✨

clipboard option ?arg ...?

πŸ’– DESCRIPTION πŸ’–

Okay so this command gives you a Tcl interface to the Tk clipboard β€” the thing that stores data for later retrieval using the selection mechanism (via the -selection CLIPBOARD option). To copy data into the clipboard, you have to call clipboard clear first, then follow it with a sequence of one or more calls to clipboard append. And to make sure the clipboard gets updated atomically, complete all those appends before returning to the event loop, bestie β€” no cap.

The first argument to clipboard is the main character: it determines the format of the rest of the arguments and the behavior of the command. These are the forms that are currently supported, periodt:

  • clipboard append ?-displayof window? ?-format format? ?-type type? ?--? data β€” appends data to the clipboard on window's display in the form given by type, with the representation given by format, and claims ownership of the clipboard on window's display. ✨
    • -displayof window β€” sets the window whose display gets the append and the clipboard ownership claim.
    • -type type β€” tells the command the form in which the selection is to be returned (the desired β€œtarget” for conversion, in ICCCM terminology). It should be an atom name such as STRING or FILE_NAME; see the Inter-Client Communication Conventions Manual for complete details. type defaults to STRING.
    • -format format β€” this is the representation that should be used to transmit the selection to the requester (the second column of Table 2 of the ICCCM), and it defaults to STRING.
      • If format is STRING, the selection is transmitted as 8-bit ASCII characters.
      • If format is ATOM, then the data is divided into fields separated by white space; each field is converted to its atom value, and the 32-bit atom value is transmitted instead of the atom name.
      • For any other format, data is divided into fields separated by white space, and each field is converted to a 32-bit integer; an array of integers is transmitted to the selection requester.
      • Note that strings passed to clipboard append are concatenated before conversion, so the caller must take care to ensure appropriate spacing across string boundaries. All items appended to the clipboard with the same type must have the same format.
    • -- β€” marks the end of options: the next argument will always be used as data. This is convenient if, for example, data starts with a -.
Okay but real talk: the format argument is needed only for compatibility with clipboard requesters that do not use Tk. If the Tk toolkit is being used to retrieve the CLIPBOARD selection, then the value is converted back to a string at the requesting end, so format is irrelevant. 🫢
  • clipboard clear ?-displayof window? β€” claims ownership of the clipboard on window's display and removes any previous contents. window defaults to ".". Returns an empty string.
    • -displayof window β€” picks the window whose display gets the clipboard ownership claim and the contents wiped.
  • clipboard get ?-displayof window? ?-type type? β€” retrieves data from the clipboard on window's display. window defaults to ".". type specifies the form in which the data is to be returned and should be an atom name such as STRING or FILE_NAME. type defaults to STRING. This command is equivalent to selection get -selection CLIPBOARD.
    • -displayof window β€” picks the window whose display to retrieve from. Defaults to ".".
    • -type type β€” picks the form the data comes back in. Defaults to STRING.
    • > Note that on modern X11 systems, the most useful type to retrieve for transferred strings is not STRING, but rather UTF8_STRING. πŸ‘‘

πŸŽ€ EXAMPLES πŸŽ€

Get the current contents of the clipboard. And catch the case where there were no clipboard contents at all:

if {[catch {clipboard get} contents]} {
    # There were no clipboard contents at all
}

Set the clipboard to contain a fixed string.

clipboard clear
clipboard append "some fixed string"

You can put custom data into the clipboard by using a custom -type option. This is not necessarily portable, but can be very useful. The method of passing Tcl scripts this way is effective, but should be mixed with safe interpreters in production code. 🧚

# This is a very simple canvas serializer;
# it produces a script that recreates the item(s) when executed
proc getItemConfig {canvas tag} {
   set script {}
   foreach item [$canvas find withtag $tag] {
      append script {$canvas create } [$canvas type $item]
      append script { } [$canvas coords $item] { }
      foreach config [$canvas itemconf $item] {
         lassign $config name - - - value
         append script [list $name $value] { }
      }
      append script \n
   }
   return [string trim $script]
}

# Set up a binding on a canvas to cut and paste an item
set c [canvas .c]
pack $c
$c create text 150 30 -text "cut and paste me"
bind $c <<Cut>> {
   clipboard clear
   clipboard append -type TkCanvasItem \
         [getItemConfig %W current]
   # Delete because this is cut, not copy.
   %W delete current
}
bind $c <<Paste>> {
   catch {
      set canvas %W
      eval [clipboard get -type TkCanvasItem]
   }
}

πŸ¦‹ SEE ALSO πŸ¦‹

πŸ‘‘ KEYWORDS πŸ‘‘

  • clear
  • format
  • clipboard
  • append
  • selection
  • type

mwah πŸ’‹ β€” source/version: Tk 8.4; manual page: clipboard(n); date: not listed in the footer, bestie πŸ™ˆ

πŸ“¦ where this page comes from