blob: b03790f05a53771c392df4f5e59fc9761d60a9fa (
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
;;; Keyboard things
(setq default-input-method "cyrillic-yawerty")
(setq default-transient-input-method "cyrillic-yawerty")
(use-package denote
:config
(setq denote-directory "~/Notes/denote/")
(setq denote-journal-extras-directory "~/Notes/journal")
(setq denote-known-keywords
'("emacs"
"linux"
"programming"
"org"
"school"
"language"
"history"
"biology"
))
(denote-rename-buffer-mode 1)
(add-hook 'dired-mode-hook #'denote-dired-mode)
;; journalling with timer
(add-hook 'denote-journal-extras-hook (lambda ()
(tmr "10" "Journalling")
(bard/scroll-center-cursor-mode t)))
:bind
(("C-c n n" . denote-open-or-create)
("C-c n N" . denote)
("C-c R" . denote-region)
("C-c n d" . denote-date)
("C-c n o" . denote-sort-dired)
("C-c n j" . denote-journal-extras-new-entry)
("C-c n r" . denote-rename-file)
("C-c n r" . denote-rename-file-using-front-matter)
("C-c n k" . denote-keywords-add)
("C-c n K" . denote-keywords-remove)
("C-c n i" . denote-link)
("C-c n I" . denote-add-links)
("C-c n b" . denote-backlinks)
("C-c n f" . denote-find-link)
("C-c n F" . denote-find-backlink)))
;;; Focus mode for wrigin
;; Center line scrolling for focused writing
(define-minor-mode bard/scroll-center-cursor-mode
"Toggle centered cursor scrolling behavior."
:init-value nil
:lighter " S="
:global nil
(if bard/scroll-center-cursor-mode
(setq-local scroll-margin (* (frame-height) 2)
scroll-conservatively 0
maximum-scroll-margin 0.5)
(dolist (local '(scroll-preserve-screen-position
scroll-conservatively
maximum-scroll-margin
scroll-margin))
(kill-local-variable `,local))))
(define-key global-map (kbd "C-c L") #'bard/scroll-center-cursor-mode)
(use-package olivetti
:config
(setq olivetti-minimum-body-width 100)
(setq olivetti-recall-visual-line-mode-entry-state t)
:hook
((olivetti-mode-on-hook . (lambda () (olivetti-set-width 100)))
(olivetti-mode-hook . (lambda () (bard/scroll-center-cursor-mode t)))))
;; narrowing and focus mode
(use-package logos
:config
(defun logos-reveal-entry ()
"Reveal Org or Outline entry."
(cond
((and (eq major-mode 'org-mode)
(org-at-heading-p))
(org-show-subtree))
((or (eq major-mode 'outline-mode)
(bound-and-true-p outline-minor-mode))
(outline-show-subtree))))
(setq logos-outlines-are-pages t)
(setq logos-outline-regexp-alist
`((emacs-lisp-mode . "^;;;+ ")
(org-mode . "^\\* +")
(t . ,(or outline-regexp logos--page-delimiter))))
(setq-default logos-hide-cursor nil
;; logos-hide-mode-line t
logos-hide-header-line t
logos-hide-buffer-boundaries t
logos-hide-fringe t
logos-variable-pitch t
logos-olivetti t)
(let ((map global-map))
(define-key map [remap narrow-to-region] #'logos-narrow-dwim)
(define-key map [remap forward-page] #'logos-forward-page-dwim)
(define-key map [remap backward-page] #'logos-backward-page-dwim)
(define-key map (kbd "M-]") #'logos-forward-page-dwim)
(define-key map (kbd "M-[") #'logos-backward-page-dwim)
(define-key map (kbd "<f9>") #'logos-focus-mode))
(defun bard/logos--recenter-top ()
"Use `recenter' to reposition the view at the top."
(unless (derived-mode-p 'prog-mode)
(recenter 1))) ; Use 0 for the absolute top
(add-hook 'logos-page-motion-hook #'bard/logos--recenter-top))
(provide 'bard-emacs-writing)
|