Function: calendar-basic-setup

calendar-basic-setup is an interactive and byte-compiled function defined in calendar.el.gz.

Signature

(calendar-basic-setup &optional ARG NODISPLAY)

Documentation

Create a three-month calendar.

If optional prefix argument ARG is non-nil, prompts for the month and year, else uses the current date. If NODISPLAY is non-nil, don't display the generated calendar.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/calendar/calendar.el.gz
(defun calendar-basic-setup (&optional arg nodisplay)
  "Create a three-month calendar.
If optional prefix argument ARG is non-nil, prompts for the month
and year, else uses the current date.  If NODISPLAY is non-nil, don't
display the generated calendar."
  (interactive "P")
  (let ((buff (current-buffer)))
    (set-buffer (get-buffer-create calendar-buffer))
    (calendar-mode)
    (let* ((pop-up-windows t)
           ;; Not really needed now, but means we use exactly the same
           ;; behavior as before in the non-wide case (see below).
           (split-height-threshold 1000)
           (split-width-threshold calendar-split-width-threshold)
           (date (if arg (calendar-read-date t)
                   (calendar-current-date)))
           (month (calendar-extract-month date))
           (year (calendar-extract-year date)))
      (calendar-increment-month month year (- calendar-offset))
      ;; Display the buffer before calling calendar-generate-window so that it
      ;; can get a chance to adjust the window sizes to the frame size.
      (unless nodisplay
        ;; We want a window configuration that looks something like
        ;; X        X | Y
        ;; -        -----
        ;; C        Z | C
        ;; where C is the calendar, and the LHS is the traditional,
        ;; non-wide frame, and the RHS is the wide frame case.
        ;; We should end up in the same state regardless of whether the
        ;; windows were initially split or not.
        ;; Previously, we only thought about the non-wide case.
        ;; We could just set split-height-threshold to 1000, relying on
        ;; the fact that the window splitting treated a single window as
        ;; a special case and would always split it (vertically).  The
        ;; same thing does not work in the wide-frame case, so now we do
        ;; the splitting by hand.
        ;; See discussion in bug#1806.
        ;; Actually, this still does not do quite the right thing in the
        ;; wide frame case if started from a configuration like the LHS.
        ;; Eg if you start with a non-wide frame, call calendar, then
        ;; make the frame wider.  This one is problematic because you
        ;; might need to split a totally unrelated window.  Oh well, it
        ;; seems unlikely, and perhaps respecting the original layout is
        ;; the right thing in that case.
        ;;
        ;; Is this a wide frame?  If so, split it horizontally.

	;; The following doesn't sound useful: If we split horizontally
	;; here, the subsequent `pop-to-buffer' will likely split again
	;; horizontally and we end up with three side-by-side windows.
        (when (window-splittable-p (selected-window) t)
	  (split-window-right))
        (pop-to-buffer calendar-buffer)
        ;; Has the window already been split vertically?
        (when (and (not (window-dedicated-p))
		   (window-splittable-p (selected-window))
                   (window-full-height-p))
          (let ((win (split-window-below)))
            ;; In the upper window, show whatever was visible before.
            ;; This looks better than using other-buffer.
            (switch-to-buffer buff)
            ;; Switch to the lower window with the calendar buffer.
            (select-window win))))
      (calendar-generate-window month year)
      (if (and calendar-view-diary-initially-flag
               (calendar-date-is-visible-p date))
          ;; Do not clobber the calendar with the diary, if the diary
          ;; has previously been shown in the window that now shows the
          ;; calendar (bug#18381).
          (let ((display-buffer-overriding-action
                 '(nil . ((inhibit-same-window . t)))))
            (diary-view-entries)))))
  (if calendar-view-holidays-initially-flag
      (let* ((diary-buffer (diary-live-p))
             (diary-window (if diary-buffer (get-buffer-window diary-buffer)))
             (split-height-threshold (if diary-window 2 1000)))
        ;; FIXME display buffer?
        (calendar-list-holidays)))
  (run-hooks 'calendar-initial-window-hook))