term-sets.el 4.2 KB

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