2009-04-15 17 views
6

Burada ve orada Emacs Lisp'de biraz programlama yapıyorum, ancak bazı şeyleri nasıl yapacağınızdan tam olarak emin değilim.Tüm tarihlerini Emacs Lisp'e ekleyin

aşağıda listesi gibi yeni bir satıra tarihlerin bütün bir ay, her eklemeye çalışıyorum:

Ocak

01/01/09 Pzt:

02/01/09 Sal:

03/01/09 Çar:

vb

nasıl wou Bunu yapmaya devam ediyorum? Tarihlerin nasıl biçimlendirileceğini buldum, ancak belirli bir tarih aralığında nasıl döngü yapılacağını bulamıyorum (bu örnekte bir ay boyunca döngü yapmak ve ayda her gün için bir tarih basmak).

Başlamak için bana nasıl verebilecekleri konusunda bazı işaretçiler var mı?

cevap

6

İstediğiniz işlevler 'encode-time, 'format-time-string ve 'decode-time'dur. uygun belgeler için ya C-h f function-name veya size işlevine veya genel elisp bilgi sayfalarının belgelerine verecektir burada bulunabilir:

(defun my-insert-dates() 
    "insert a bunch of dates" 
    (interactive) 
    (let* ((month 3) 
     (day 1) 
     (time (encode-time 1 1 0 day month 2009))) 
    (while (= (nth 4 (decode-time time)) month) 
     (insert (format-time-string "%D %a:\n" time)) 
     (setq day (1+ day)) 
     (setq time (encode-time 1 1 0 day month 2009))))) 

bulamadım: Burada

C-h i m elisp RET m time conversion RET o pasajı var Belirli bir aydaki gün sayısını nasıl belirleyeceğiniz (kesin bir kod yazabilirsiniz, ancak daha sonra artık yıllar ile uğraşmanız gerekir). Neyse ki, 'encode-time sizin için tüm ekleme yapar, bu yüzden "31 Şubat" eşdeğer geçerseniz, "28 Mart varsayılır" 3 Mart dönecektir.

1

Trey cevabı kullanarak dotimes üzerinde hafif varyasyon:

(defun my-insert-dates() 
    "insert the first day of each month" 
    (interactive) 
    (dotimes (mo 12) 
    (insert (format-time-string "%D %a:\n" (encode-time 1 1 0 1 (1+ mo) 2009))))) 
+0

Tıpkı benim güncellenen bu yorumlama aa/gg/yyyy gg/aa/yyyy okursanız

btw soru değil, "her ayın ilk günü insert" "bir ay eklemek" idi :) bağlıdır günler arasında dolaşmaya cevap verin (aylar değil). Sadece, insanların cevabını benimkilerden nasıl aldığına dair kafam karıştıysa. –

+0

Ack, şimdi cevabım hiç mantıklı değil :) Oh, dotimes hala döngüleri saymak için bilmek iyi. – scottfrazer

+0

Yup, dotimes'ı unuttum. –

3
takvim özelliğini kullanarak sakıncası yoksa ben böyle bir şey yapardı

...

(require 'calendar) 
(defun display-a-month (day month year) 
    (insert (format "%s\n" (calendar-date-string (list month day year)))) 
    (if (< day 30) 
    (display-a-month (+ day 1) month year))) 

Sen bulabilirsiniz Anlatım işlevinin kullanılmasına yardımcı olun (daha önce de belirtildiği gibi Mx betimleme işlevi veya Chf); M-x apropos size bir şeyler ile ilgili fonksiyonların bir listesini verecektir ve daha iyi insanlar üzerinde irc.freenode.org/#emacs size tüm soruları cevaplayacaktır. Eğer

+0

Merak etme, neden '(let ... _ sarıcı? –

+0

Sadece elisp'in işlevsel olmayan bir iş yapabildiğini unutması nedeniyle ... – Ben