]> git.vanrenterghem.biz Git - Dotty.git/blob - emacs/.emacs.d/init.el
Add capture template for calendar event.
[Dotty.git] / emacs / .emacs.d / init.el
1 ;; Added by Package.el.  This must come before configurations of
2 ;; installed packages.  Don't delete this line.  If you don't want it,
3 ;; just comment it out by adding a semicolon to the start of the line.
4 ;; You may delete these explanatory comments.
5 (package-initialize)
7 (add-to-list 'load-path "~/.emacs.d/lisp/")
9 (tool-bar-mode -1)
11 ;; Configure printing using CUPS network printer
12 (setq lpr-switches
13       (append '("-o raw"
14                 "-o media=A4")
15               lpr-switches))
17 ;; Enable the melpa archive for packages
18 (use-package package
19   :config
20   (setq package-enable-at-startup nil)
21   (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
22   (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
23   (add-to-list 'package-archives
24                '("elpy" . "http://jorgenschaefer.github.io/packages/")))
26 (use-package system-packages
27   :ensure t)
29 (use-package modus-themes
30   :ensure t
31   :demand t ;; Without this, the theme load is deferred due to the
32             ;; bind keyword below
33   :init
34   ;; Add all customisation prior to loading the themes
35   (setq modus-themes-mixed-fonts t)
36   :config
37   (modus-themes-select 'modus-vivendi-tinted)
38   (variable-pitch-mode)
39   :bind ("<f5>" . modus-themes-toggle))
41 (use-package orderless
42   :ensure t
43   :config
44   (setq completion-styles '(orderless basic)
45         completion-category-overrides '((file (styles basic partial-completion)))))
47 ;; follow links to version-controlled files without confirming
48 vc-follow-symlinks t
50 ;; ESS - for working in R
51 (autoload 'R-mode "ess-site.el" "Major mode for editing R source." t)
52 (setq load-path (cons "/usr/share/emacs/site-lisp/ess" load-path))
53 (load "/usr/share/emacs/site-lisp/ess/lisp/ess-site")
54 (setq inferior-julia-program-name "/usr/bin/julia")
56 ;; enable autocomplete
57 (use-package corfu
58   :ensure t
59   ;; Optional customizations
60   :custom
61   (corfu-cycle t)                ;; Enable cycling for `corfu-next/previous'
62   (corfu-auto t)                 ;; Enable auto completion
63   ;; (corfu-separator ?\s)          ;; Orderless field separator
64   ;; (corfu-quit-at-boundary nil)   ;; Never quit at completion boundary
65   ;; (corfu-quit-no-match nil)      ;; Never quit, even if there is no match
66   ;; (corfu-preview-current nil)    ;; Disable current candidate preview
67   ;; (corfu-preselect 'prompt)      ;; Preselect the prompt
68   ;; (corfu-on-exact-match nil)     ;; Configure handling of exact matches
69   ;; (corfu-scroll-margin 5)        ;; Use scroll margin
71   ;; Enable Corfu only for certain modes. See also `global-corfu-modes'.
72   ;; :hook ((prog-mode . corfu-mode)
73   ;;        (shell-mode . corfu-mode)
74   ;;        (eshell-mode . corfu-mode))
76   ;; Recommended: Enable Corfu globally.  This is recommended since Dabbrev can
77   ;; be used globally (M-/).  See also the customization variable
78   ;; `global-corfu-modes' to exclude certain modes.
79   :init
80   (global-corfu-mode)
81   (corfu-history-mode))
83 (use-package cape
84   :ensure t
85   ;; Bind prefix keymap providing all Cape commands under a mnemonic key.
86   ;; Press C-c p ? to for help.
87   :bind ("C-c p" . cape-prefix-map) ;; Alternative keys: M-p, M-+, ...
88   ;; Alternatively bind Cape commands individually.
89   ;; :bind (("C-c p d" . cape-dabbrev)
90   ;;        ("C-c p h" . cape-history)
91   ;;        ("C-c p f" . cape-file)
92   ;;        ...)
93   :init
94   ;; Add to the global default value of `completion-at-point-functions' which is
95   ;; used by `completion-at-point'.  The order of the functions matters, the
96   ;; first function returning a result wins.  Note that the list of buffer-local
97   ;; completion functions takes precedence over the global list.
98   (add-hook 'completion-at-point-functions #'cape-dict) ;; requires words package to be installed on Arch to provide /usr/share/dict/words
99   (add-hook 'completion-at-point-functions #'cape-dabbrev)
100   (add-hook 'completion-at-point-functions #'cape-file) 
101   (add-hook 'completion-at-point-functions #'cape-elisp-block)
102   ;; (add-hook 'completion-at-point-functions #'cape-history)
103   ;; ...
104   )
106 (use-package org
107   :ensure t
108   :bind
109   (("C-c c" . org-capture)
110    ("C-c l" . org-store-link)
111    ("C-c a" . org-agenda))
112   :custom
113   (org-default-notes-file "~/Nextcloud/notes/inbox.org")
114   (org-agenda-files `(,org-default-notes-file "~/Nextcloud/notes/calendar.org"))
115   (org-capture-bookmark nil)
116   ;; Capture templates
117   (org-capture-templates
118    '(("f" "Fleeting note" entry
119       (file+headline org-default-notes-file "Notes")
120       "* %?\nEntered on %U\n  %i\n  %a")
121      ("b" "Tax receipt" item
122       (file "~/Documents/belastingen/FY24-25.org")
123       "* %t %a\n")
124      ("a" "Appointment" entry
125            (file+olp+datetree "~/Nextcloud/notes/calendar.org")
126            "* %?\n :PROPERTIES:\n :location: %^{Location}\n :END:\n%^T--%^T\n\n"
127            :jump-to-captured t
128            :tree-type month
129            :time-prompt t)
130      ("p" "Permanent note" plain
131       (file denote-last-path)
132       #'denote-org-capture
133       :no-save t
134       :immediate-finish nil
135       :kill-buffer t
136       :jump-to-captured t)
137      ("t" "New task" entry
138       (file+headline org-default-notes-file "Tasks")
139       "* TODO %i%?")
140      ("e" "Email follow-up" entry (file+headline org-default-notes-file "Tasks")
141       "* TODO %:fromname: %a %?\nDEADLINE: %(org-insert-time-stamp (org-read-date nil t \"+2d\"))")))
142   ;; Agenda views
143   (org-agenda-custom-commands
144    '(("P" "Expired calendar events" ((tags "TIMESTAMP<=\"<now>\"")))
145      ("n" "Agenda and all TODOs"  ((agenda "") (alltodo "")))))
146   :config
147   ;; Configure refile
148   (defun my/opened-buffer-files ()
149     "Return the list of org files currently opened in emacs"
150     (delq nil
151           (mapcar (lambda (x)
152                     (if (and (buffer-file-name x)
153                              (string-match "\\.org$"
154                                            (buffer-file-name x)))
155                         (buffer-file-name x)))
156                   (buffer-list))))
157   (setq org-refile-targets `((my/opened-buffer-files :maxlevel . 9)
158                              (,(file-expand-wildcards  "~/Nextcloud/notes/*.org") :maxlevel . 1)))
159   (setq org-agenda-skip-scheduled-if-done t)
160   (setq org-agenda-skip-deadline-if-done t)
161   (setq org-agenda-start-on-weekday nil)
162   (setq org-log-done 'time)
163   ;; Automatically flow lines based on window width and use
164   ;; variable width fonts in org-mode.
165   (add-hook 'org-mode-hook 'visual-line-mode)
166   (add-hook 'org-mode-hook 'variable-pitch-mode)
167   ;; org-mode support for R and LaTeX
168   (org-babel-do-load-languages
169    'org-babel-load-languages
170    '((R . t)
171      (latex . t))))
173 (use-package org-caldav
174   :ensure t
175   :config
176   (setq org-caldav-url "https://owncloud.vanrenterghem.biz/remote.php/dav/calendars/frederik")
177   (setq org-caldav-calendar-id "orgmode")
178   ;; Org filename where new entries from calendar stored
179   (setq org-caldav-inbox "~/Nextcloud/notes/calendar.org")
180   ;; Additional Org files to check for calendar events
181   (setq org-caldav-files nil)
182   ;; Usually a good idea to set the timezone manually
183   (setq org-icalendar-timezone "Australia/Perth"))
185 (use-package tex
186   :ensure auctex
187   :config
188   (setq TeX-auto-save t
189         TeX-parse-self t
190         TeX-view-program-selection
191    '(((output-dvi has-no-display-manager)
192       "dvi2tty")
193      ((output-dvi style-pstricks)
194       "dvips and gv")
195      (output-dvi "xdvi")
196      (output-pdf "PDF Tools")
197      (output-html "xdg-open"))))
198 ;; (load "preview-latex.el" nil t t)
201 ;; Automatically switch to various modes
202 (setq auto-mode-alist
203     '(("\\.mdwn\\'" . markdown-mode)
204       ("\\.md\\'" . markdown-mode)
205       ("\\.yarn\\'" . markdown-mode)
206       ("\\.cpp\\'" . c++-mode)
207       ("\\.js\\'" . js-mode)
208       ("\\.json\\'" . js-mode)
209       ("Makefile" . makefile-mode)
210       ("README" . markdown-mode)
211       ("NEWS" . markdown-mode)
212       ("COMMIT_EDITMSG\\'" . text-mode)
213       ("\\.html\\'" . html-mode)
214       ("\\.css\\'" . css-mode)
215       ("\\.yaml\\'" . yaml-mode)
216       ("\\.yml\\'" . yaml-mode)
217       ("\\.ick\\'" . yaml-mode)
218       ("\\.py\\'" . python-mode)
219       ("\\.R\\'" . R-mode)
220       ("\\.org\\'" . org-mode)
221       ("\\.tex\\'" . latex-mode)
222       ("\\.sh\\'" . shell-script-mode)
223       ("\\.hs\\'" . haskell-mode)
224       ("\\.el\\'" . emacs-lisp-mode)))
227 (custom-set-variables
228  ;; custom-set-variables was added by Custom.
229  ;; If you edit it by hand, you could mess it up, so be careful.
230  ;; Your init file should contain only one such instance.
231  ;; If there is more than one, they won't work right.
232  '(browse-url-browser-function 'browse-url-firefox)
233  '(custom-safe-themes
234    '("8d146df8bd640320d5ca94d2913392bc6f763d5bc2bb47bed8e14975017eea91" "9a977ddae55e0e91c09952e96d614ae0be69727ea78ca145beea1aae01ac78d2" "0cf95236abcf59e05b1ea69b4edd53d293a5baec4fe4c3484543fee99bfd2204" "80b00f3bf7cdbdca6c80aadfbbb03145f3d0aacf6bf2a559301e61109954e30a" default))
235  '(org-export-backends '(ascii html icalendar latex md odt))
236  '(package-selected-packages
237    '(devdocs straight calfw calfw-org engrave-faces org-caldav nov eat mu4e ellama emms mpdel-embark libmpdel pass password-store fontaine osm orderless embark-consult embark consult jinx dired-preview ftable flx nerd-icons-dired nerd-icons all-the-icons-dired marginalia vertico denote ox-rss org-ql org-contrib mustache org-static-blog haskell-mode julia-mode elfeed-protocol ack company magit auctex lsp-mode elpy ## org htmlize leuven-theme lua-mode ess-smart-underscore ess-R-data-view ess))
238  '(use-package-compute-statistics t))
239 (custom-set-faces
240  ;; custom-set-faces was added by Custom.
241  ;; If you edit it by hand, you could mess it up, so be careful.
242  ;; Your init file should contain only one such instance.
243  ;; If there is more than one, they won't work right.
244  )
247 ;; Send mail using SMTP via mail.vanrenterghem.io.
248 (setq send-mail-function    'smtpmail-send-it)
249 (setq smtpmail-smtp-server "mail.vanrenterghem.io"
250       smtpmail-smtp-service 587
251       smtpmail-stream-type 'starttls)
252 (setq user-full-name "Frederik Vanrenterghem"
253       smtpmail-local-domain "vanrenterghem.io"
254       user-mail-address (concat "frederik@" smtpmail-local-domain))
255 ;; Ignored in mu4e as it sets user-agent
256 (setq mail-default-headers
257       (concat "X-Mailer: GNU Emacs " (symbol-value 'emacs-version))) 
258 (setq w3m-pop-up-frames t)
260 (global-set-key [remap list-buffers] 'ibuffer)
262 ;;; use pass (~/.password-store)
263 ;;; (see The Unix password store)
264 (use-package pass
265   :ensure t
266   :config
267   (auth-source-pass-enable)
268   (setq pass-username-field "Username"))
270 ;; Elfeed news reader from Nextcloud
271 (use-package elfeed
272   :ensure t
273   :config
274   (setq elfeed-use-curl nil)
275   (elfeed-set-timeout 36000)
276   (define-key elfeed-search-mode-map (kbd "*") (lambda () (interactive) (apply 'elfeed-search-toggle-all '(star))))
277   (define-key elfeed-show-mode-map (kbd "*") (lambda () (interactive) (apply 'elfeed-show-tag '(star))))
278   (add-hook 'elfeed-show-mode 'variable-pitch-mode))
280 (use-package elfeed-protocol
281   :ensure t
282   :after elfeed
283   :config
284   (setq elfeed-protocol-feeds '(
285                                 ("owncloud+https://frederik@owncloud.vanrenterghem.biz" :use-authinfo t)
286         ))
287   (elfeed-protocol-enable))
290 ;; Read and write email using mu4e
291 (use-package mu4e
292   :ensure nil
293   ;; :ensure-system-package mu ;; Install from aur
294   :config
295   (setq mail-user-agent 'mu4e-user-agent)
296   ;; Also use mu4e when called from gnus-dired-attach
297   (setq gnus-dired-mail-mode 'mu4e-user-agent
298         mu4e-get-mail-command "mbsync io"
299         mu4e-update-interval 600
300         mu4e-use-fancy-chars t
301         mu4e-view-show-images t
302         mu4e-sent-folder   "/Sent"
303         mu4e-drafts-folder "/Drafts"
304         mu4e-trash-folder  "/Trash"
305         message-kill-buffer-on-exit t
306         ;;Fixing duplicate UID errors when using mbsync and mu4e
307         mu4e-change-filenames-when-moving t)
308   ;; attach files to mu4e messages by marking the file(s) in dired and pressing C-c RET C-a
309   (add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)
310   ;; Define all bookmarks starting with favourite query used in mailcount modeline
311   (setq mu4e-bookmarks
312         '(( :name "Last 24h's messages"
313           :key ?l
314           :favorite y
315           :query "date:24h..now AND NOT flag:trashed")
316         ( :name "Unread messages"
317           :query "flag:unread AND NOT flag:trashed"
318           :key ?u)
319         ( :name "Today's messages"
320           :query "date:today..now AND NOT flag:trashed"
321           :key ?t)
322         ( :name "Last 7 days"
323           :query "date:7d..now AND NOT flag:trashed"
324           :hide-unread t
325           :key ?w)
326         ( :name "Messages with images"
327           :query "mime:image/* AND NOT flag:trashed"
328           :key ?p)))
329   ;; Create custom spam status header and show in message view
330   (add-to-list 'mu4e-header-info-custom
331                '(:spam-status .
332                               ( :name "Spam-Status"     ;; long name, as seen in the message-view
333                                 :shortname "Spam"      ;; short name, as seen in the headers view
334                                 :help "The Spam status" ;; tooltip
335                                 ;; uses mu4e-fetch-field which is rel. slow, so only appropriate
336                                 ;; for mu4e-view-fields, and _not_ mu4e-headers-fields
337                                 :function (lambda (msg)
338                                             (or (string-join (seq-take (split-string (or (mu4e-fetch-field msg "X-Spam-Status") "") " ") 2) " ") "")))))
339   (add-to-list 'mu4e-view-fields :spam-status)
340   ;; Resize image attachments when sending email
341   (defvar mu4e-resize-image-types '("jpg" "png" "svg" "jpeg")
342     "List of attached image types to resize.")
343   (defvar mu4e-inhibit-resize nil)
344   (defun mu4e-resize-image-attachments ()
345     (unless mu4e-inhibit-resize
346       (let (cmds
347             (image-types
348              (mapconcat #'identity mu4e-resize-image-types "\\|")))
349         (save-excursion
350           (message-goto-body-1)
351           (while (re-search-forward 
352                   (format "<#part.+\\(filename=\"\\)\\(.+\\(\\.%s\\)\\)\""
353                           image-types)
354                   nil t)
355             (let* ((infile (match-string-no-properties 2))
356                    (outfile (concat (temporary-file-directory)
357                                     (file-name-nondirectory infile))))
358               (push (format "magick convert %s -resize 1200x1200\\> %s"
359                             (shell-quote-argument infile)
360                             (shell-quote-argument outfile))
361                     cmds)
362               (replace-match outfile t t nil 2)))
363           (mapcar #'shell-command cmds)))))
364   (add-hook 'message-send-hook 'mu4e-resize-image-attachments)
365   (defun mu4e-inhibit-resize()
366     (interactive)
367     (set (make-local-variable 'mu4e-inhibit-resize) t)))
369 ;; Load configuration for website
370 ;(load "mustache-html")
372 ;; Denote config
373 (use-package denote
374   :ensure t
375   :hook (dired-mode . denote-dired-mode)
376   :bind
377   (("C-c n n" . denote)
378    ("C-c n r" . denote-rename-file)
379    ("C-c n l" . denote-link)
380    ("C-c n b" . denote-backlinks))
381   :config
382   (setq denote-directory "/home/frederik/Nextcloud/notes/")
383   (denote-rename-buffer-mode 1))
385 (use-package nerd-icons
386   ;; :custom
387   ;; The Nerd Font you want to use in GUI
388   ;; "Symbols Nerd Font Mono" is the default and is recommended
389   ;; but you can use any other Nerd Font if you want
390   ;; (nerd-icons-font-family "Symbols Nerd Font Mono")
391   )
393 ;; Dired configuration
394 (with-eval-after-load 'dired
395   (require 'dired-x)
396   ;; Set dired-x global variables here.  For example:
397   ;; (setq dired-x-hands-off-my-keys nil)
398   )
399 (add-hook 'dired-mode-hook
400           (lambda ()
401             ;; Set dired-x buffer-local variables here.
402             (dired-omit-mode 1)
403             (dired-hide-details-mode 1)
404             (nerd-icons-dired-mode 1)
405             ))
406 (setq delete-by-moving-to-trash t)
407 (setq dired-guess-shell-alist-user
408       '(("\\.\\(png\\|jpe?g\\|tiff\\)" "feh" "xdg-open")
409         ("\\.\\(mp[34]\\|m4a\\|ogg\\|flac\\|webm\\|mkv\\)" "mpv" "xdg-open")
410                 (".*" "xdg-open")))
412 ;; Use `vertico' package to get a vertical view of the minibuffer.
413 (use-package vertico
414   :ensure t
415   :config
416   (setq vertico-resize nil)
417   (vertico-mode 1))
419 ;; Persist history over Emacs restarts. Vertico sorts by history position.
420 (use-package savehist
421   :init
422   (savehist-mode))
424 ;; Use `marginalia' package.  This will display useful
425 ;; annotations next to entries in the minibuffer.  For example, when
426 ;; using M-x it will show a brief description of the command as well
427 ;; as the keybinding associated with it (if any).
428 (use-package marginalia
429   :ensure t
430   :config
431   (marginalia-mode 1))
433 ;; Use 'winner' mode to undo and redo windows changes
434 ;; using C-c <left> and C-c <right>.
435 (use-package winner
436   :ensure t
437   :config
438   (winner-mode 1))
440 ;; Use a different spell checker, always
441 (use-package jinx
442   :ensure t
443   :config
444   (keymap-global-set "M-$" #'jinx-correct)
445   :hook (emacs-startup . global-jinx-mode))
448 ;; Bind embark
449 (use-package embark
450   :ensure t
451   :config
452   (keymap-global-set "C-." #'embark-act)
453   (keymap-global-set "C-;" #'embark-dwim))
455 (use-package consult
456   :ensure t
457   :config
458   ;; Change default bindings to consult- ones
459   :bind
460   (;; C-x bindings in `ctl-x-map'
461    ("C-x b" . consult-buffer)                ;; orig. switch-to-buffer
462    ("C-x 4 b" . consult-buffer-other-window) ;; orig. switch-to-buffer-other-window
463    ("C-x r b" . consult-bookmark)            ;; orig. bookmark-jump
464    ;; Other custom bindings
465    ("M-y" . consult-yank-pop)))              ;; orig. yank-pop
467 (use-package consult-mu
468   :ensure nil ;; cloned in
469   :load-path "~/.emacs.d/lisp/consult-mu"
470   :after (consult mu4e)
471   :custom
472   ;;maximum number of results shown in minibuffer
473   (consult-mu-maxnum 200)
474   ;;show preview when pressing any keys
475   (consult-mu-preview-key 'any)
476   ;;do not mark email as read when previewed
477   (consult-mu-mark-previewed-as-read nil)
478   ;;do not amrk email as read when selected. This is a good starting point to ensure you would not miss important emails marked as read by mistake especially when trying this package out. Later you can change this to t.
479   (consult-mu-mark-viewed-as-read nil)
480   ;; open the message in mu4e-view-buffer when selected.
481   (consult-mu-action #'consult-mu--view-action)
482   )
484 ;; Configure `world-clock'
485 (use-package time
486   :ensure nil
487   :config
488   (setq zoneinfo-style-world-list '(("Europe/Brussels" "Leuven")))
489   (add-to-list 'zoneinfo-style-world-list '("Australia/Perth" "Perth")))
492 ;; View PDFs in Emacs
493 (pdf-loader-install) ; On demand loading, leads to faster startup time
494 (setq pdf-misc-print-programm "/usr/bin/lpr")
495   
496 (use-package magit
497   :ensure t)
499 (use-package eat
500   :ensure t
501   :config
502    ;; For `eat-eshell-mode'.
503   (add-hook 'eshell-load-hook #'eat-eshell-mode)
504   (setq eshell-visual-commands '()))
506 ;; Read ePub files
507 (use-package nov
508   :ensure t
509   :init
510   (add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
511   :config
512   (add-hook 'nov-mode-hook #'variable-pitch-mode))
514 ;; Set some preset fonts
515 (use-package fontaine
516   :ensure t
517   :config
518   (setq fontaine-presets
519       '((regular-1
520          :default-family "Iosevka Nerd Font"
521          :default-height 120
522          :variable-pitch-family "Linux Biolinum O"
523          :variable-pitch-weight normal
524          :variable-pitch-height 1.1
525          :italic-family "Iosevka Etoile"
526          :line-spacing 1)
527         (large-1
528          :default-family "Iosevka Nerd Font"
529          :default-height 150
530          :variable-pitch-family "Linux Biolinum O"
531          :variable-pitch-weight normal
532          :variable-pitch-height 1.1
533          :italic-family "Iosevka Etoile"
534          :line-spacing 1)
535         (regular-2
536          :default-family "Fira Mono Nerd Font"
537          :default-height 140
538          :variable-pitch-family "Fira Sans Book"
539          :variable-pitch-weight normal
540          :variable-pitch-height 1.0
541          :line-spacing 1)
542         (large-2
543          :default-family "Fira Mono Nerd Font"
544          :default-height 140
545          :variable-pitch-family "Fira Sans Book"
546          :variable-pitch-weight normal
547          :variable-pitch-height 1.0
548          :line-spacing 1)
549         (ereader-Baskerville
550          :variable-pitch-family "Libre Baskerville"
551          :variable-pitch-weight normal
552          :variable-pitch-height 1.0
553          :line-spacing 1)
554         (ereader-Noto-Serif
555          :variable-pitch-family "Noto Serif"
556          :variable-pitch-weight normal
557          :variable-pitch-height 1.0
558          :line-spacing 1)
559         (ereader-Bembo-Tufte
560          :variable-pitch-family "ETBembo"
561          :variable-pitch-weight normal
562          :variable-pitch-height 1.1
563          :line-spacing 1)
564         (ereader-Literata
565          :variable-pitch-family "Literata"
566          :variable-pitch-weight normal
567          :variable-pitch-height 1.0
568          :line-spacing 1))))
570 (use-package devdocs
571   :ensure t
572   :bind
573   ("C-h D" . devdocs-lookup))
575 ;; Custom functions
577 ;; Might want to run this automatically
578 ;; using variable after-focus-change-function
579 (defun my/adjust-font-size-based-on-display ()
580   "Change size of fonts based on monitor."
581   (interactive)
582   (let* ((display-name (cdr (assq 'name (frame-monitor-attributes))))
583          (font-height (cond ((string-equal display-name "eDP-1") 140) 
584                             (t 120) ;; default
585                             )))
586     (set-face-attribute 'default (selected-frame) :height font-height)))