---
name: "X11::Protocol::Other"
section: "3pm"
platform: "linux"
package: "perl-x11-protocol-other"
version: "31-6"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/X11::Protocol::Other"
---

# X11::Protocol::Other(3pm)

## NAME

X11::Protocol::Other -- miscellaneous X11::Protocol helpers

## SYNOPSIS

```
 use X11::Protocol::Other;
```

## DESCRIPTION

This is some helper functions for `"X11::Protocol"`.

## EXPORTS

Nothing is exported by default, but the functions can be requested in usual `"Exporter"` style,

```
    use X11::Protocol::Other 'visual_is_dynamic';
    if (visual_is_dynamic ($X, $visual_id)) {
      ...
    }
```

Or just called with full package name

```
    use X11::Protocol::Other;
    if (X11::Protocol::Other::visual_is_dynamic ($X, $visual_id)) {
      ...
    }
```

There's no `":all"` tag since this module is meant as a grab-bag of functions and to import as-yet unknown things would be asking for name clashes.

## FUNCTIONS

### Screen Finding

- "$number = root\_to\_screen ($X, $root)"

  - "$hashref = root\_to\_screen\_info ($X, $root)"

  Return the screen number or screen info hash for a given root window. `$root` can be any XID integer on `$X`.  If it's not one of the root windows then the return is `"undef"`.

- "$number = default\_colormap\_to\_screen ($X, $colormap)"

  - "$hashref = default\_colormap\_to\_screen\_info ($X, $colormap)"

  Return the screen number or screen info hash for a given default colormap. `$colormap` can be any XID integer on `$X`.  If it's not one of the screen default colormaps then the return is `"undef"`.

### Visuals

- "$bool = visual\_is\_dynamic ($X, $visual\_id)"

  - "$bool = visual\_class\_is\_dynamic ($X, $visual\_class)"

  Return true if the given visual is dynamic, meaning colormap entries on it can be changed to change the colour of a given pixel value.

  `$visual_id` is one of the visual ID numbers, ie. one of the keys in `"$X->{'visuals'}"`.  Or `$visual_class` is a VisualClass string like "PseudoColor" or corresponding integer such as 3.

### Window Info

- "($width, $height) = window\_size ($X, $window)"

  - "$visual\_id = window\_visual ($X, $window)"

  Return the size or visual ID of a given window.

  `$window` is an integer XID on `$X`.  If it's one of the root windows then the return values are from the screen info hash in `$X`, otherwise the server is queried with `GetGeometry()` (for the size) or `GetWindowAttributes()` (for the visual).

  These functions are handy when there's a good chance `$window` might be a root window and therefore not need a server round trip.

- "@atoms = get\_property\_atoms($X, $window, $property)"

  Get from `$window` (integer XID) a list-of-atoms property `$property` (atom integer).  The return is a list of atom integers, possibly an empty list.  If `$property` doesn't exist or is not atoms then return an empty list.

- "set\_property\_atoms($X, $window, $property, @atoms)"

  Set on `$window` (integer XID) a list-of-atoms property `$property` (atom integer) as the given list of `@atoms` (possibly empty).

### Colour Parsing

- "($red16, $green16, $blue16) = hexstr\_to\_rgb($str)"

  Parse a given RGB colour string like "#FF00FF" into 16-bit red, green, blue components.  The return values are always in the range 0 to 65535.  The strings recognised are 1, 2, 3 or 4 digit hex.

  ```
      #RGB
      #RRGGBB
      #RRRGGGBBB
      #RRRRGGGGBBBB
  ```

  If `$str` is unrecognised then the return is an empty list, so for instance

  ```
      my @rgb = hexstr_to_rgb($str)
        or die "Unrecognised colour: $str";
  ```

  The digits of the 1, 2 and 3 forms are replicated as necessary to give a 16-bit range.  For example 3-digit style "#321FFF000" gives return values 0x3213, 0xFFFF, 0.  Or 1-digit "#F0F" is 0xFFFF, 0, 0xFFFF.  Notice "F" expands to 0xFFFF so an "F", "FF" or "FFF" all mean full saturation the same as a 4-digit "FFFF".

  Would it be worth recognising the Xcms style "rgb:RR/GG/BB"?  Perhaps that's best left to full Xcms, or general colour conversion modules.  The X11R6 [X(7)](/X/7.md) man page describes the "rgb:" form, but just "#" is much more common.

## SEE ALSO

X11::Protocol, X11::Protocol::GrabServer

Color::Library (many named colours), Convert::Color, Graphics::Color (Moose based) for more colour parsing

X11::AtomConstants, X11::CursorFont

## HOME PAGE

\<http://user42.tuxfamily.org/x11-protocol-other/index.html\>

## LICENSE

Copyright 2010, 2011, 2012, 2013, 2014, 2017, 2019 Kevin Ryde

X11-Protocol-Other is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.

X11-Protocol-Other is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with X11-Protocol-Other.  If not, see \<http://www.gnu.org/licenses/\>.
