term-sets.el 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. ;;; term-sets.el --- Manage terms of notes
  2. ;; Copyright (C) 2017 Samuel Flint
  3. ;; Author: Samuel W. Flint <swflint@flintfam.org>
  4. ;; Version: 1.0
  5. ;; Package-Requires: ((buffer-sets "2.5"))
  6. ;; Keywords: buffer-management, notes, organization
  7. ;; URL: https://git.flintfam.org/swf-projects/buffer-sets
  8. ;;; Commentary:
  9. ;;
  10. ;;; Code:
  11. (require 'buffer-sets)
  12. (defcustom term-sets-save-mechanism 'customize
  13. "Method to save term-sets data."
  14. :type '(choice (const :tag "Customize" customize)
  15. (const :tag "File" file)
  16. (const :tag "Don't Save" nil))
  17. :group 'editing)
  18. (defcustom term-sets-save-file "~/.emacs.d/term-sets-data.el"
  19. "Where to save term-sets data in file save mechanism."
  20. :type 'file :group 'editing)
  21. (defcustom term-sets-current-year (nth 5 (decode-time))
  22. "Year to use for finding files."
  23. :type 'integer :group 'editing)
  24. (defcustom term-sets-current-term "fall"
  25. "Term to use for finding files."
  26. :type 'string :group 'editing)
  27. (defcustom term-sets-base-directory "~/org/school"
  28. "Directory that notes files are contained in."
  29. :type 'directory :group 'editing)
  30. (defcustom term-sets-template "#+Title: %t\n#+AUTHOR: %u\n#+EMAIL: %e\n#+DATE: %d\n#+OPTIONS: H:5 ':t *:t d:nil stat:nil todo:nil num:nil\n#+LATEX_CLASS_OPTIONS: [10pt,twocolumn]\n#+LATEX_HEADER: \\usepackage[landscape,margin=0.125 in]{geometry}\n#+LATEX_HEADER: \\pagestyle{empty}\n\n"
  31. "Template for notes file."
  32. :type 'string :group 'editing)
  33. (defcustom term-sets-buffer-set 'school
  34. "The name of the buffer-set to use."
  35. :type 'symbol :group 'editing)
  36. (defcustom term-sets-term-path "%d/%y/%t/"
  37. "Template for term paths."
  38. :type 'string :group 'editing)
  39. (defcustom term-sets-course-file-name "%s-%n.org"
  40. "Template for course file names"
  41. :type 'string :group 'editing)
  42. (defun term-sets-get-term-directory (year term)
  43. (expand-file-name
  44. (format-spec term-sets-term-path
  45. (format-spec-make ?d term-sets-base-directory
  46. ?y year
  47. ?t term))))
  48. (defun term-sets-make-new-term-folder (year term)
  49. "Make new term folder for YEAR and TERM."
  50. (interactive "nYear: \nsTerm: ")
  51. (make-directory (term-sets-get-term-directory year term)))
  52. (defun term-sets-get-course-file (year term subject number)
  53. (expand-file-name (format "%s/%s"
  54. (term-sets-get-term-directory year term)
  55. (format-spec term-sets-course-file-name
  56. (format-spec-make ?s subject
  57. ?n number)))))
  58. (defun term-sets-make-new-class-notes-file (year term subject number description)
  59. "Create a new file for YEAR, TERM, SUBJECT, NUMBER and DESCRIPTION."
  60. (interactive "nYear: \nsTerm: \nsSubject: \nnNumber: \nsDescription: ")
  61. (let ((filename (term-sets-get-course-file year term subject number))
  62. (contents (format-spec term-sets-template
  63. (format-spec-make ?t description
  64. ?d (format-time-string "<%Y-%m-%d %a %H:%M>")
  65. ?u user-full-name
  66. ?e user-mail-address
  67. ?s subject
  68. ?n number
  69. ?T term
  70. ?y year))))
  71. (with-current-buffer (find-file-literally filename)
  72. (insert contents)
  73. (save-buffer)
  74. (kill-buffer))))
  75. (defun term-sets-set-new-term (year term)
  76. "Set the new term to YEAR and TERM."
  77. (interactive "nYear: \nsTerm: ")
  78. (case term-sets-save-mechanism
  79. (customize
  80. (custom-set-variables (list 'term-sets-current-year year)
  81. (list 'term-sets-current-term term))
  82. (custom-save-variables))
  83. (file
  84. (with-current-buffer (find-file term-sets-save-file)
  85. (erase-buffer)
  86. (insert (format "%S\n" `(setf term-sets-current-term ,term
  87. term-sets-current-year ,year)))
  88. (save-buffer)
  89. (kill-buffer))))
  90. (buffer-sets-unload-buffer-set term-sets-buffer-set)
  91. (buffer-sets-load-set term-sets-buffer-set))
  92. (defun term-sets-open-files-for-term ()
  93. "Open the files for the current term."
  94. (let ((directory (term-sets-get-term-directory term-sets-current-year
  95. term-sets-current-term)))
  96. (buffer-sets-in-buffers-list term-sets-buffer-set
  97. (find-file directory))
  98. (mapc #'(lambda (file)
  99. (buffer-sets-in-buffers-list term-sets-buffer-set
  100. (find-file file)))
  101. (directory-files-recursively directory ".\\.org$" t))))
  102. (defun term-sets-insinuate ()
  103. "Auto-read term-set variables if necessary."
  104. (when (equal term-sets-save-mechanism 'file)
  105. (load term-sets-save-file t t)))
  106. (provide 'term-sets)
  107. ;;; term-sets.el ends here