当前位置: 首页 > 科技观察

助你掌握Emacs:配置日程、日记、日历的详细步骤

时间:2023-03-15 14:16:17 科技观察

我的Emacs日程+日历显示界面如下:日程+日历一目了然,日程里有日出日落、月相、天干地支也有周计数。在日历界面中,国内节日用“大红色”标注,国外节日用粉红色标注。下面一步步拆解上述接口的配置过程。1.安装前准备M-x调用package-install安装Melpa库中的`cal-china-x`包。安装完成后,手动设置路径等。(Add-to-list'load-path"~/.zeroemacs/elpa/cal-china-x-20200924.1837")(require'cal-china-x)只需要这个包,至此准备完成。2.搭建dirary环境1)要从agenda中显示diray信息,首先要配置文件:;;;;diaryinorg-agenda-view(setqorg-agenda-include-diaryt)(setqorg-agenda-diary-file"~/Documents/OrgMode/ORG/Master/standard-diary")(setqdiary-file"~/Documents/OrgMode/ORG/Master/standard-diary")2)然后设置当前位置的坐标:#Coordinates(setqcalendar-longitude***);;long为经度,东经(setqcalendar-latitude***);;lat,flat,北纬3)自定义日出日落两个函数:;;SunriseandSunset;;Sunriseandmake(defundiary-sunrise()(let((dss(diary-sunrise-sunset)))(with-temp-buffer(insertdss)(goto-char(point-min))(while(re-search-forward"([^)]*)"nilt)(replace-match""nilnil))(goto-char(point-min))(search-前进”,”)(缓冲区子串(点-分钟)(匹配-开始0)))));;日落(defundiary-sunset()(让((dss(日记-日出-日落))开始)(with-temp-buffer(insertdss)(goto-char(point-min))(while(re-search-forward"([^)]*)"nilt)(replace-match""nilnil))(goto-char(point-min))(向前搜索",")(setqstart(match-end0))(search-forward"at")(setqend(match-beginning0))(goto-charstart)(capitalize-word1)(buffer-substringstartend))))4)最后写农历天干地支支:;;中国天干地支(setqcalendar-chinese-celestial-stem["A""B""C""D""E""Ji""Geng""Xin""Ren""Kui"])(setqcalendar-chinese-terrestrial-branch["子""丑""寅""卯""辰""巳""午""未""申""酉""戌""亥"])3.搭建日历环境1)首先设置日历为周一开始一周;;将一周设置为从星期一开始。(setqcalendar-week-start-day1)2)标记重要节假日(setqmark-holidays-in-calendart)(setqcal-china-x-important-holidayscal-china-x-chinese-holidays)(setqcalendar-holidays(appendcal-china-x-important-holidayscal-china-x-general-holidayscal-china-general-holidaysholiday-christian-holidays));;.两步设置完成后,就可以呈现出本文开篇的效果了。4.整合日历和日记的时间显示:配置从议程头部显示农历和公历信息:;;displayChinesedate(setqorg-agenda-format-date'zeroemacs/org-agenda-format-date-aligned)(defunzeroemacs/org-agenda-format-date-aligned(date)"FormataDATEstringfordisplayinthedaily/weeklyagenda,ortimeline.Thisfunctionmakessurethatdatesarealignedforeasyreading."(require'cal-iso)(let*((dayname(arefcal-china-x-days(calendar-day-of-weekdate))(day(cadrdate))(month(cardate))(year(nth2date))(cn-date(calendar-chinese-from-absolute(calendar-absolute-from-gregoriandate)))(cn-month(cl-caddrcn-date))(cn-day(cl-caddrcn-date))(cn-month-string(concat(arefcal-china-x-month-name(1-(floorcn-month)))(if(integerpcn-month)"""(闰月)"))(cn-day-string(arefcal-china-x-day-name(1-cn-day))))(format"%04d-%02d-%02dweek%s%s%s"yearmonthdaydaynamecn-month-stringcn-day-string)))五、从t控制日历操作的基本单位日历、日、周、月、季度,最后是年,emacs默认只显示三个月。我们把时间想象成一个无限长的画卷,横向3个月,纵向无限长。三个月的Emacs就像时间长卷打开的一扇窗,我们可以驻足凝视。