Emacs. Календарь

Emacs. Календарь

2021-06-15 · 11 мин. для прочтения

Использование календаря в Emacs.

Содержание

1 Настройка

  • Локализация для русского языка:
    1(setq calendar-week-start-day 1
    2      calendar-day-name-array ["Воскресенье" "Понедельник" "Вторник" "Среда" "Четверг" "Пятница" "Суббота"]
    3      calendar-day-header-array ["Вс" "Пн" "Вт" "Ср" "Чт" "Пт" "Сб"]
    4      calendar-day-abbrev-array ["Вск" "Пнд" "Втр" "Сре" "Чтв" "Птн" "Суб"]
    5      calendar-month-name-array ["Январь" "Февраль" "Март" "Апрель" "Май" "Июнь" "Июль" "Август" "Сентябрь"
    6                                 "Октябрь" "Ноябрь" "Декабрь"]
    7      calendar-month-abbrev-array ["Янв" "Фев" "Мар" "Апр" "Май" "Июн" "Июл" "Авг" "Сен" "Окт" "Ноя" "Дек"])
    

2 Запуск

Для запуска календаря выполните M-x calendar.

3 Использование

3.1 Перемещение по календарю

Режим calendar позволяет перемещаться по календарю через логические промежутки времени, такие как дни, недели, месяцы и годы.

