---
name: "Curses::UI::Calendar"
section: "3pm"
platform: "linux"
package: "perl-curses-ui"
version: "0.9609-15"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Curses::UI::Calendar"
---

# Curses::UI::Calendar(3pm)

Create and manipulate calendar widgets

## NAME

Curses::UI::Calendar - Create and manipulate calendar widgets

## CLASS HIERARCHY

```
 Curses::UI::Widget
    |
    +----Curses::UI::Calendar
```

## SYNOPSIS

```
    use Curses::UI;
    my $cui = new Curses::UI;
    my $win = $cui->add('window_id', 'Window');
    my $calendar = $win->add(
        'mycalendar', 'Calendar',
    -date    => '2002-1-14'
    );
    $calendar->focus();
    my $date = $calendar->get();
```

## DESCRIPTION

Curses::UI::Calendar is a widget that can be used to create  a calendar in which the user can select a date. The calendar widget looks like this:

```
  +----------------------+
  | mmm dd          yyyy |
  +----------------------+
  | su mo tu we th fr sa |
  |                      |
  |       01 02 03 04 05 |
  | 06 07 08 09 10 11 12 |
  | 13 14 15 16 17 18 19 |
  | 20 21 22 23 24 25 26 |
  | 27 28 29 30 31       |
  +----------------------+
```

See exampes/demo-Curses::UI::Calendar in the distribution for a short demo.

## STANDARD OPTIONS

**-parent**, **-x**, **-y**, **-width**, **-height**,  **-pad**, **-padleft**, **-padright**, **-padtop**, **-padbottom**, **-ipad**, **-ipadleft**, **-ipadright**, **-ipadtop**, **-ipadbottom**, **-title**, **-titlefullwidth**, **-titlereverse**, **-onfocus**, **-onblur**

For an explanation of these standard options, see  Curses::UI::Widget.

**Remark**: **-width** and **-height** can be set, but this widget  really want to have its content space at a minimum size. If your **-width** or **-height** is not large enough, the widget will automatically fix its value.

## WIDGET-SPECIFIC OPTIONS

- •

  **-date** \< DATE \>

  This option sets the date to start with.  If you do not specify a date, today's  date will be used automatically. The format that  you can use for this date is one of:

  \* **YYYY-M-D** (e.g. 2002-1-10 or 2002-01-10)

  \* **YYYY/M/D** (e.g. 2002/1/10 or 2002/01/10))

  \* **YYYYMMDD** (e.g. 20020110)

  \* **D-M-YYYY** (e.g. 10-1-2002 or 10/01/2002)

  \* **D/M/YYYY** (e.g. 10/1/2002 or 10/01/2002)

- •

  **-onchange** \< CODEREF \>

  This sets the onChange event handler for the calendar widget. If a new date is selected, the code in CODEREF will be executed. It will get the widget reference as its argument.

- •

  **-drawline** \< CODEREF \>

  This option specifies whether or not a line should be drawn under the calendar.

## METHODS

- •

  **new** ( OPTIONS )

- •

  **layout** ( )

- •

  **draw** ( BOOLEAN )

- •

  **focus** ( )

- •

  **onFocus** ( CODEREF )

- •

  **onBlur** ( CODEREF )

- •

  **intellidraw** ( )

  These are standard methods. See Curses::UI::Widget  for an explanation of these.

- •

  **get** ( )

  This method will return the currently selected date in the format 'YYYY-MM-DD'.

- •

  **setdate** ( DATE, \[BOOLEAN\] )

  Set the selected date of the widget to DATE. See **-date** above for the possible formats. The widget will redraw itself, unless BOOLEAN has a true value.

- •

  **onChange** ( CODEREF )

  This method can be used to set the **-onchange** event handler (see above) after initialization of the calendar.

## DEFAULT BINDINGS

- •

  \<**tab**\>

  Call the 'loose-focus' routine. This will have the menubar loose its focus and return the value 'LOOSE\_FOCUS' to the calling routine.

- •

  \<**enter**\>, \<**space**\>

  Call the 'date-select' routine. This will select the date on which the cursor is.

- •

  \<**cursor-left**\>, \<**h**\>

  Call the 'date-prevday' routine. This will have the date  cursor go back one day.

- •

  \<**cursor-right**, \<**l**\>

  Call the 'date-nextday' routine. This will have the  date cursor go forward one day.

- •

  \<**cursor-down**\>, \<**j**\>

  Call the 'date-nextweek' routine. This will have the  date cursor go forward one week.

- •

  \<**cursor-up**\>, \<**k**\>

  Call the 'date-prevweek' routine. This will have the  date cursor go back one week.

- •

  \<**page-up**\>, \<**SHIFT+K**\>

  Call the 'date-prevmonth' routine. This will have the  date cursor go back one month.

- •

  \<**page-down**\>, \<**SHIFT+J**\>

  Call the 'date-nextmonth' routine. This will have the  date cursor go forward one month.

- •

  \<**p**\>, \<**SHIFT+H**\>

  Call the 'date-prevyear' routine. This will have the  date cursor go back one year.

- •

  \<**n**\>, \<**SHIFT+L**\>

  Call the 'date-nextyear' routine. This will have the  date cursor go forward one year.

- •

  \<**home**\>, \<**CTRL+A**\>, \<**c**\>

  Call the 'date-selected' routine. This will have the  date cursor go to the current selected date.

- •

  \<**t**\>

  Call the 'date-today' routine. This will have the date cursor go to today's date.

## SEE ALSO

Curses::UI,  Curses::UI::Widget,  Curses::UI::Common

## AUTHOR

Copyright (c) 2001-2002 Maurice Makaay. All rights reserved.

Maintained by Marcus Thiesen (marcus@cpan.thiesenweb.de)

This package is free software and is provided "as is" without express or implied warranty. It may be used, redistributed and/or modified under the same terms as perl itself.
