term-sets.el 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. (defun term-sets-make-new-term-folder (year term)
  37. "Make new term folder for YEAR and TERM."
  38. (interactive "nYear: \nsTerm: ")
  39. (make-directory
  40. (expand-file-name
  41. (format "~/org/school/%s/%s/" year term))))
  42. (defun term-sets-make-new-class-notes-file (year term subject number description)
  43. "Create a new file for YEAR, TERM, SUBJECT, NUMBER and DESCRIPTION."
  44. (interactive "nYear: \nsTerm: \nsSubject: \nnNumber: \nsDescription: ")
  45. (let ((filename (expand-file-name
  46. (format "%s/%s/%s/%s-%s.org"
  47. term-sets-base-directory
  48. year
  49. term
  50. (downcase subject)
  51. number)))
  52. (contents (format-spec term-sets-template
  53. (format-spec-make ?t description
  54. ?d (format-time-string "<%Y-%m-%d %a %H:%M>")
  55. ?u user-full-name
  56. ?e user-mail-address
  57. ?s subject
  58. ?n number
  59. ?T term
  60. ?y year))))
  61. (with-current-buffer (find-file-literally filename)
  62. (insert contents)
  63. (save-buffer)
  64. (kill-buffer))))
  65. (defun term-sets-set-new-term (year term)
  66. "Set the new term to YEAR and TERM."
  67. (interactive "nYear: \nsTerm: ")
  68. (case term-sets-save-mechanism
  69. (customize
  70. (custom-set-variables (list 'term-sets-current-year year)
  71. (list 'term-sets-current-term term))
  72. (custom-save-variables))
  73. (file
  74. (with-current-buffer (find-file term-sets-save-file)
  75. (erase-buffer)
  76. (insert (format "%S\n" `(setf term-sets-current-term ,term
  77. term-sets-current-year ,year)))
  78. (save-buffer)
  79. (kill-buffer))))
  80. (buffer-sets-unload-buffer-set term-sets-buffer-set)
  81. (buffer-sets-load-set term-sets-buffer-set))
  82. (defun term-sets-open-files-for-term ()
  83. "Open the files for the current term."
  84. (let ((directory (format "%s/%s/%s/"
  85. term-sets-base-directory
  86. term-sets-current-year
  87. term-sets-current-term)))
  88. (buffer-sets-in-buffers-list term-sets-buffer-set
  89. (find-file directory))
  90. (mapc #'(lambda (file)
  91. (buffer-sets-in-buffers-list term-sets-buffer-set
  92. (find-file file)))
  93. (directory-files directory t ".\\.org$"))))
  94. (defun term-sets-insinuate ()
  95. "Auto-read term-set variables if necessary."
  96. (when (equal term-sets-save-mechanism 'file)
  97. (load term-sets-save-file t t)))
  98. (provide 'term-sets)
  99. ;;; term-sets.el ends here