aboutsummaryrefslogtreecommitdiff
path: root/robot/robot.el
blob: 3d965b0e462cb900cd56735e8b4042470e0caf42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
;; Shutup
(setq make-backup-files nil)
(setq auto-save-default nil)

(setq top-dir default-directory)

(set-frame-name "emacs-bot")

(setq debug-on-error t)
(setq debug-on-quit t)

(defun robot-file (file)
  (concat top-dir "robot/" file))

(defun clean (file)
  (delete-file (robot-file file)))

(defun copy (from to)
  (copy-file (robot-file from) (robot-file to) t))

(defun find (file)
  (find-file (robot-file file)))

;; Clean up
(clean "failure.txt")
(clean "messages.txt")

(defun die ()
  (interactive)
  (kill-emacs))

(defun dump-buffer (buffer file)
  (save-excursion
    (when (get-buffer buffer)
      (set-buffer buffer)
      (write-region (point-min) (point-max)
                    (concat top-dir "robot/" file)
                    nil 'dont-display-wrote-file-message))))

(add-hook 'debugger-mode-hook
          'robot-dump-in-a-bit)

(defun robot-dump-in-a-bit ()
  (run-with-timer 1 nil #'robot-dump))

(defun robot-dump ()
  (dump-buffer "*Backtrace*" "failure.txt")
  (dump-buffer "*Messages*" "messages.txt")
  (princ "Killing Emacs after error\n"
         'external-debugging-output)
  (kill-emacs -1))

(defun robot-dump-messages ()
  (dump-buffer "*Messages*" "messages.txt"))

(run-with-timer 1 1 #'robot-dump-messages)

(defun robot-check-cards-seen (n)
  "N is number of cards we expect to have seen this session.
Returns a number representing an exit status code"
  (if (= n org-drill-cards-in-this-emacs)
      (progn
        (princ
         (format "Succeeded: Saw %s cards as expected\n" n)
         'external-debugging-output)
        0)
    (progn
      (princ
       (format "Failed: Saw %s cards, expecting %s\n"
               org-drill-cards-in-this-emacs n)
       'external-debugging-output)
      -1)))

(defun robot-check-cards-seen-and-die (n)
  "N is number of cards we expect to have seen this session."
  (kill-emacs (robot-check-cards-seen n)))

;; Move the package-user-dir somewhere local
(require 'package)
(setq package-user-dir
      (concat
       default-directory
       "elpa"))

(package-initialize)

;; Borrowed from use-package
(defun robot-ensure-elpa (package &optional no-refresh)
  (if (package-installed-p package)
      t
    (if (and (not no-refresh))
        (package-read-all-archive-contents))
    (if (or (assoc package package-archive-contents) no-refresh)
        (package-install package)
      (progn
        (package-refresh-contents)
        (robot-ensure-elpa package t)))))

(robot-ensure-elpa 'persist)