3.1.1 Перемещение по обычным календарным единицам

  • Команды для перемещения в буфере календаря аналогичны командам для перемещения в тексте.
    • C-f перемещает на день вперед (calendar-forward-day).
    • C-b перемещает на день назад (calendar-backward-day).
    • C-n перемещает на неделю вперед (calendar-forward-week).
    • C-p перемещает на неделю назад (calendar-backward-week).
    • M-} перемещает на месяц вперед (calendar-forward-month).
    • M-{ перемещает на месяц назад (calendar-backward-month).
    • C-x ] перемещает на год вперед (calendar-forward-year).
    • C-x [ перемещает на год назад (calendar-backward-year).
  • Курcорные стрелки эквивалентны C-f, C-b, C-n и C-p, как и в других режимах.
  • Команды принимают числовой аргумент в качестве счётчика повторов.
    • Для удобства, в режиме Calendar цифры и знак минус задают числовой аргумент даже без модификатора Meta.
    • Например, 100 C-f перемещает точку на 100 дней вперед от её текущей позиции.

3.1.2 Начало или конец недели, месяца или года

  • Команды для перехода к началу или концу недели, месяца или года:
    • C-a переход к началу недели (calendar-beginning-of-week).
    • C-e переход к концу недели (calendar-end-of-week).
    • M-a переход к началу месяца (calendar-beginning-of-month).
    • M-e переход к концу месяца (calendar-end-of-month).
    • M-< переход к началу года (calendar-beginning-of-year).
    • M-> переход к концу года (calendar-end-of-year).
  • Эти команды также принимают числовые аргументы в качестве счетчиков повторений, который указывает, на сколько недель, месяцев или лет нужно переместиться вперед или назад.
  • По умолчанию недели начинаются с воскресенья. Чтобы сделать так, чтобы они начинались с понедельника, надо установить переменную calendar-week-start-day в значение 1.

3.1.3 Указанные даты

Команды для перехода к конкретной дате, которую можно задать многими способами.

  • g d перемещает точку к указанной дате (calendar-goto-date).
    • Запрашивает год, месяц и день месяца, а затем перемещает к этой дате.
    • Необходимо вводить год полностью; то есть пишите `1990’, а не `90'.
  • o центрирует календарь вокруг указанного месяца (calendar-other-month).
    • Запрашивает месяц и год, а затем центрирует трехмесячный календарь вокруг этого месяца.
  • . перемещает к сегодняшней дате (calendar-goto-today).

3.2 Прокрутка календаря

Изображение календаря автоматически прокручивается, когда вы сдвигаетесь за пределы видимой части. Можно также прокручивать его вручную.

  • C-x < прокручивает календарь на один месяц вперед (scroll-calendar-left).
  • C-x > прокручивает календарь на один месяц назад (scroll-calendar-right).
  • C-v или NEXT прокручивает календарь на три месяца вперед (scroll-calendar-left-three-months).
  • M-v или PRIOR прокручивает календарь на три месяца назад (scroll-calendar-right-three-months).

3.3 Подсчёт дней

  • M-= выводит число дней в текущей области (calendar-count-days-region). Количество дней выводится включительно; то есть дни, указываемые точкой и меткой, учитываются.

3.4 Другие команды календаря

  • p d выводит номер дня в году (calendar-print-day-of-year).
  • C-c C-l заново генерирует окно календаря (redraw-calendar).
  • SPC прокручивает следующее окно (scroll-other-window).
  • q выходит из календаря (exit-calendar).

3.5 \(\LaTeX\) и календарь

  • Команды календаря для работы с \(\LaTeX\) генерируют буфер с \(\LaTeX\)-кодом, который печатает календарь.
    • t m генерирует календарь на один месяц (cal-tex-cursor-month).
    • t M генерирует горизонтальный календарь на один месяц (cal-tex-cursor-month-landscape).
    • t d генерирует календарь на один день (cal-tex-cursor-day).
    • t w 1 генерирует одностраничный календарь на одну неделю (cal-tex-cursor-week).
    • t w 2 генерирует двухстраничный календарь на одну неделю (cal-tex-cursor-week2).
    • t w 3 генерирует календарь в стиле ISO на одну неделю (cal-tex-cursor-week-iso).
    • t w 4 генерирует календарь на одну неделю, начинающуюся с понедельника (cal-tex-cursor-week-monday).
    • t f w генерирует двухнедельный календарь на одной странице в стиле Filofax (cal-tex-cursor-filofax-2week).
    • t f W генерирует недельный календарь на одной странице в стиле Filofax (cal-tex-cursor-filofax-week).
    • t y генерирует календарь на один год (cal-tex-cursor-year).
    • t Y генерирует горизонтальный календарь на один год (cal-tex-cursor-year-landscape).
    • t f y генерирует календарь на один год в стиле Filofax (cal-tex-cursor-filofax-year).
  • В зависимости от использованой команды напечатанный календарь покрывает день, неделю, месяц или год, в котором находится точка.
  • Если переменная cal-tex-holidays не равна nil (это значение по умолчанию), то печатаемые календари показывают праздники из calendar-holidays.
  • Если переменная cal-tex-diary отлична от nil (по умолчанию это nil), также включаются записи из дневника (только в недельные и месячные календари).
  • Если отлична от nil переменная cal-tex-rules (по умолчанию nil), то в тех стилях распечатки календаря, где достаточно места, страницы разлинованы.

3.6 Праздники

  • Календарь Emacs может отображать праздники.
    • h показать праздники, приходящиеся на выбранную дату (calendar-cursor-holidays).
    • Mouse-2 Holidays показать все праздники для даты, на которой вы щелкнули.
    • x пометить праздники (mark-calendar-holidays).
    • u снять метки в окне календаря (calendar-unmark).
    • a перечислить в другом окне все праздники для показанных трех месяцев (list-calendar-holidays).
    • M-x holidays перечислить в другом окне все праздники для трех месяцев вокруг текущей даты.
    • M-x list-holidays Перечислить в другом окне праздники для заданного промежутка лет.
      • Выводит список праздников для нескольких лет.
      • Запрашивает начальный и конечный год и позволяет выбрать все праздники или одну из их категорий.
    • Известные Emacs праздники включают праздники США и основные христианские, иудейские и исламские праздники; также он знает о солнцестояниях и равноденствиях.

3.7 Время восхода и заката Солнца

  • Команды календаря могут сообщить вам с точностью до минуты-двух времена восхода и заката Солнца для любой даты.
    • S показывает времена восхода и заката Солнца для выбранной даты (calendar-sunrise-sunset).
    • Mouse-2 Sunrise/Sunset показывает времена восхода и заката Солнца для даты, на которой вы щёлкнули.
    • M-x sunrise-sunset показывает времена восхода и заката Солнца для сегодняшней даты.
    • C-u M-x sunrise-sunset показывает времена восхода и заката Солнца для заданной даты.
    • C-u C-u M-x sunrise-sunset показывает времена восхода и заката Солнца для любой местности и даты.
      • Запрашивает широту, долготу, разницу от универсального координированного времени и дату, а затем сообщает вам времена восхода и заката для этого места и этой даты.
  • Поскольку время восхода и заката Солнца зависит от положения на Земле, перед использованием этих команд необходимо указать Emacs широту, долготу и название местности. Вот пример задаваемых значений:
    1(setq calendar-latitude 40.1)
    2(setq calendar-longitude -88.2)
    3(setq calendar-location-name "Urbana, IL")
    
  • Задавайте значения calendar-latitude и calendar-longitude с точностью до одной десятой.
  • Часовой пояс также влияет на время восхода и заката.
    • Обычно Emacs получает информацию о часовом поясе от операционной системы.
    • Можно установить их самим:
      1(setq calendar-time-zone -360)
      2(setq calendar-standard-time-zone-name "CST")
      3(setq calendar-daylight-time-zone-name "CDT")
      
    • Значение calendar-time-zone — это разница между местным стандартным и универсальным координированным (гринвичским) временем, выраженная в минутах.
    • Значения calendar-standard-time-zone-name и calendar-daylight-time-zone-name — это сокращения, принятые для обозначения вашего часового пояса.

3.8 Фазы Луны

Даты и времена лунных фаз (новолуние, первая четверть, полнолуние, последняя четверть).

  • M выводит даты и времена всех четвертей Луны для показанного трехмесячного периода (calendar-phases-of-moon).
  • M-x phases-of-moon выводит даты и времена четвертей Луны для трех месяцев вокруг сегодняшней даты.

3.9 Преобразование в другие календарные системы и из них

  • В Emacs всегда показывается григорианский календарь.
  • Хотя Emacs не может показывать другие календари, он умеет преобразовавать даты из нескольких других календарных систем.
  • Поддерживаемые календарные системы:
    • Коммерческий календарь ISO используется в основном в Европе.
    • Юлианский календарь, названный в честь Юлия Цезаря, использовался в Европе в средние века и во многих других странах вплоть до девятнадцатого века.
    • Астрономы используют простой подсчет дней, истекших от полудня понедельника, первого января, 4713-го года до нашей эры по юлианскому календарю. Число прошедших дней называется юлианским или астрономическим номером дня.
    • Иудейский календарь по традиции используется в еврейской религии.
    • Исламский календарь используется во многих мусульманских странах.
    • Календарь французской революции был создан якобинцами после революции 1789-го года для введения более светского и основанного на представлениях о природе взгляда на годовой цикл и для установления десятидневной недели, более рационалистической, как метрическая система. Французское правительство официально отменило этот календарь в конце 1805-го года.
    • Центральноамериканские Майя использовали три разные, перекрывающиеся календарные системы, долгий счет, тцолкин и хааб.
    • Копты используют календарь, основанный на древнеегипетском солнечном календаре. Он состоит из двенадцати тридцатидневных месяцев, за которым идет дополнительный пятидневный период. Раз в четыре года к этому периоду добавляется шестой, високосный день. Эфиопский календарь обладает такой же структурой, но в нем другие номера лет и названия месяцев.
    • Персы используют солнечный календарь, основанный на разработках Омара Хайама. Их календарь состоит из двенадцати месяцев, первые шесть из которых содержат 31 дней, следующие пять – 30 дней, а в последнем 29 дней в обычные года и 30 дней в високосные. Високосные года случаются по сложному образцу каждые четыре или пять лет.
    • Китайский календарь – это сложная система лунных месяцев, скомбинированных с солнечными годами. Годы проходят по циклам из шестидесяти лет, обычный год содержит 12 месяцев, високосный – 13; в каждом месяце либо 29, либо 30 дней. Каждый год, обычный месяц и день именуется комбинацией одного из десяти “небесных стеблей” и одной из двенадцати “земных ветвей”, в общей сложности есть шестьдесят имен, которые проходят по кругу.

3.9.1 Преобразование в другой календарь

Следующие команды описывают выбранную дату (дату, в которой находится точка) в различных календарных системах:

  • Mouse-2 Other Calendars выводит дату, на которой вы щелкнули, выраженную через различные другие календари.
  • p c выводит эквивалент выбранного дня в коммерческом календаре ISO (calendar-print-iso-date).
  • p j выводит юлианскую дату для выбранного дня (calendar-print-julian-date).
  • p a выводит астрономический (юлианский) номер дня для выбранной даты (calendar-print-astro-day-number).
  • p h показывает иудейскую дату для выбранного дня (calendar-print-hebrew-date).
  • p i показывает исламскую дату для выбранного дня (calendar-print-islamic-date).
  • p f показывает французскую революционную дату для выбранного дня (calendar-print-french-date).
  • p C показывает китайскую дату для выбранного дня (calendar-print-chinese-date).
  • p k показывает коптскую дату для выбранного дня (calendar-print-coptic-date).
  • p e показывает эфиопскую дату для выбранного дня (calendar-print-ethiopic-date).
  • p p показывает дату персидского календаря для выбранного дня (calendar-print-persian-date).
  • p m показывает дату календаря Майя для выбранного дня (calendar-print-mayan-date).

3.9.2 Преобразование из другого календаря

  • Вы можете использовать поддерживаемые календари для задания даты, к которой следует переместиться.
    • g c переход к дате, заданной в коммерческом календаре ISO (calendar-goto-iso-date).
    • g j переход к дате, заданной в юлианском календаре (calendar-goto-julian-date).
    • g a переход к дате, заданной астрономическим (юлианским) номером дня (calendar-goto-astro-day-number).
    • g h переход к дате, заданной в иудейском календаре (calendar-goto-hebrew-date).
    • g i переход к дате, заданной в исламском календаре (calendar-goto-islamic-date).
    • g f переход к дате, заданной во французском революционном календаре (calendar-goto-french-date).
    • g C переход к дате, заданной в китайском календаре (calendar-goto-chinese-date).
    • g p переход к дате, заданной в персидском календаре (calendar-goto-persian-date).
    • g k переход к дате, заданной в коптском календаре (calendar-goto-coptic-date).
    • g e переход к дате, заданной в эфиопском календаре (calendar-goto-ethiopic-date).
  • Команды запрашивают дату из другого календаря, перемещают точку к эквивалентной дате григорианского календаря и показывают дату другого календаря в эхо-области.

3.9.3 Преобразование из календаря Майя

  • Команды для выбора дат, оснаванных на календаре Майя:
    • g m l переходит к дате, заданной календарем долгого счета (calendar-goto-mayan-long-count-date).
    • g m n t переходит к следующему появлению некоторого места в календаре тцолкин (calendar-next-tzolkin-date).
    • g m p t переходит к предыдущему появлению некоторого места в календаре тцолкин (calendar-previous-tzolkin-date).
    • g m n h переходит к следующему появлению некоторого места в календаре хааб (calendar-next-haab-date).
    • g m p h переходит к предыдущему появлению некоторого места в календаре хааб (calendar-previous-haab-date).
    • g m n c переходит к следующему появлению некоторого места в календарном круге (calendar-next-calendar-round-date).
    • g m p c переходит к предыдущему появлению некоторого места в календарном круге (calendar-previous-calendar-round-date).
  • Чтобы понять эти команды, нужно понимать календари Майя. Долгий счет – это подсчёт дней в следующих единицах:
    • 1 кин = 1 день
    • 1 уинал = 20 кин
    • 1 тун = 18 уинал
    • 1 катун = 20 тун
    • 1 бактун = 20 катун
  • Таким образом, дата 12.16.11.16.6 в долгом счете означает 12 бактун, 16 катун, 11 тун, 16 уинал и 6 кин. Календарь Emacs может обрабатывать майянские даты долгого счета от 7.17.18.13.1, но не более ранние. Когда вы используете команду g m l, набирайте майянскую дату долгого счета, разделяя бактун, катун, тун, уинал и кин точками.
  • Майянский календарь тцолкин – это цикл из 260 дней, формируемый парой независимых циклов из 13 и 20 дней. Поскольку этот цикл повторяется бесконечно, Emacs предоставляет команды для перемещения назад и вперед к предыдущей или следующей точке цикла. Наберите g m p t, чтобы перейти к предыдущей дате в тцолкин; Emacs спросит у вас дату в тцолкин и переместит точку к предыдущему появлению этой даты. Аналогично, наберите g m n t, чтобы перейти к следующему появлению даты в тцолкин.
  • Майянский календарь хааб – это цикл из 365 дней, собранный из 18 месяцев по 20 в каждом, за которыми следует пятидневный период без месяца. Подобно циклу тцолкин, этот цикл повторяется бесконечно, и есть команды для перехода назад и вперед к предыдущей или следующей точке этого цикла. Наберите g m p h, чтобы перейти к предыдущей дате хааб; Emacs спросит у вас дату в хааб и переместит точку к предыдущему появлению этой даты. Аналогично, наберите g m n h, чтобы перейти к следующему появлению даты в хааб.
  • Майя также использовали комбинацию дат тцолкин и хааб. Эта комбинация — цикл примерно в 52 года, назыавемый календарным кругом. Если вы наберете g m p c, Emacs спросит у вас даты хааб и тцолкин и затем переместит точку к предыдущему появлению этой комбинации. Используйте g m n c для перемещения точки к следующему появлению комбинации. Эти команды сообщают об ошибке, если набранная вами комбинация дат хааб/тцолкин невозможна.
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.