ReverseFlux

Da aggiungere2

Feb 9th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.57 KB | None | 0 0
  1. (setq initial-scratch-message "")
  2. (setq visible-bell t)
  3. (when (window-system)
  4. (tool-bar-mode 0)
  5. (when (fboundp 'horizontal-scroll-bar-mode)
  6. (horizontal-scroll-bar-mode -1))
  7. (scroll-bar-mode -1))
  8.  
  9. (defun unfill-paragraph ()
  10. "Convert a multi-line paragraph into a single line of text."
  11. (interactive)
  12. (let ((fill-column (point-max)))
  13. (fill-paragraph nil)))
  14.  
  15. (global-set-key (kbd "C-x k") 'kill-this-buffer)
  16. (global-set-key (kbd "C-x K") 'kill-buffer)
  17.  
  18. (defadvice helm-find-files (after sudo-find-file activate)
  19. "Find file as root if necessary."
  20. (unless (and buffer-file-name
  21. (file-writable-p buffer-file-name))
  22. (let* ((file-name (buffer-file-name))
  23. (file-root (if (string-match "/ssh:\\([^:]+\\):\\(.*\\)" file-name)
  24. (concat "/ssh:" (match-string 1 file-name)
  25. "|sudo:" (match-string 1 file-name)
  26. ":" (match-string 2 file-name))
  27. (concat "/sudo:localhost:" file-name))))
  28. (find-alternate-file file-root))))
  29.  
  30. (use-package python
  31. :mode ("\\.py\\'" . python-mode)
  32. ("\\.wsgi$" . python-mode)
  33. :interpreter ("python" . python-mode)
  34.  
  35. :init
  36. (setq-default indent-tabs-mode nil)
  37.  
  38. :config
  39. (setq python-indent 4)
  40. (add-hook 'python-mode-hook 'color-identifiers-mode))
  41.  
  42. (use-package org
  43. :ensure t ; But it comes with Emacs now!?
  44. :init
  45. (setq org-use-speed-commands t
  46. org-return-follows-link t
  47. org-hide-emphasis-markers t
  48. org-outline-path-complete-in-steps nil
  49. org-src-fontify-natively t ;; Pretty code blocks
  50. org-src-tab-acts-natively t
  51. org-confirm-babel-evaluate nil
  52. org-todo-keywords '((sequence "TODO(t)" "DOING(g)" "|" "DONE(d)")
  53. (sequence "|" "CANCELED(c)")))
  54. (add-to-list 'auto-mode-alist '("\\.txt\\'" . org-mode))
  55. (add-to-list 'auto-mode-alist '(".*/[0-9]*$" . org-mode)) ;; Journal entries
  56. (add-hook 'org-mode-hook 'yas-minor-mode-on)
  57. :bind (("C-c l" . org-store-link)
  58. ("C-c c" . org-capture)
  59. ("C-M-|" . indent-rigidly))
  60. :config
  61. (font-lock-add-keywords ; A bit silly but my headers are now
  62. 'org-mode `(("^\\*+ \\(TODO\\) " ; shorter, and that is nice canceled
  63. (1 (progn (compose-region (match-beginning 1) (match-end 1) "⚑")
  64. nil)))
  65. ("^\\*+ \\(DOING\\) "
  66. (1 (progn (compose-region (match-beginning 1) (match-end 1) "⚐")
  67. nil)))
  68. ("^\\*+ \\(CANCELED\\) "
  69. (1 (progn (compose-region (match-beginning 1) (match-end 1) "✘")
  70. nil)))
  71. ("^\\*+ \\(DONE\\) "
  72. (1 (progn (compose-region (match-beginning 1) (match-end 1) "✔")
  73. nil)))))
  74. (use-package org-journal
  75. :ensure t
  76. :init
  77. (setq org-journal-dir "~/journal/")
  78. (setq org-journal-date-format "#+TITLE: Journal Entry- %e %b %Y (%A)")
  79. (setq org-journal-time-format ""))
  80. (defun get-journal-file-today ()
  81. "Return filename for today's journal entry."
  82. (let ((daily-name (format-time-string "%Y%m%d")))
  83. (expand-file-name (concat org-journal-dir daily-name))))
  84.  
  85. (defun journal-file-today ()
  86. "Create and load a journal file based on today's date."
  87. (interactive)
  88. (find-file (get-journal-file-today)))
  89.  
  90. (global-set-key (kbd "C-c f j") 'journal-file-today)
  91. (defun get-journal-file-yesterday ()
  92. "Return filename for yesterday's journal entry."
  93. (let* ((yesterday (time-subtract (current-time) (days-to-time 1)))
  94. (daily-name (format-time-string "%Y%m%d" yesterday)))
  95. (expand-file-name (concat org-journal-dir daily-name))))
  96.  
  97. (defun journal-file-yesterday ()
  98. "Creates and load a file based on yesterday's date."
  99. (interactive)
  100. (find-file (get-journal-file-yesterday)))
  101.  
  102. (global-set-key (kbd "C-c f y") 'journal-file-yesterday)
  103. (defun journal-file-insert ()
  104. "Insert's the journal heading based on the file's name."
  105. (interactive)
  106. (let* ((year (string-to-number (substring (buffer-name) 0 4)))
  107. (month (string-to-number (substring (buffer-name) 4 6)))
  108. (day (string-to-number (substring (buffer-name) 6 8)))
  109. (datim (encode-time 0 0 0 day month year)))
  110.  
  111. (insert (format-time-string org-journal-date-format datim))
  112. (insert "\n\n $0\n") ; Start with a blank separating line
  113.  
  114. ;; Note: The `insert-file-contents' leaves the cursor at the
  115. ;; beginning, so the easiest approach is to insert these files
  116. ;; in reverse order:
  117.  
  118. ;; If the journal entry I'm creating matches today's date:
  119. (when (equal (file-name-base (buffer-file-name))
  120. (format-time-string "%Y%m%d"))
  121. (insert-file-contents "journal-dailies-end.org")
  122.  
  123. ;; Insert dailies that only happen once a week:
  124. (let ((weekday-template (downcase
  125. (format-time-string "journal-%a.org"))))
  126. (when (file-exists-p weekday-template)
  127. (insert-file-contents weekday-template)))
  128. (insert-file-contents "journal-dailies.org")
  129. (insert "$0")
  130.  
  131. (let ((contents (buffer-string)))
  132. (delete-region (point-min) (point-max))
  133. (yas-expand-snippet contents (point-min) (point-max)))))))
  134.  
  135. (define-auto-insert "/[0-9]\\{8\\}$" [journal-file-insert])
  136. (defun journal-last-year-file ()
  137. "Returns the string corresponding to the journal entry that
  138. happened 'last year' at this same time (meaning on the same day
  139. of the week)."
  140. (let* ((last-year-seconds (- (float-time) (* 365 24 60 60)))
  141. (last-year (seconds-to-time last-year-seconds))
  142. (last-year-dow (nth 6 (decode-time last-year)))
  143. (this-year-dow (nth 6 (decode-time)))
  144. (difference (if (> this-year-dow last-year-dow)
  145. (- this-year-dow last-year-dow)
  146. (- last-year-dow this-year-dow)))
  147. (target-date-seconds (+ last-year-seconds (* difference 24 60 60)))
  148. (target-date (seconds-to-time target-date-seconds)))
  149. (format-time-string "%Y%m%d" target-date)))
  150.  
  151. (defun journal-last-year ()
  152. "Loads last year's journal entry, which is not necessary the
  153. same day of the month, but will be the same day of the week."
  154. (interactive)
  155. (let ((journal-file (concat org-journal-dir (journal-last-year-file))))
  156. (find-file journal-file)))
  157.  
  158. (global-set-key (kbd "C-c f L") 'journal-last-year)
  159.  
  160. (setq delete-old-versions -1)
  161. (setq version-control t)
  162. (setq vc-make-backup-files t)
  163. (setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save-list/" t)))
  164. (setq savehist-file "~/.emacs.d/savehist")
  165. (savehist-mode 1)
  166. (setq history-length t)
  167. (setq history-delete-duplicates t)
  168. (setq savehist-save-minibuffer-history 1)
  169. (setq savehist-additional-variables
  170. '(kill-ring
  171. search-ring
  172. regexp-search-ring))
  173. (setq sentence-end-double-space nil)
  174.  
  175. (use-package helm
  176. :diminish helm-mode
  177. :init
  178. (progn
  179. (require 'helm-config)
  180. (setq helm-candidate-number-limit 100)
  181. ;; From https://gist.github.com/antifuchs/9238468
  182. (setq helm-idle-delay 0.0 ; update fast sources immediately (doesn't).
  183. helm-input-idle-delay 0.01 ; this actually updates things
  184. ; reeeelatively quickly.
  185. helm-yas-display-key-on-candidate t
  186. helm-quick-update t
  187. helm-M-x-requires-pattern nil
  188. helm-ff-skip-boring-files t)
  189. (helm-mode))
  190. :bind (("C-c h" . helm-mini)
  191. ("C-h a" . helm-apropos)
  192. ("C-x C-b" . helm-buffers-list)
  193. ("C-x b" . helm-buffers-list)
  194. ("M-y" . helm-show-kill-ring)
  195. ("M-x" . helm-M-x)
  196. ("C-x c o" . helm-occur)
  197. ("C-x c s" . helm-swoop)
  198. ("C-x c y" . helm-yas-complete)
  199. ("C-x c Y" . helm-yas-create-snippet-on-region)
  200. ("C-x c b" . my/helm-do-grep-book-notes)
  201. ("C-x c SPC" . helm-all-mark-rings)))
  202. (ido-mode -1)
  203.  
  204. (ert-deftest my/org-capture-prefill-template ()
  205. (should
  206. ;; It should fill things in one field at ia time
  207. (string=
  208. (my/org-capture-prefill-template
  209. "* TODO %^{Task}\nSCHEDULED: %^t\n:PROPERTIES:\n:Effort: %^{effort|1:00|0:05|0:15|0:30|2:00|4:00}\n:END:\n%?\n"
  210. "Hello World")
  211. "* TODO Hello World\nSCHEDULED: %^t\n:PROPERTIES:\n:Effort: %^{effort|1:00|0:05|0:15|0:30|2:00|4:00}\n:END:\n%?\n"
  212. ))
  213. (should
  214. (string=
  215. (my/org-capture-prefill-template
  216. "* TODO %^{Task}\nSCHEDULED: %^t\n:PROPERTIES:\n:Effort: %^{effort|1:00|0:05|0:15|0:30|2:00|4:00}\n:END:\n%?\n"
  217. "Hello World" "<2015-01-01>")
  218. "* TODO Hello World\nSCHEDULED: <2015-01-01>\n:PROPERTIES:\n:Effort: %^{effort|1:00|0:05|0:15|0:30|2:00|4:00}\n:END:\n%?\n"))
  219. (should
  220. (string=
  221. (my/org-capture-prefill-template
  222. "* TODO %^{Task}\nSCHEDULED: %^t\n:PROPERTIES:\n:Effort: %^{effort|1:00|0:05|0:15|0:30|2:00|4:00}\n:END:\n%?\n"
  223. "Hello World" "<2015-01-01>" "0:05")
  224. "* TODO Hello World\nSCHEDULED: <2015-01-01>\n:PROPERTIES:\n:Effort: 0:05\n:END:\n%?\n")))
  225.  
  226. (defun my/org-capture-prefill-template (template &rest values)
  227. "Pre-fill TEMPLATE with VALUES."
  228. (setq template (or template (org-capture-get :template)))
  229. (with-temp-buffer
  230. (insert template)
  231. (goto-char (point-min))
  232. (while (re-search-forward
  233. (concat "%\\("
  234. "\\[\\(.+\\)\\]\\|"
  235. "<\\([^>\n]+\\)>\\|"
  236. "\\([tTuUaliAcxkKInfF]\\)\\|"
  237. "\\(:[-a-zA-Z]+\\)\\|"
  238. "\\^\\({\\([^}]*\\)}\\)"
  239. "?\\([gGtTuUCLp]\\)?\\|"
  240. "%\\\\\\([1-9][0-9]*\\)"
  241. "\\)") nil t)
  242. (if (car values)
  243. (replace-match (car values) nil t))
  244. (setq values (cdr values)))
  245. (buffer-string)))
  246.  
  247. (defun my/org-get-current-refile-location ()
  248. "Return the current entry as a location understood by org-refile."
  249. (interactive)
  250. (list (elt (org-heading-components) 4)
  251. (or buffer-file-name
  252. (with-current-buffer (buffer-base-buffer (current-buffer))
  253. buffer-file-name))
  254. nil
  255. (point)))
  256.  
  257. (defun my/helm-org-create-task (candidate)
  258. "Creates the task and returns the location."
  259. (let ((entry (org-capture-select-template "T")))
  260. (org-capture-set-plist entry)
  261. (org-capture-get-template)
  262. (org-capture-set-target-location)
  263. (condition-case error
  264. (progn
  265. (org-capture-put
  266. :template
  267. (org-capture-fill-template
  268. (my/org-capture-prefill-template (org-capture-get :template)
  269. candidate)))
  270. (org-capture-place-template
  271. (equal (car (org-capture-get :target)) 'function))
  272. (setq org-refile-target-table (org-refile-get-targets))
  273. ;; Return the new location
  274. (my/org-get-current-refile-location))
  275. ((error quit)
  276. (if (get-buffer "*Capture*") (kill-buffer "*Capture*"))
  277. (error "Capture abort: %s" error)))))
  278. (defvar my/helm-org-refile-locations nil)
  279. (defvar my/org-refile-last-location nil)
  280.  
  281. (defun my/helm-org-clock-in-and-track-from-refile (candidate)
  282. (let ((location (org-refile--get-location candidate my/helm-org-refile-locations)))
  283. (save-window-excursion
  284. (org-refile 4 nil location)
  285. (my/org-clock-in-and-track)
  286. t)))
  287.  
  288. (defun my/org-get-todays-items-as-refile-candidates ()
  289. "Return items scheduled for today, ready for choosing during refiling."
  290. (delq
  291. nil
  292. (mapcar
  293. (lambda (s)
  294. (if (get-text-property 0 'org-marker s)
  295. (list
  296. s
  297. (buffer-file-name (marker-buffer (get-text-property 0 'org-marker s)))
  298. nil
  299. (marker-position (get-text-property 0 'org-marker s)))))
  300. (save-window-excursion (my/org-get-entries-fn (calendar-current-date) (calendar-current-date))))))
  301.  
  302. ;; Based on http://emacs.stackexchange.com/questions/4063/how-to-get-the-raw-data-for-an-org-mode-agenda-without-an-agenda-view
  303. (defun my/org-get-entries-fn (begin end)
  304. "Return org schedule items between BEGIN and END.
  305. USAGE: (org-get-entries-fn '(6 1 2015) '(6 30 2015))"
  306. (require 'calendar)
  307. (require 'org)
  308. (require 'org-agenda)
  309. (require 'cl)
  310. (unless
  311. (and
  312. (calendar-date-is-valid-p begin)
  313. (calendar-date-is-valid-p end))
  314. (let ((debug-on-quit nil))
  315. (signal 'quit `("One or both of your gregorian dates are invalid."))))
  316. (let* (
  317. result
  318. (org-agenda-prefix-format " • ")
  319. (org-agenda-entry-types '(:scheduled))
  320. (date-after
  321. (lambda (date num)
  322. "Return the date after NUM days from DATE."
  323. (calendar-gregorian-from-absolute
  324. (+ (calendar-absolute-from-gregorian date) num))))
  325. (enumerate-days
  326. (lambda (begin end)
  327. "Enumerate date objects between BEGIN and END."
  328. (when (> (calendar-absolute-from-gregorian begin)
  329. (calendar-absolute-from-gregorian end))
  330. (error "Invalid period : %S - %S" begin end))
  331. (let ((d begin) ret (cont t))
  332. (while cont
  333. (push (copy-sequence d) ret)
  334. (setq cont (not (equal d end)))
  335. (setq d (funcall date-after d 1)))
  336. (nreverse ret)))) )
  337. (org-agenda-reset-markers)
  338. (setq org-agenda-buffer
  339. (when (buffer-live-p org-agenda-buffer)
  340. org-agenda-buffer))
  341. (org-compile-prefix-format nil)
  342. (setq result
  343. (loop for date in (funcall enumerate-days begin end) append
  344. (loop for file in (org-agenda-files nil 'ifmode)
  345. append
  346. (progn
  347. (org-check-agenda-file file)
  348. (apply 'org-agenda-get-day-entries file date org-agenda-entry-types)))))
  349. (unless (buffer-live-p (get-buffer org-agenda-buffer-name))
  350. (get-buffer-create org-agenda-buffer-name))
  351. (with-current-buffer (get-buffer org-agenda-buffer-name)
  352. (org-agenda-mode)
  353. (setq buffer-read-only t)
  354. (let ((inhibit-read-only t))
  355. (erase-buffer))
  356. (mapcar
  357. (lambda (x)
  358. (let ((inhibit-read-only t))
  359. (insert (format "%s" x) "\n")))
  360. result))
  361. ;; (display-buffer org-agenda-buffer-name t)
  362. result))
  363.  
  364. (defun my/helm-org-refile-read-location (tbl)
  365. (setq my/helm-org-refile-locations tbl)
  366. (helm
  367. (list
  368. ;; (helm-build-sync-source "Today's tasks"
  369. ;; :candidates (mapcar (lambda (a) (cons (car a) a))
  370. ;; (my/org-get-todays-items-as-refile-candidates))
  371. ;; :action '(("Select" . identity)
  372. ;; ("Clock in and track" . my/helm-org-clock-in-and-track-from-refile)
  373. ;; ("Draw index card" . my/helm-org-prepare-index-card-for-subtree))
  374. ;; :history 'org-refile-history)
  375. (helm-build-sync-source "Refile targets"
  376. :candidates (mapcar (lambda (a) (cons (car a) a)) tbl)
  377. :action '(("Select" . identity)
  378. ("Clock in and track" . my/helm-org-clock-in-and-track-from-refile)
  379. ("Draw index card" . my/helm-org-prepare-index-card-for-subtree))
  380. :history 'org-refile-history)
  381. (helm-build-dummy-source "Create task"
  382. :action (helm-make-actions
  383. "Create task"
  384. 'my/helm-org-create-task)))))
  385.  
  386. (defun my/org-refile-get-location (&optional prompt default-buffer new-nodes no-exclude)
  387. "Prompt the user for a refile location, using PROMPT.
  388. PROMPT should not be suffixed with a colon and a space, because
  389. this function appends the default value from
  390. `org-refile-history' automatically, if that is not empty.
  391. When NO-EXCLUDE is set, do not exclude headlines in the current subtree,
  392. this is used for the GOTO interface."
  393. (let ((org-refile-targets org-refile-targets)
  394. (org-refile-use-outline-path org-refile-use-outline-path)
  395. excluded-entries)
  396. (when (and (derived-mode-p 'org-mode)
  397. (not org-refile-use-cache)
  398. (not no-exclude))
  399. (org-map-tree
  400. (lambda()
  401. (setq excluded-entries
  402. (append excluded-entries (list (org-get-heading t t)))))))
  403. (setq org-refile-target-table
  404. (org-refile-get-targets default-buffer excluded-entries)))
  405. (unless org-refile-target-table
  406. (user-error "No refile targets"))
  407. (let* ((cbuf (current-buffer))
  408. (partial-completion-mode nil)
  409. (cfn (buffer-file-name (buffer-base-buffer cbuf)))
  410. (cfunc (if (and org-refile-use-outline-path
  411. org-outline-path-complete-in-steps)
  412. 'org-olpath-completing-read
  413. 'org-icompleting-read))
  414. (extra (if org-refile-use-outline-path "/" ""))
  415. (cbnex (concat (buffer-name) extra))
  416. (filename (and cfn (expand-file-name cfn)))
  417. (tbl (mapcar
  418. (lambda (x)
  419. (if (and (not (member org-refile-use-outline-path
  420. '(file full-file-path)))
  421. (not (equal filename (nth 1 x))))
  422. (cons (concat (car x) extra " ("
  423. (file-name-nondirectory (nth 1 x)) ")")
  424. (cdr x))
  425. (cons (concat (car x) extra) (cdr x))))
  426. org-refile-target-table))
  427. (completion-ignore-case t)
  428. cdef
  429. (prompt (concat prompt
  430. (or (and (car org-refile-history)
  431. (concat " (default " (car org-refile-history) ")"))
  432. (and (assoc cbnex tbl) (setq cdef cbnex)
  433. (concat " (default " cbnex ")"))) ": "))
  434. pa answ parent-target child parent old-hist)
  435. (setq old-hist org-refile-history)
  436. ;; Use Helm's sources instead
  437. (setq answ (my/helm-org-refile-read-location tbl))
  438. (cond
  439. ((and (stringp answ)
  440. (setq pa (org-refile--get-location answ tbl)))
  441. (org-refile-check-position pa)
  442. (when (or (not org-refile-history)
  443. (not (eq old-hist org-refile-history))
  444. (not (equal (car pa) (car org-refile-history))))
  445. (setq org-refile-history
  446. (cons (car pa) (if (assoc (car org-refile-history) tbl)
  447. org-refile-history
  448. (cdr org-refile-history))))
  449. (if (equal (car org-refile-history) (nth 1 org-refile-history))
  450. (pop org-refile-history)))
  451. (setq my/org-refile-last-location pa)
  452. pa)
  453. ((and (stringp answ) (string-match "\\`\\(.*\\)/\\([^/]+\\)\\'" answ))
  454. (setq parent (match-string 1 answ)
  455. child (match-string 2 answ))
  456. (setq parent-target (org-refile--get-location parent tbl))
  457. (when (and parent-target
  458. (or (eq new-nodes t)
  459. (and (eq new-nodes 'confirm)
  460. (y-or-n-p (format "Create new node \"%s\"? "
  461. child)))))
  462. (org-refile-new-child parent-target child)))
  463. ((listp answ) answ) ;; Sacha: Helm returned a refile location
  464. ((not (equal answ t))
  465. (user-error "Invalid target location")))))
  466.  
  467. (fset 'org-refile-get-location 'my/org-refile-get-location)
  468.  
  469. (prefer-coding-system 'utf-8)
  470. (when (display-graphic-p)
  471. (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
  472.  
  473. (use-package helm-swoop
  474. :bind
  475. (("C-S-s" . helm-swoop)
  476. ("M-i" . helm-swoop)
  477. ("M-s s" . helm-swoop)
  478. ("M-s M-s" . helm-swoop)
  479. ("M-I" . helm-swoop-back-to-last-point)
  480. ("C-c M-i" . helm-multi-swoop)
  481. ("C-x M-i" . helm-multi-swoop-all)
  482. )
  483. :config
  484. (progn
  485. (define-key isearch-mode-map (kbd "M-i") 'helm-swoop-from-isearch)
  486. (define-key helm-swoop-map (kbd "M-i") 'helm-multi-swoop-all-from-helm-swoop))
  487. )
  488.  
  489. (defun my/smarter-move-beginning-of-line (arg)
  490. "Move point back to indentation of beginning of line.
  491.  
  492. Move point to the first non-whitespace character on this line.
  493. If point is already there, move to the beginning of the line.
  494. Effectively toggle between the first non-whitespace character and
  495. the beginning of the line.
  496.  
  497. If ARG is not nil or 1, move forward ARG - 1 lines first. If
  498. point reaches the beginning or end of the buffer, stop there."
  499. (interactive "^p")
  500. (setq arg (or arg 1))
  501.  
  502. ;; Move lines first
  503. (when (/= arg 1)
  504. (let ((line-move-visual nil))
  505. (forward-line (1- arg))))
  506.  
  507. (let ((orig-point (point)))
  508. (back-to-indentation)
  509. (when (= orig-point (point))
  510. (move-beginning-of-line 1))))
  511.  
  512. ;; remap C-a to `smarter-move-beginning-of-line'
  513. (global-set-key [remap move-beginning-of-line]
  514. 'my/smarter-move-beginning-of-line)
  515.  
  516. (use-package yasnippet
  517. :diminish yas-minor-mode
  518. :init (yas-global-mode)
  519. :config
  520. (progn
  521. (yas-global-mode)
  522. (add-hook 'hippie-expand-try-functions-list 'yas-hippie-try-expand)
  523. (setq yas-key-syntaxes '("w_" "w_." "^ "))
  524. (setq yas-installed-snippets-dir "~/elisp/yasnippet-snippets")
  525. (setq yas-expand-only-for-last-commands nil)
  526. (yas-global-mode 1)
  527. (bind-key "\t" 'hippie-expand yas-minor-mode-map)
  528. (add-to-list 'yas-prompt-functions 'shk-yas/helm-prompt)))
  529. ;; (global-set-key (kbd "C-c y") (lambda () (interactive)
  530. ;; (yas/load-directory "~/elisp/snippets")))
Advertisement
Add Comment
Please, Sign In to add comment