2016-06-28 22 views
0

Wie werden hebräische Jahrestage (wie Geburtstage) in der Org Agenda angezeigt? Am besten wäre es über BBDB. Bisher habe ich es geschafft, Jubiläen/Geburtstage zu BBDB hinzuzufügen und sie in org-agenda anzuzeigen. Jetzt muss ich zum nächsten Schritt gehen und diese Daten als hebräische Daten angeben. Im Tagebuchmodus scheinen die Daten wie HSivan 17, 5776 zu sein. Aber wenn ich es in BBDB wie anniversary: HSivan 17, 5776 birthday einfügen - bekomme ich Fehler beim Versuch, Agenda-Sicht zu generieren: bad-sexp at line 5 /path/to/agenda.org (org-bbdb-anniversaries). Vielleicht gibt es andere Möglichkeiten (ohne BBDB), vielleicht kann ich sie direkt in einer .org-Datei auflisten?Wie man hebräische Jahrestage definiert, um in Org-Agenda zu erscheinen?

Antwort

1

Im Allgemeinen org-Modus befasst sich nicht gut (oder überhaupt) mit Kalendern anders als ISO-basierte, western Kalender. Wenn Sie unterschiedlich formatierte Daten in bbdb speichern möchten, können Sie org-bbdb-extract-date-fun anpassen. Sie müssen Ihre eigene Funktion schreiben, um hebräische Daten zu analysieren und zurückzugeben (Monat Tag Jahr).

Damit können Sie eine bbdb-Datenbank mit hebräischen Daten verwenden, aber es wird nicht vorhanden, z. B. Agenda Ausgabe mit hebräischen Daten. Das ist ein viel schwierigeres Problem, insbesondere weil die ISO-Kalenderannahme die Code-Basis des Organisationsmodus durchdringt.

EDIT: Hier ist eine Funktion, die eine Zeichenfolge wie „Heshvan 17, 5776“ nimmt als Argument und erzeugt ein (Monat, Tag, Jahr) tuple dass org verwenden:

;;; This function uses functions and variables defined in calendar.el 
;;; and cal-hebrew.el 

(require 'calendar) 
(require 'cal-hebrew) 

(defun org-bbdb-anniv-extract-hebrew-date (date-string) 
    "Parse the string, assumed to be in the form \"MONTHNAME day, 
    year\", using Hebrew month names. Day is an integer, roughly 
    between 1 and 30 (the range depends on the month and the 
    year), and year is an integer representing a Hebrew calendar 
    year (roughly 5776 ~= 2015)." 
    (let* ((date-list (split-string date-string)) 
      (month-name (nth 0 date-list)) 
      (day (string-to-number (nth 1 date-list))) 
      (year (string-to-number (nth 2 date-list))) 
      (month-array (if (calendar-hebrew-leap-year-p year) 
          calendar-hebrew-month-name-array-leap-year 
          calendar-hebrew-month-name-array-common-year)) 
      (month (cdr (assoc-string 
         month-name 
         (calendar-make-alist month-array 1))))) 
     (calendar-gregorian-from-absolute 
     (calendar-hebrew-to-absolute (list month day year))))) 

;; test: (org-bbdb-anniv-extract-hebrew-date "Heshvan 17, 5776") ==> (10 30 2015) 
;; test: (org-bbdb-anniv-extract-hebrew-date "Heshvan 17, 3762") ==> (10 22 1) 
;; I hope these are right. 

;; To get org-bbdb to use this function to read dates from the BBDB 
;; database, instead of the standard org-bbdb-anniv-extract-date, do 
;; this: 

;; (setq org-bbdb-extract-date-fun #'org-bbdb-anniv-extract-hebrew-date) 

;; N.B. *ALL* dates in the BBDB database will be read using this 
;; function, so *ALL* of them must be Hebrew calendar dates. There is 
;; no provision for dates in different formats. To do that, one would 
;; need to write a function that can recognize dates in different 
;; formats (probably using heuristics) and then call the right 
;; conversion function. That's beyond the scope of this answer. 

;; Also, calendrical calculations are notoriously difficult to get 
;; right: this is no exception. In particular, the month calculation 
;; is probably valid only for dates in the Common Era, i.e. for years 
;; >= 3762. cal-hebrew.el has more details. But in any case, no 
;; guarantees: if it breaks, you get to keep the pieces. 
+0

Mir geht es gut mit der Tatsache, dass der Jahrestag in einem ISO-Kalender angezeigt wird, die einzige Sache, die ich brauche, ist, dass es am ISO-Datum angezeigt wird, das dem hebräischen Datum entspricht. – user1876484

+0

Dann sollte das Schreiben einer Funktion wie oben vorgeschlagen ausreichend sein. Sie können es auf 'org-bbdb-anniv-extract-date' modellieren, aber anstatt eine Zeichenkette der Form 'YYYY-MM-DD' zu verwenden, wird eine hebräische Datums-Zeichenkette benötigt. Möglicherweise können Sie Kalenderfunktionen für die Konvertierung verwenden, aber das ist meines Wissens nicht der Fall. – Nick

+1

cal-hebrew.el enthält das folgende Array von Monatsnamen: '(defconst calendar-hebrew-monatsname-array-common-year [" Nisan "" Iyar "" Sivan "" Tammuz "" Av "" Elul " "Tischri" "Heshvan" "Kislev" "Teveth" "Shevat" "Adar"] "Array von Strings, die die Namen der hebräischen Monate in einem gemeinsamen Jahr geben.") '. Monate werden durch ganze Zahlen dargestellt. unter Annahme von 0, "Heshvan" ist 7, so würde Heshvan 17, 5776 durch (7 17 5776) repräsentiert werden. Die Umrechnung erfolgt mit '(Kalender-Gregorianisch-von-absolut (Kalender-Hebräisch-zu-absolut) (7 17 5776))), was (9 30 2015) ergibt. – Nick

0

Ich glaube, Sie bbdb Problem durch diese Umsetzung in Ihrem .emacs beheben können:

(require 'org-bbdb) 
+0

diese Linie Hinzufügen tat nicht das Problem lösen. Tatsächlich arbeitet/war es für Gregorianische Daten. Ich brauche nur eine Möglichkeit, das hebräische Datum während der Erstellung der Agenda-Ansicht in das Gregorianische umzuwandeln. Interessante Sache: wenn ich schreibe "Jahrestag: HSivan 23, 5776 Geburtstag" bekomme ich den Fehler oben, aber wenn ich es in ISO-Stil schreibe, wie "Jahrestag: H5776-03-23 ​​Geburtstag" bekomme ich keine Fehler, aber der Geburtstag ist wird auch nicht angezeigt. Ich habe gerade eine ähnliche Frage zu Chineese gefunden (http://stackoverflow.com/questions/36557402/viewing-chinese-korean-lunar-birthday-on-orga-agenda). – user1876484

+0

Sorry, aber ich weiß nicht viel mehr als Sie über dieses Problem. Sie können versuchen, die Emacs-Dokumentation zu durchsuchen: https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Calendars.html#Other-Calendars, oder versuchen Sie, den Quellcode für den hebräischen Kalender zu lesen, für mich gefunden unter '/ usr/local/share/emacs/24.4/lisp/kalender/cal-hebrew.el.gz'. –