Emacs日历:是否显示超过3个月?

Emacs日历:是否显示超过3个月?,emacs,Emacs,在Emacs中,当您使用M-x calendar显示日历时,您将在一个只有8行高的新窗口中显示三个月的时间,即上个月、本月和下个月 是否可以在全尺寸窗口中生成十二个月的日历?似乎没有一种简单的方法可以做到这一点。我能够完成以下代码,它将在一个单独的框架中连续显示所有12个月 (需要“cl”) (需要日历) (十二个月日历() (互动) (让((日历缓冲区(获取缓冲区创建“12个月日历”)) (第12个月) (2012年) (设置缓冲区日历缓冲区) (setq日历框架(制作框架)) (使可变缓冲区

在Emacs中,当您使用
M-x calendar
显示日历时,您将在一个只有8行高的新窗口中显示三个月的时间,即上个月、本月和下个月


是否可以在全尺寸窗口中生成十二个月的日历?

似乎没有一种简单的方法可以做到这一点。我能够完成以下代码,它将在一个单独的框架中连续显示所有12个月

(需要“cl”)
(需要日历)
(十二个月日历()
(互动)
(让((日历缓冲区(获取缓冲区创建“12个月日历”))
(第12个月)
(2012年)
(设置缓冲区日历缓冲区)
(setq日历框架(制作框架))
(使可变缓冲区成为本地字体锁定面)
(设置面属性的默认日历框:高度70)
(设置日历框架300的框架宽度)
(擦除缓冲区)
(时间(i 12)
(日历生成月份年份0)
(日历增量月-年-1))
(日历模式)

您可能需要根据屏幕/字体大小对其进行一些调整。

12个月日历--按月滚动(向前/向后)

《守则》;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; 按月份滚动年历——向前或向后滚动;;; ;;; ;;; ;;; 要尝试此示例,请计算整个代码段并键入:;;; ;;; ;;; ;;; M-x年历;;; ;;; ;;; ;;; 要按月份向前滚动,请键入键:>;;; ;;; ;;; ;;; 要按月份向后滚动,请键入键:<;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (加载“日历”后评估)(程序 (定义键日历模式映射“”“法律列表”向前滚动日历年))) (循环的列表日历(从初始到最终do&rest正文的变量) “执行for循环。 使用从INIT到FINAL的连续整数绑定VAR计算主体, 包括在内。在大多数情况下,最好使用标准宏“dotimes” `(let(,var(1-,init))) (而(>=,最终(setq,var(1+,var))) (@body))) (定义年日历(&可选月-年) “生成一(1)年日历,该日历可以在每个方向上按月滚动。 这是对以下内容的修改:http://homepage3.nifty.com/oatu/emacs/calendar.html 另见:http://ivan.kanis.fr/caly.el" (互动) (需要日历) (let*((当前年份(数字到字符串)(第n个5(解码时间(当前时间')))) (月)(如为月) (字符串到数字) (读取字符串“请输入月号(例如,1):“nil nil”1”)) (年)(如果是年) (字符串到数字) (阅读字符串“请输入年份(例如2014年):” 无本年无(())) (切换到缓冲区(获取缓冲区创建日历缓冲区)) (何时(非(均衡器主模式“日历模式”) (日历模式) (setq显示月份) (setq显示年份) (setq缓冲区只读为零) (擦除缓冲区) 水平行 (循环j的日历从0到3 do 垂直柱 (循环i从0到2的列表日历) (日历生成月份) 月 (续) (>(+(*j 3)一个月)12) ((+(*j 3)一个月)12) (t (+(*j 3)一个月) 年 (续) (>(+(*j 3)一个月)12) (+第一年)) (t 年) 月与月之间的缩进/间隔 (+5(*25 i))) (转到字符(最大点)) (插入(生成字符串(-10(计数行(最小点)(最大点)))?\n)) (加宽) (转到字符(最大点)) (缩小到区域(最大点)(最大点))) (加宽) (转到字符(最小点)) (setq缓冲区只读(t))) (defun lawlist向前滚动年度日历(&可选arg事件) “按月份向前滚动年度日历。” (交互式(列表(前缀数值当前前缀arg) 最后一个非菜单事件) (除非arg(setq arg 1)) (保存所选窗口) (如果(setq事件(事件开始事件))(选择窗口(posn窗口事件))) (除非(零位参数) (let((月份显示月份) (显示年份) (日历增量月-年参数) (年-日历月-年) (转到字符(最小点)) (运行挂钩的日历移动挂钩))) (defun lawlist向后滚动年度日历(&可选arg事件) “按月份向后滚动年度日历。” (交互式(列表(前缀数值当前前缀arg) 最后一个非菜单事件) (法律列表向前滚动日历年(-(或arg 1))事件)

要做到这一点并不容易,生成日历的代码是:

(defun calendar-generate (month year)
  "Generate a three-month Gregorian calendar centered around MONTH, YEAR."
  ;; A negative YEAR is interpreted as BC; -1 being 1 BC, and so on.
  ;; Note that while calendars for years BC could be displayed as it
  ;; stands, almost all other calendar functions (eg holidays) would
  ;; at best have unpredictable results for such dates.
  (if (< (+ month (* 12 (1- year))) 2)
      (error "Months before January, 1 AD cannot be displayed"))
  (setq displayed-month month
        displayed-year year)
  (erase-buffer)
  (calendar-increment-month month year -1)
  (dotimes (i 3)
    (calendar-generate-month month year
                             (+ calendar-left-margin
                                (* calendar-month-width i)))
    (calendar-increment-month month year 1)))
(定义日历生成(月-年)
生成以月、年为中心的三个月的公历
;;负年份被解释为BC;-1表示BC,依此类推。
请注意,虽然公元前几年的日历可以显示为
几乎所有其他日历功能(如假日)都会
对于这样的日期,充其量只能有不可预测的结果。
(如果(<(+月(*12(1年))2)
(错误“一月之前的月份,无法显示1个广告”))
(东南欧)