Emacsãæ¥µéãŸã§å©ãäžã, ãªã«ããã匷éãªåã«ãã. äžã€ã®ããšã極ãã.
å¯é¡ã®ããŒãã©ã³ã°(Nothung)ãšã¯åè ãžãŒã¯ããªãŒãã®æã€äŒèª¬ã®å£ã§ãã.
packageã®äžŠã³é 㯠Doom Emacs ã® Molule Index (ã¢ã«ãã¡ãããé )ã«åŸã.
ref: https://github.com/tsu-nera/nothung
ãã€ãå¿ããDoom Emacs Configurationèšæ³ã¯ ãã.
- use-package! ã¯:defer, :hook, :commands, or :after ãçç¥ããããšèµ·åæã« loadããã.
- after! 㯠package ã load ããããšãã«è©äŸ¡ããã.
- add-hook! 㯠mode æå¹åã®ãšã. setq-hook!㯠equivalent.
ã©ãã䜿ããã®æ£è§£ã¯ãªãããã¹ãŠ use-package!ã ãšèµ·åãé ããªãã®ã§å Žåã«ãã£ãŠã«ã¹ã¿ãã€ãºããïŒãšã®ããš.
ref. éå»ã®èšå®ã¯ãã¡ã.
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
(load-file "~/.doom.d/private/config.el")
;; èªäœé¢æ°
(load-file "~/.doom.d/utils.el")App
eww
Emacsã®ããã¹ããã©ãŠã¶(Manual)
notes:
- ewwãèµ·åããã ãã ãšminibufferãªã®ã§C-gã§æ¶ããŠããŸãã®ã§å€§ããC-x 1ãšãã§å€§ãããã.
- C-u M-x ewwã§ã²ãšã€ã®bufferã䜿ããŸããã®ã§ã¯ãªãå¥ã®Bufferã§ewwãéã.
- M-RETã§URLãæ°ããBufferã§éã.
- Doom Emacsã ãšC-c s o(online)ã§ãããããšæ€çŽ¢ã§ãã(w/Chrome). helm-google-suggestçãª.
(use-package! eww
:bind
("C-c s w" . eww-search-words)
("C-c o w" . eww-open-in-new-buffer))- ace-linkãã€ãããšewwã®linkãã€ã³ã¿ã©ã¯ãã£ãã«éžæã§ããŠäŸ¿å©.
(use-package! ace-link
:config
(eval-after-load 'eww '(define-key eww-mode-map "f" 'ace-link-eww))
(ace-link-setup-default)
(define-key org-mode-map (kbd "M-o") 'ace-link-org))ããšã§èªããµãŒãã¹.
(global-set-key (kbd "C-x w p") 'pocket-reader)
(use-package! pocket-reader
:bind
("C-x w l" . pocker-reader-add-link)
:config
(setq pocket-reader-open-url-default-function #'eww)
(setq pocket-reader-pop-to-url-default-function #'eww))RSS(Elfeed)
;; elfeed
(global-set-key (kbd "C-x w w") 'elfeed)
(use-package! elfeed
:config
(setq elfeed-feeds
'(
("https://yuchrszk.blogspot.com/feeds/posts/default" blog) ; ãã¬ãªãªç·
("https://www.youtube.com/feeds/videos.xml?channel_id=UCFo4kqllbcQ4nV83WCyraiw" youtube) ; äžç°æŠåœŠ
("https://www.youtube.com/feeds/videos.xml?channel_id=UCFdBehO71GQaIom4WfVeGSw" youtube) ;ã¡ã³ã¿ãªã¹ãDaiGo
("https://www.youtube.com/feeds/videos.xml?playlist_id=PL3N_SB4Wr_S2cGYuI02bdb4UN9XTZRNDu" youtube) ; äžæ²¢ã®æµå
("http://www.aaronsw.com/2002/feeds/pgessays.rss" blog) ; Paul Graham
))
(setq-default elfeed-search-filter "@1-week-ago +unread ")
(defun elfeed-search-format-date (date)
(format-time-string "%Y-%m-%d %H:%M" (seconds-to-time date)))
)Habitica
(use-package! habitica
:commands habitica-tasks
:init
(bind-key "C-x t g" 'habitica-tasks)
:config
(setq habitica-show-streak t)
(setq habitica-turn-on-highlighting nil))ããã¡ã³ããããŠãªã.
;; App
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; twittering-mode
;; ãã®èšå®ããªããšèªèšŒã倱æãã.
;; twittering-oauth-get-access-token: Failed to retrieve a request token
(use-package! twittering-mode
:init
(setq twittering-allow-insecure-server-cert t))Tidalcycles
鳿¥œ
https://tidalcycles.org/docs/getting-started/editor/Emacs
(use-package! tidal
;; :init
;; (setq tidal-boot-script-path "~/.cabal/share/x86_64-osx-ghc-8.8.4/tidal-1.7.4/BootTidal.hs")
)Checkers
;; Checkers
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Completion
company-mode
;; Completion
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; org-roam ã® completion-at-point ãåäœããªãã®ã¯ããã€ããª...
;; (add-hook! 'org-mode-hook (company-mode -1))
;; company ã¯ãªã«ãã«äœ¿ãããã ãããªïŒTAB ã§ã®ã¿è£å®çºåãããã.
(setq company-idle-delay nil)
(global-set-key (kbd "TAB") #'company-indent-or-complete-common)avy/swiper
æ€çŽ¢åŒ·å.
(use-package! avy
:bind
("C-x ," . avy-goto-char) ;; doom ã® keybind äžæžã.
("C-c g l" . avy-goto-line) ;; doom ã® keybind äžæžã.
("C-c s c". avy-goto-word-1))
(global-set-key (kbd "C-c g L") 'consult-goto-line)
;; ããŸãåããªãã®ã§å°å° doom ãšã®çžæ§ãæªãã®ãã.
;; ã²ãšãŸã migemo ããããšã㯠isearch ã§å¯Ÿå¿.
;; (use-package! avy-migemo
;; :after migemo
;; :bind
;; ("M-g m m" . avy-migemo-mode)
;; ("M-g c" . avy-migemo-goto-char-timer) ;; doom ã® keybind äžæžã.
;; :config
;; (avy-migemo-mode 1)
;; (setq avy-timeout-seconds nil))
;; Vertico䜿çšã®ããswiperãšivyã¯ç¡å¹å
;; (use-package! swiper
;; :config
;; (ivy-mode 1))
;; avy-migemo-e.g.swiper ã ããã¯ã
;; https://github.com/abo-abo/swiper/issues/2249
;;(after! avy-migemo
;; (require 'avy-migemo-e.g.swiper))affe
fuzzy find. ãããŸãæ€çŽ¢ for consult.
(use-package! affe
:after consult
:config
(defun affe-orderless-regexp-compiler (input _type)
(setq input (orderless-pattern-compiler input))
(cons input (lambda (str) (orderless--highlight input str))))
(setq affe-regexp-compiler #'affe-orderless-regexp-compiler))all-the-icons-completion
https://github.com/iyefrat/all-the-icons-completion
(use-package! all-the-icons-completion
:init
(all-the-icons-completion-mode))
(add-hook! marginalia-mode-hook #'all-the-icons-completion-marginalia-setup)Copilot.el
https://github.com/copilot-emacs/copilot.el
Strongly recommend to enable childframe option in company module ((company +childframe)) to prevent overlay conflict.
;; accept completion from copilot and fallback to company
(use-package! copilot
:hook (prog-mode . copilot-mode)
:bind (:map copilot-completion-map
("<tab>" . 'copilot-accept-completion)
("TAB" . 'copilot-accept-completion)
("C-TAB" . 'copilot-accept-completion-by-word)
("C-<tab>" . 'copilot-accept-completion-by-word)))Config
;; Config
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; doom specific config
;; (setq user-full-name "John Doe"
;; user-mail-address "john@doe.com")
(setq confirm-kill-emacs nil) ; çµäºæã®ç¢ºèªã¯ããªã.
;; ãã«ã¹ã¯ãªãŒã³ã§ Emacs èµ·å
;; ãã©ãŠã¶ãšäžŠã¹ãŠè¡šç€ºããããšãå€ããªã£ãã®ã§ãã£ãããã¹ã¯
;; (add-to-list 'initial-frame-alist '(fullscreen . maximized))
;; This is to use pdf-tools instead of doc-viewer
(use-package! pdf-tools
:config
(pdf-tools-install)
;; This means that pdfs are fitted to width by default when you open them
(setq-default pdf-view-display-size 'fit-width)
:custom
(pdf-annot-activate-created-annotations t "automatically annotate highlights"))
;; projectileã®æ€çŽ¢ã¹ããŒããäžãã
(setq projectile-indexing-method 'alien)
;; custom-fileã®èšå®
(setq custom-file (expand-file-name "custom.el" doom-user-dir))
(when (file-exists-p custom-file)
(load custom-file))Editor
;; Editor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; è±æ°åãšæ¥æ¬èªã®éã«ã¹ããŒã¹ãããã.
;;(use-package! pangu-spacing
;; :config
;; (global-pangu-spacing-mode 1)
;; ä¿åæã«èªåçã«ã¹ããŒã¹ãå
¥ããã®ãææ¢.ãããŸã§å
¥åæã«ããŠãã.
;; (setq pangu-spacing-real-insert-separtor nil))
;; èšå·ã®ååŸã«ã¹ããŒã¹ãå
¥ãã.
(use-package! electric-operator)
(add-hook! 'org-mode-hook #'electric-operator-mode)cua-mode
(cua-mode t)
(setq cua-enable-cua-keys nil)æ¹è¡(newline)ãšæãè¿ã(wrap)
ãŸãæ¹è¡(newline)ãšæãè¿ã(wrap)ã®ïŒã€ã®æŠå¿µãããããšã«æ³šæ.
æ¹éãšããŠèªåæ¹è¡ã¯ç¡å¹, èªåæãè¿ãã¯èš±ã.
auto-fill-modeã§èªåæ¹è¡ããã. ããã¯ç¡å¹ã«ãã.
远èš: æ¹é倿Ž. ã³ãŒãã§ã¯auto-fillãèš±ã. ãããŠåã«(auto-fill-mode -1)ããšããã§modeã®hookã«ãã£ãŠå床æå¹ã«ãªãæ°ããã.
;; (auto-fill-mode -1)åé¡ã¯MarkdownãOrg-modeã§autl-fillãçºåããŠæ¹è¡ããããšãã. org-modeã§å床hookãèµ°ãæå¹ã«ãªãæ°ãããã®ã§ã³ã¬ã§æ¯ãæ¢ãã.
->æ¯ãæ¢ãŸããªãã®ã§è«Šãã. ãããç¡å¹ã«ããŠãorg-mode-hookã®å»¶é·ã§auto-fill-modeãonã«ããŠããŸã人ããã. ãããŠãã®ç¯äººã誰ãïŒæé远æ±ããŠãçµå±ããããªã. Doom Emacsã®èšå®ã®ä»æ¥ã¯ãã.
(auto-fill-mode -1)
(remove-hook 'org-mode-hook #'auto-fill-mode)
;; (remove-hook 'org-mode-hook #'turn-on-auto-fill)
;; (remove-hook 'text-mode-hook #'auto-fill-mode)
;; (remove-hook 'text-mode-hook #'turn-on-auto-fill)
;; (add-hook 'org-mode-hook #'turn-off-auto-fill)
;; (add-hook 'text-mode-hook #'turn-off-auto-fill)
;; (add-hook 'org-roam-mode-hook #'turn-off-auto-fill)ããã«ãã£ãŠæãè¿ãã®éçã80ãã99999ã«ããããšã«ããŠåé¿ãã.
(setq-default fill-column 99999)
(setq fill-column 99999)ããã«ããæãè¿ãã§ / ã $ èšå·ã衚瀺ããã. 以äžã®èšå®ã§æ¶ã.
;; / ãåé€
(set-display-table-slot standard-display-table 'wrap ?\ )
;; $ ãåé€
(set-display-table-slot standard-display-table 0 ?\ )ããã«æãè¿ãã®æ¬¡ã®ã©ã€ã³ã«ã€ã³ãã³ããæ¿å ¥ããã. ããã¯electric-indent-modeã®ä»æ¥. çŸåšorg-modeã®ã¿ã§ç¡å¹äž.
æãè¿ãoff/onã¯, M-x toggle-truncate-linesã§åãæ¿ããããšãã§ãã.
visual-line-mode
åèªåäœã§ã®æãè¿ããããEmacsæšæºå®è£ ã®ã¢ãŒã.
Emacsã¯ãŠã£ã³ããŠã®å³ç«¯ã®è¿ãã®åèªã®å¢çã§æãè¿ããã詊ã¿ã. ããã¯åèªã®éäžã§æãè¿ããªãããšã«ããå¯èªæ§ãé«ãããã.
https://ayatakesi.github.io/emacs/25.1/Visual-Line-Mode.html
ãã®èšå®ã¯ã¹ã¯ãªãŒã³ã®å¹ ã«ãã£ãŠå€å®ãããããããšãã°æåå80ã§æãè¿ããšãã§ã¯ãªã.
æ¥æ¬èªãšè±èªãå ¥ã亀ãããšãã®è§£éãå€ãªã®ã§ä»¥äžãèšå®ãã.
(setq word-wrap-by-category t)ref: Word-wrap problem with Chinese or Japanese characters : emacs
visual-fill-column
Doomã ãšãããªãããã ãã©.
;; (add-hook! visual-line-mode 'visual-fill-column-mode)-> perfect-marginãšã®çžæ§ãæªãæ°ãããã®ã§ãã£ããç¡å¹.
perfect-margin
ããæãã«marginããšã£ãŠããã (https://github.com/mpwang/perfect-margin)
(use-package! perfect-margin
:config
(perfect-margin-mode t)
;; disable special window
(setq perfect-margin-ignore-regexps '("*vterm*"))
(setq perfect-margin-ignore-filters nil) ;; disable minibuffer
)ã¿ãŒããã«ã®çžŠåå²ç·ãUTF-8ã§ãããã«æã
ref: How do I make the vertical window divider more pretty? : emacs
(unless (display-graphic-p)
;; ã¿ãŒããã«ã®çžŠåå²ç·ãUTF-8ã§ãããã«æã
(defun my-change-window-divider ()
(interactive)
(let ((display-table (or buffer-display-table
standard-display-table
(make-display-table))))
(set-display-table-slot display-table 5 ?â)
(set-window-display-table (selected-window) display-table)))
(add-hook 'window-configuration-change-hook 'my-change-window-divider))whitespace
äœåãªç©ºçœ/ã¿ãã«è²ã¥ã.
(use-package! whitespace
:config
;; limit lie length -> display-fill-column-indicator-modeã䜿ããããã¹ã¯.
;; (setq whitespace-line-column 80)
(setq whitespace-style '(face
;;lines-tail
))
;; å
šè§ã¹ããŒã¹ãå¯èŠå
(setq whitespace-space-regexp "$\u3000+$")
(global-whitespace-mode 1))display-fill-column-indicator-mode
Emacsã®ç»é¢ã«1è¡80æåã®ãšããã«ç·ãèãåŒã.
ããã°ã©ãã³ã°ã®äžçã§ã¯æãã80 columns ruleããã, Emacsã§80æåç®ã衚瀺ããæ©èœããããããã£ããã®ã®, Emacs 27.0.90ããdefaultæ©èœãšããŠæäŸãããããã«ãªã£ã.
(æã80(charã¯æã®è©±ã§, æè¿ã®ãã£ã¹ãã¬ã€ã®å€§ããã ãš100charããããšããè°è«ããã).
ä»ã€ãã£ãŠããã¢ãã¿ã§çžŠã«ïŒåå²ãããš74ãã¡ããã©ããããšãããã£ã. (å é ã«è¡çªå·è¡šç€º4char+1charã®marginãã).
(setq-default display-fill-column-indicator-column 78)
(global-display-fill-column-indicator-mode)iedit
è€æ°åæç·šé.
ãªãDoom Emacsã ãš +company/completeãšC-;ã®keybindç«¶å.
(use-package! iedit
:bind
("C-;" . iedit-mode))bm
çŸåšè¡ã®ããã¯ããŒã¯ã©ã€ãã©ãª.
GitHub - joodland/bm: bm.el â Visual Bookmarks for GNU Emacs
ãããå¥çšéãšããçŸåšè¡ããã€ã©ã€ãããŠãã°è§£æãšãã§ã€ãã.
(use-package! bm
:bind (("<f5>" . bm-toggle))
:config
(setq temporary-bookmark-p t)
(setq bm-face '((t (:background "steel blue" :foreground "#272822")))))
;;(setq bm-face '((t (:background "#525252" :foreground ""))))
;; ("<C-f5>" . bm-next)
;; ("<S-f5>" . bm-previous))atomic-chrome
(use-package! atomic-chrome
;; auto generated by gpt4
;; :init
;; (setq atomic-chrome-default-major-mode 'markdown-mode
;; atomic-chrome-buffer-open-style 'frame
;; atomic-chrome-url-major-mode-alist
;; '(("github\\.com" . gfm-mode)
;; ("redmine\\." . textile-mode)))
:config
(setq atomic-chrome-buffer-open-style 'full)
(atomic-chrome-start-server))Emacs
;; Emacs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Emacs29
(pixel-scroll-precision-mode)
;; doomã ãšhelpãå²ãåœãŠãããŠãããdoomã®helpã¯F1ãã€ãã.
(global-set-key (kbd "C-h") 'backward-delete-char)
(global-set-key (kbd "C-c h r") 'doom/reload)
;; Emacsèµ·åæã«ãã¡ãã¡è³ªåãããã®ã¯ããã.
;; default tã§ã¯ãªããç¡èŠã§ããªãã®ã§:allãèšå®ããŠãã.
(setq enable-local-variables :all)
;;; å³ããå·Šã«èªãèšèªã«å¯Ÿå¿ãããªãããšã§æç»é«éå
(setq-default bidi-display-reordering nil)recentf
ãã£ããrecentfã§ãã³ã°ããããšãå€ãã®ã§å°ãªããã.
;; recentfã«ä¿åããæ°.
(setq recentf-max-saved-items 300)Emacs ã¬ãŒããžã³ã¬ã¯ã·ã§ã³
ã¬ãŒããžã³ã¬ã¯ã·ã§ã³ã§Emacsã®ã€ããã¡ã¢ãªãæé©åãã.
ã¬ãŒããžã³ã¬ã¯ã·ã§ã³ãèµ°ãééãå€ããã°éäžã§éããªãã, äœã¹ããã¯PCã ãšã¬ãŒããžã³ã¬ã¯ã·ã§ã³ãããŸãã«èµ°ãããããšã§å šäœçã«è»œãããããšã. èŠèª¿æŽ.
;; GCãæžãããŠè»œããã.
;; (setq gc-cons-threshold (* gc-cons-threshold 10))
;; GCã®äžééŸå€ããããŠäžãã(äœã¹ããã¯PC)
;; (setq gc-cons-threshold (/ gc-cons-threshold 10))
;; ã©ããDoom ã ãšããã©ã«ãã§å€§ããªå€ãèšå®ãããŠããæš¡æ§ãªã®ã§æ»ã.
;; (setq gc-cons-percentage 0.1)
;; (setq gc-cons-threshold 800000)
;; GCå®è¡ã®ã¡ãã»ãŒãžãåºã
(setq garbage-collection-messages nil)ace-window
3ã€ä»¥äžã®windowã®éžæãçªå·ã§ã§ãã. defaultã§C-x oãäžæžãããŠã? C-u C-x o ã ãšwindowãswapã§ãã(ace-swap-window).
undo-tree
ããžã¥ã¢ã©ã€ãºãããundoãæäŸ.
C-x uã§visualizerã®ãããã¡ãéã. qã§çµäº.
Helpful
Emacsã®*Help Bufferã匷åãã.
https://github.com/Wilfred/helpful
(use-package! helpful
:config
(global-set-key (kbd "C-c C-d") #'helpful-at-point));; Email
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Input
;; Input
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)
(set-default 'buffer-filecoding-system 'utf-8)
;; migemo
(use-package! migemo
:config
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs" "-i" "\a"))
(setq migemo-dictionary "/usr/share/migemo/utf-8/migemo-dict")
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-coding-system 'utf-8-unix)
(migemo-init))fcitx
aggressive-setupã§ã®minibuffer ã§ã®fcitxèªådisableã¯ãã. çžæ§ãæªãã®ã, ãã°ãã°æ¥æ¬èªå ¥åãšminibufferã§Emacsããã³ã°ããã®ã§.
(use-package! fcitx
:config
(setq fcitx-remote-command "fcitx5-remote")
(fcitx-aggressive-setup)
;; Linux ãªã t ãæšå¥šããããã®ã®ãfcitx5 ã«ã¯æªå¯Ÿå¿ãªãããã㯠nil
(setq fcitx-use-dbus nil))artist mode
Emacsäžã§ã«ãŒãœã«ãããŠã¹ã䜿ã£ãŠç·ãæžãã.
- M-x artist-modeã§èµ·å.
- C-c C-c ã§çµäº.
- defaultã§ã¯ . ãæå, Shiftã§ - ã«ãªã.
æãªãã¡ãã£ãŠelispãæžãããã©, ãªãã defaultã§ãã£ãã®ã.
ref: ç§äžžã®ãããªçœ«ç·ãã¯ããªãããªãšæã£ãŠelispäœæãã | Futurismo
Lang
ç·šéè£å©ã®äžã§ãç¹ã«ã³ãŒãã£ã³ã°æ¯æŽããŸãšãã.
Generals
èšèªã«äŸåããªãã³ãŒãã£ã³ã°æ¯æŽããŒã«.
smartparens
https://github.com/Fuco1/smartparens
Emacsã§ã«ãã³ã®å¯Ÿå¿ãåãã€ã€ç·šéãããminor-mode. pareditãæ°ããrewriteãã.
refs:
doom emacsã®smartparenså®çŸ©. +bindings +smartparensã§æå¹.
;;; smartparens
(:after smartparens
:map smartparens-mode-map
"C-M-a" #'sp-beginning-of-sexp
"C-M-e" #'sp-end-of-sexp
"C-M-f" #'sp-forward-sexp
"C-M-b" #'sp-backward-sexp
"C-M-n" #'sp-next-sexp
"C-M-p" #'sp-previous-sexp
"C-M-u" #'sp-up-sexp
"C-M-d" #'sp-down-sexp
"C-M-k" #'sp-kill-sexp
"C-M-t" #'sp-transpose-sexp
"C-M-<backspace>" #'sp-splice-sexp)è¶³ããªãã®ã¯èªåã§å®çŸ©ããå¿ èŠãã. ãšãããããããåå®çŸ©ãããâŠ
(use-package! smartparens-config
:bind
("C-<right>" . sp-forward-slurp-sexp)
("M-<right>" . sp-forward-barf-sexp)
("C-<left>" . sp-backward-slurp-sexp)
("M-<left>" . sp-backward-barf-sexp)
("C-M-w" . sp-copy-sexp)
("M-[" . sp-backward-unwrap-sexp)
("M-]" . sp-unwrap-sexp)
:config
;; copilot.elãããããçžæ§ãæªããªã£ã..
;; (add-hook! 'clojure-mode-hook 'smartparens-strict-mode)
(setq smartparens-strict-mode nil))
symbol-overlay
ã·ã³ãã«ã®ãã€ã©ã€ããããŒå ¥åã§å¶åŸ¡ã§ãã.
https://github.com/wolray/symbol-overlay/
䜿ã£ãŠãªãã companyãškeybindããã¶ã£ãã®ã§ãã£ããå°å°.
(use-package! symbol-overlay
:config
(global-set-key (kbd "M-i") 'symbol-overlay-put)
(global-set-key (kbd "M-n") 'symbol-overlay-switch-forward)
(global-set-key (kbd "M-p") 'symbol-overlay-switch-backward)
(global-set-key (kbd "<f7>") 'symbol-overlay-mode)
(global-set-key (kbd "<f8>") 'symbol-overlay-remove-all))codic
ãã倿°åãæããŠãããwebãµãŒãã¹codicã¯ã©ã€ã¢ã³ã.
codic - ããã°ã©ããŒã®ããã®ããŒãã³ã°èŸæž
- M-x codic: è±èª => æ¥æ¬èª
- M-x codic-translate => æ¥æ¬èª => è±èª(èŠtoken)
codic-translateã䜿ãã«ã¯tokenã codic-api-tokenã«èšå®ããå¿ èŠããã. çŸç¶ã¯âprivate/config.elâã«æžããŠèªã¿èŸŒãã§ãã.
(use-package! codic)Clojure
ref: doom-emacs/README.org - GitHub
ãšããããïŒdoomã®clojureã¢ãžã¥ãŒã«æå¹.
- cider
- clj-refactor
- flycheck-clj-kondo
ãã®ä»ïŒ
- rainbow-delimiters, smartparensã¯doomã®coreããã±ãŒãžãšããŠãã§ã«ã¯ãã£ãŠãã.
- pereditã¯ciderã®äžã«å ¥ã£ãŠãã.
;; ããããindent mode
(add-hook! 'clojure-mode-hook 'aggressive-indent-mode)
;; èªåã§alignæŽåœ¢.
(setq clojure-align-forms-automatically t)
(use-package! cider
:bind
;; desing journalçšã«binding远å
("C-c C-v C-p" . cider-pprint-eval-defun-to-comment)
("C-c C-v M-p" . cider-pprint-eval-last-sexp-to-comment)
:config
;; connectãšãšãã«REPL bufferã衚瀺.
(setq cider-repl-pop-to-buffer-on-connect t)
;; replã« åºåããããŠEmacsããã³ã°ããã®ãé²ã.
;; åºæ¬çã«REPLãžã®printã¯éå¹çãªã®ã§ cider inspectæšå¥š.
;; https://github.com/practicalli/spacemacs.d/issues/4
(setq cider-repl-buffer-size-limit 50)
;; companyã§ã®ãããŸãè£å®.
(add-hook 'cider-repl-mode-hook #'cider-company-enable-fuzzy-completion)
(add-hook 'cider-mode-hook #'cider-company-enable-fuzzy-completion)
;; ããŸãããããªããª..
(setq cider-special-mode-truncate-lines nil)
;; (add-hook 'cider-stacktrace-mode-hook (lambda () (setq truncate-lines nil)))
;; (add-hook 'cider-inspector-mode-hook (lambda () (setq truncate-lines nil)))
;; stack-frame衚瀺ããããžã§ã¯ãã«éå®
(setq cider-stacktrace-default-filters '(project))
;; cider-connectã§åºå®portãéžæåè£ã«è¡šç€º.
;; åºå®portèªäœã¯ tools.depsããã®nreplèµ·åæoptionã§æå®.
(setq cider-known-endpoints '(("kotori" "0.0.0.0" "34331")))
)clj-refactor
Emacs CIDERã§Clojureãæžãããã®äŸ¿å©ãªãã¡ã¯ã¿ããŒã«æäŸ.
https://github.com/clojure-emacs/clj-refactor.el
(add-hook! clojure-mode
(clj-refactor-mode 1)
(yas-minor-mode 1) ; for adding require/use/import statements
;; This choice of keybinding leaves cider-macroexpand-1 unbound
(cljr-add-keybindings-with-prefix "C-c C-m")
;; cljr-rename-symbolã§ã®ããã³ããææ¢.
;; ã©ããååå®è¡ãé
ãïŒåç®ããã¯åé¡ãªã.
(setq cljr-warn-on-eval nil)
)- cljr-clean-ns
- namespaceãæŽç, cljr-project-cleanã§ãããžã§ã¯ãå šäœã«é©çš.
- cljr-rename-symbol
- ã·ã³ãã«(颿°åã倿°åå«ã).
- ã©ããé ãã®ãŠLSPã®ã»ããããã¯ããã®ãã.
cljstyle: formatter for Clojure
ref: GitHub
Doom Emascã® editor/format moduleãšé£æºå¯èœ. Clojureã ãšdefaultã node-cljfmtãªã®ã§cljstyleã䜿ãã«ã¯èšå®ãå¿ èŠ.
(add-hook! clojure-mode
(set-formatter! 'cljstyle "cljstyle pipe" :modes '(clojure-mode))
(add-hook 'before-save-hook 'format-all-buffer t t))clj-kondo: linter for Clojure
ref: GitHub
portal
Data Visualization for Clojure.
ref. https://github.com/djblue/portal
(defun portal.api/open ()
(interactive)
(cider-nrepl-sync-request:eval
"(require 'portal.api) (portal.api/tap) (portal.api/open)"))
(defun portal.api/clear ()
(interactive)
(cider-nrepl-sync-request:eval "(portal.api/clear)"))
(defun portal.api/close ()
(interactive)
(cider-nrepl-sync-request:eval "(portal.api/close)"))vega-view
(use-package! vega-view
:config
(define-key clojure-mode-map (kbd "C-c M-n v") 'vega-view))clerk
https://github.com/nextjournal/clerk
(defun clerk-show ()
(interactive)
(when-let
((filename
(buffer-file-name)))
(save-buffer)
(cider-interactive-eval
(concat "(nextjournal.clerk/show! \"" filename "\")"))))
(define-key clojure-mode-map (kbd "<M-return>") 'clerk-show)Rust
(setq exec-path (append exec-path '("~/.cargo/bin")))rest
(use-package! restclient
:mode (("\\.rest\\'" . restclient-mode)
("\\.restclient\\'" . restclient-mode)))
(use-package! ob-restclient
:after org restclient
:init
(org-babel-do-load-languages
'org-babel-load-languages
'((restclient . t))))mermaid-mode
https://github.com/abrochard/mermaid-mode
(use-package! mermaid-mode)mermaid-open-browser(C-c C-o)ã§mermaid-jsã®ãµã€ãã«é£ãã§è¡šç€ºã§ãã.
https://mermaid-js.github.io/mermaid-live-editor
ããŒã«ã«ã§è¡šãçæããã«ã¯mermaid-cliã®ã€ã³ã¹ããŒã«ãå¥éå¿ èŠ.
Os
;; OS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EXWM
Emacsã®Window Manager.
ãã¯ããããã€ãããšäžçãEmacsã«ãªãEmacs åŒããããçæŽ»ã宿ãã.
counsel-linux-appã ãšèµ·åæã«ãã³ã°ããŠPCåèµ·åã«ãªãããšãå€ã. Shift+Alt+&ã«ããã¢ããªã±ãŒã·ã§ã³èµ·åããããã.
(use-package! exwm
:if (not (wsl-p))
:after counsel
:init
(setq counsel-linux-app-format-function
#'counsel-linux-app-format-function-name-only)
(map!
:leader
:prefix ("z" . "exwm")
"c" #'exwm-reset
"o" (lambda (command)
(interactive (list (read-shell-command "$ ")))
(start-process-shell-command command nil command))
"z" #'exwm-workspace-switch
"m" #'exwm-workspace-move-window
"a" #'counsel-linux-app
"s" #'counsel-search ;; open chrome and search
)
(add-hook 'exwm-input--input-mode-change-hook
'force-mode-line-update)
(add-hook 'exwm-update-class-hook
(lambda ()
(exwm-workspace-rename-buffer exwm-class-name)))
;; ã©ããChromeãç«ã¡äžãããšãã³ã°ããã®ã§ç¡å¹ã«ããŠãã.
(winner-mode -1)
:config
(require 'exwm-randr)
(setq exwm-randr-workspace-output-plist '(0 "HDMI-1"))
(add-hook
'exwm-randr-screen-change-hook
(lambda ()
(start-process-shell-command
"xrandr" nil "xrandr --output HDMI-1 --primary --right-of eDP-1 --auto")))
(exwm-randr-enable)
(require 'exwm-systemtray)
(exwm-systemtray-enable)
;; edit-serverçãª. C-c 'ã§ç·šéã§ããã®ã§ããbetter
;; äžåºŠå
¥åãããã®ãå床éããšæååããã.
(require 'exwm-edit)
(setq exwm-edit-split t)
(setf epg-pinentry-mode 'loopback)
(defun pinentry-emacs (desc prompt ok error)
(let ((str (read-passwd
(concat (replace-regexp-in-string
"%22" "\""
(replace-regexp-in-string
"%0A" "\n" desc)) prompt ": "))))
str))
;; from https://github.com/ch11ng/exwm/wiki/Configuration-Example
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(fringe-mode 1)
;; google-chromeãèµ·åãããšmouse on menu-barãpopupããŠãã³ã°ãã察ç
;; https://stackoverflow.com/questions/17280845/emacs-disable-pop-up-menus-on-mouse-clicks
(fset 'menu-bar-open nil)
(fset 'x-menu-bar-open nil)
;; Turn on `display-time-mode' if you don't use an external bar.
(setq display-time-default-load-average nil)
(display-time-mode t)
(display-battery-mode 1)
(setq exwm-workspace-number 2)
(setq exwm-input-simulation-keys
'(([?\C-b] . [left])
;; ChromeããŒãžå
æ€çŽ¢ã®ããã«ç©ºãã
;; ([?\C-f] . [right])
;; 2022.03.23 ãã£ã±ãè§£é€. ã©ããC-fãã¹ã ãŒãºãªæäœãé»å®³ãã.
;; ããŒãžå
æ€çŽ¢ã¯SurfingkeysãšããExtensionãå©çš(/).
([?\C-f] . [right])
([?\C-p] . [up])
([?\C-n] . [down])
([?\C-a] . [home])
([?\C-e] . [end])
([?\M-v] . [prior])
([?\C-v] . [next])
([?\C-d] . [delete])
([?\C-m] . [return])
([?\C-h] . [backspace])
([?\C-k] . [S-end delete])))
(exwm-enable))Org-mode
ãåç¥ïŒ
- dotfiles/50_org-mode.org at master · tsu-nera/dotfiles · GitHub
- æã®èšå®. ããããã€ç§»æ€ããã.
ãã¡ã€ã«ãã¹
ãã¡ã€ã«ãã¹é¢é£ã®å®çŸ©ã¯ãŸãšããŠããã§å®æœ.
(after! org
(setq org-directory (file-truename "~/repo/gtd"))
(defconst my/gtd-projects-file (concat org-directory "/home.org"))
(defconst my/inbox-file
(concat org-directory "/inbox/inbox.org"))
(defconst my/daily-journal-dir
(concat org-directory "/journals/daily"))
(defconst my/weekly-journal-dir
(concat org-directory "/journals/weekly"))
(defconst my/project-journal-bakuchi
(file-truename "~/repo/bakuchi-doc/notes/journal.org"))
(defconst my/project-journal-deepwork
(file-truename "~/repo/keido/notes/zk/journal_deepwork.org"))
;; org-captureã®targetã¯è©³ããããããèšå®ããã®ã§defaultã¯äžèŠ.
;; (setq org-default-notes-file "gtd/gtd_projects.org")
;; äœã§ãããã§ã agenda ãããšæãã®ã§å³éž.
;; org-journalã®æ©èœã§ãã®ã»ãã«ä»æ¥ã®journal fileã远å ããã.
(setq org-agenda-files
(list
;; my/project-journal-bakuchi
;; my/project-journal-deepwork
;; my/daily-journal-dir
my/gtd-projects-file
)))
(defun my/create-weekly-org-file (path)
(expand-file-name (format "%s.org" (format-time-string "%Y-w%W")) path))
(defun my/create-daily-org-file (path)
(expand-file-name (format "%s.org" (format-time-string "%Y-%m-%d")) path))
(defconst my/weekly-journal-dir "~/repo/keido/notes/zk")
(defconst my/weekly-private-dir "~/repo/gtd/journals/weekly")
(defconst my/daily-private-dir "~/repo/gtd/journals/daily")Basics
;; Org mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ã¹ãããšã®å
±æã®ãã, github ã clone ãããã®ã Dropbox ã«çœ®ããŠ$HOME ã« symlink ããŠãã.
(after! org
(setq org-return-follows-link t) ;; Enter ã§ãªã³ã¯å
ãžãžã£ã³ã
(setq org-use-speed-commands t) ;; bullet ã«ã«ãŒãœã«ããããšé«éç§»å
(setq org-hide-emphasis-markers t) ;; * ãæ¶ããŠè¡šç€º.
(setq org-pretty-entities t)
;; ã«ã¬ã³ããŒè¡šç€ºãè±èªè¡šèšãž
(setq system-time-locale "C")
;; defaultã§ã¯Footnotes
(setq org-footnote-section "Footnotes")
(setq org-footnote-auto-adjust t)
(setq org-indent-indentation-per-level 1) ;; indentæ³¢æµ
ã
;; M-RET ã®æåã®èª¿æŽ
;; t ã ãš subtree ã®æçµè¡ã« heading ãæ¿å
¥
;; nil ã ãš current point ã«æ¿å
¥
;; ãªãïŒC-RET ã ãš subtree ã®æçµè¡ã«æ¿å
¥ãã
;; C-S-RET ã ãšæåã«æ¿å
¥ããã.
(setq org-insert-heading-respect-content nil)
(setq org-startup-indented t)
(setq org-indent-mode-turns-on-hiding-stars nil)
(setq org-startup-folded 'showall) ;; èŠåºãã®éå±€æå®
(setq org-startup-truncated nil) ;; é·ãæã¯æãè¿ã.
;; electric-indent 㯠org-mode ã§èª€äœåã®å¯èœæ§ãããããšã®ããš
;; ããŸã«ãããªã org-mode ã® tree æ§é ãå£ãã.ãšããããèšå®ããŠãã
;; ãã®èšå®ã®å¹æã以äžã®èšäºã§ gif ã§ãã.
;; https://www.philnewton.net/blog/electric-indent-with-org-mode/
(add-hook! org-mode (electric-indent-local-mode -1)))org-agenda
(after! org
;; org-agenda
(setq org-refile-targets '((org-agenda-files :maxlevel . 3)))
;; æé衚瀺ã 1 æ¡ã®æ, 0 ãã€ãã
(setq org-agenda-time-leading-zero t)
(setq calendar-holidays nil) ;; ç¥æ¥ãå©çšããªã.
(setq org-log-done 'time);; 倿޿ã®çµäºæå»èšé².
;; ã¹ã±ãžã¥ãŒã«ããããã©ã€ã³ã¢ã€ãã 㯠DONE ã«ãªã£ãŠããã°è¡šç€ºãã
(setq org-agenda-skip-deadline-if-done nil)
(setq org-agenda-skip-scheduled-if-done nil)
;; inactive timestamp [] ãé衚瀺.
(setq org-agenda-include-inactive-timestamps nil)
;; default ã§ æéã衚瀺
(setq org-agenda-start-with-log-mode t)
;; org-agenda speedup tips
;; https://orgmode.org/worg/agenda-optimization.html
(setq org-agenda-file-regexp "\\`\$[^.].*\\.org\\\|[0-9]\\\{8\\\}\$$\\.gpg\$?\$$\\'")
;; æéãéå®
(setq org-agenda-span 14)
;; Inhibit the dimming of blocked tasks:
(setq org-agenda-dim-blocked-tasks nil)
;; Inhibit agenda files startup options:memo
(setq org-agenda-inhibit-startup nil)
;; Disable tag inheritance in agenda:
(setq org-agenda-use-tag-inheritance nil)
;; https://emacs.stackexchange.com/questions/13237/in-org-mode-how-to-view-todo-items-for-current-buffer-only
(defun org-todo-list-current-file (&optional arg)
"Like `org-todo-list', but using only the current buffer's file."
(interactive "P")
(let ((org-agenda-files (list (buffer-file-name (current-buffer)))))
(if (null (car org-agenda-files))
(error "%s is not visiting a file" (buffer-name (current-buffer)))
(org-todo-list arg))))
)TODOããŒã¯ãŒãæ¡åŒµ
TODOããŒã¯ãŒãã®ã«ã¹ã¿ãã€ãº. M-x C-c t.
ref. TODO Extensions (The Org Manual)
(setq org-todo-keywords
'((sequence "ð(a)" "ð¡(b)" "â
(c)" "ðš(d)" "ð¬(e)" "ð©(f)" "ðš(g)" "|")
(sequence "ð(h)" "âš(i)" "ð(k)" "ð(l)" "ð(m)" "ð³(n)" "|")
(sequence "ðªš(o)" "ð§©(p)" "ð(q)" "ð(r)" "ð(s)" "ðŠ(t)" "|")
(sequence "ð§(w)" "ð±(z)" "|")))org-capture
Capture templates (The Org Manual)
(after! org
(setq org-capture-templates
'(("i" "ð¥ Inbox" entry
(file my/inbox-file)
"* %?\nCaptured On: %U\n"
:klll-buffer t)
("I" "ð¥+ð Inbox+Browser" entry
(file my/inbox-file)
"* %?\nSource: [[%:link][%:description]]\nCaptured On: %U\n"
:klll-buffer t)
("q" "ð¥+ð Inbox+Browser(quote)" entry
(file my/inbox-file)
"* %?\nSource: [[%:link][%:description]]\nCaptured On: %U\n%i\n"
:klll-buffer t))))capture to daily journal
;; çŸç¶ã€ãã£ãŠãªãã®ã§ãã¹ã¯
;; (defun my/create-timestamped-org-file (path)
;; (expand-file-name (format "%s.org" (format-time-string "%Y%m%d%H%M%S")) path))
(after! org
(setq org-capture-templates
(append
'(("c" "â Planning" plain
(file+headline
(lambda ()
(my/create-weekly-org-file my/weekly-private-dir))
"Planning")
"%?"
:unnarrowed t
:kill-buffer t)
("t" "ð€ Thought" entry
(file+headline
(lambda ()
(my/create-weekly-org-file my/weekly-private-dir))
"Thoughts")
"* ð€ %?\n%T"
:empty-lines 1
:unnarrowed t
:kill-buffer t)
("T" "ð€+ð Thought+Ref" entry
(file+headline
(lambda ()
(my/create-weekly-org-file my/weekly-private-dir))
"Thoughts")
"* ð€ %?\n%T from %a\n"
:empty-lines 1
:unnarrowed t
:kill-buffer t)
("l" "ð€+ð Thought+Browser" entry
(file+headline
(lambda ()
(my/create-weekly-org-file my/weekly-private-dir))
"Thoughts")
"* ð€ %?\n%T from [[%:link][%:description]]\n"
:empty-lines 1
:unnarrowed t
:kill-buffer t)
("p" "ð
Pomodoro" entry
(file+headline
(lambda ()
(my/create-weekly-org-file my/weekly-private-dir))
"DeepWork")
"* ð
%?\n%T"
:empty-lines 1
:unnarrowed t
:kill-buffer t)
("r" "ð§ Recovery" entry
(file+headline
(lambda ()
(my/create-weekly-org-file my/weekly-private-dir))
"Recovery")
"* ð§ %?\n%T"
:empty-lines 1
:unnarrowed t
:kill-buffer t)
("j" "ð Journal" plain
(file
(lambda ()
(my/create-weekly-org-file my/weekly-private-dir)))
"%?"
:empty-lines 1
:unnarrowed t
:kill-buffer t)
("J" "ð+ð Journal+Ref" plain
(file
(lambda ()
(my/create-weekly-org-file my/weekly-private-dir)))
"%?\n%a"
:empty-lines 1
:unnarrowed t
:kill-buffer t)
("L" "ð+ð Journal+Browser" plain
(file
(lambda ()
(my/create-weekly-org-file my/weekly-private-dir)))
"%?\nSource: [[%:link][%:description]]\nCaptured On: %U\n"
:empty-lines 1
:unnrrowed t
:kill-buffer t)) org-capture-templates)))capture to project journal
(after! org
(setq org-capture-templates
(append
'(("b" "ð bakuchi entry" entry
(file+olp+datetree my/project-journal-bakuchi)
"* %?\nCaptured On: %T\n"
:unnarrowed t
:empty-lines 1
:tree-type week
:klll-buffer t)
("B" "ð+â bakuchi append" plain
(file my/project-journal-bakuchi)
"%?"
:empty-lines 1
:unnarrowed t
:jump-to-captured t
:kill-buffer t)
("d" "ð DeepWork entry" entry
(file+olp+datetree my/project-journal-deepwork)
"* %?\nCaptured On: %T\n"
:unnarrowed t
:empty-lines 1
:tree-type week
:klll-buffer t)) org-capture-templates)))Google Chrome Extention: Org Capture
Google Chromeã«ãå ¥ããããšã§Web Pageãorg-captureãšé£æº(link).
Chromeã§Ctrl + Shift + Lã§èµ·å.
org-export(ox)
Org-modeã®ãã¡ã€ã«ããšã¯ã¹ããŒãããæ©èœ. ox package.
ãµãããã±ãŒãžãæ°å€ãããã, ããã§ã¯å ±éæ å ±ãŸãšã.
org-export-with-xxxãšããèšå®é ç®ã§ããããå¶åŸ¡ã§ãã.
Export Settings (The Org Manual)
ããã, 以äžãèªåçã«å€æãããŠããŸãâŠãã®æåã«å¯Ÿããå¶åŸ¡æ¹æ³ãèŠã€ãããªãâŠ
-
>
- < <
- & &
ã©ããHTML tagãšãHTML EntitiesãšåŒã°ããŠãã(ref. The Org Manual).
The HTML export back-end transforms â<â and â>â to â<â and â>â.
ãã ox-html.elã«ã¯ããããèšå®ãdefaultã§ãããŠãã. ä»ã®exportãžã®ç§»æ€ãå¿ èŠ.
(setq org-export-html-protect-char-alist
'(("&" . "&")
("<" . "<")
(">" . ">"))Advanced Export Configuration (The Org Manual)
ãããã, exportããããããšã«hook颿°ã«ãã£ãŠæåå倿ãå¿ èŠ.
(after! ox
;; (setq org-export-async-init-file "/home/tsu-nera/.doom.d/async-init.el")
(defun my/hugo-filter-html-amp (text backend info)
(when (org-export-derived-backend-p backend 'hugo)
(replace-regexp-in-string "&" "&" text)))
(defun my/hugo-filter-html-gt (text backend info)
(when (org-export-derived-backend-p backend 'hugo)
(replace-regexp-in-string ">" ">" text)))
(defun my/hugo-filter-html-lt (text backend info)
(when (org-export-derived-backend-p backend 'hugo)
(replace-regexp-in-string "<" "<" text)))
(add-to-list
'org-export-filter-plain-text-functions 'my/hugo-filter-html-amp)
(add-to-list
'org-export-filter-plain-text-functions 'my/hugo-filter-html-gt)
(add-to-list
'org-export-filter-plain-text-functions 'my/hugo-filter-html-lt))org-preview-html
ä»ã®Emacs, xwidgetçšã«ã³ã³ãã€ã«ããŠãªãã£ããªâŠ
ewwã§ãã¬ãã¥ãŒã§ãã.
(use-package! org-preview-html)ox-hugo
Org-modeã§æžããããã°èšäºãHugoã«ãã£ãMarkdown圢åŒã«å€æãã.
ããã°Futurismoã¯Org-modeã§å·çããŠãããå©çšããŠMarkdownã«å€æããŠãã.
(use-package! ox-hugo
:after ox
:bind
;; org-roamã®exportã§å€æ§ããã®ã§C-c rã®prefixãã€ããŠãã.
("C-c r e" . org-hugo-export-to-md)
:config
(setq org-hugo-auto-set-lastmod t)
;; ãªãã.dir-locals.elã«æžããŠãåæ ããŠãããªããª.
(setq org-export-with-author nil)
;; org-hugo-get-idã䜿ãããã«èšå®.
(setq org-hugo-anchor-functions
'(org-hugo-get-page-or-bundle-name
org-hugo-get-custom-id
org-hugo-get-id
org-hugo-get-md5
;; æ¥æ¬èªã«äžåããªæ°ããã
;; org-hugo-get-heading-slug
))
;; WebPç»åã®èªåã³ããŒãæå¹å
(add-to-list 'org-hugo-external-file-extensions-allowed-for-copying "webp"))ãã®ox-hugoã§åºåãããMarkdownã¯ã©ãããªã¹ã衚瀺ã§ã¹ããŒã¹ã4ã€å ¥ã£ãŠããŸã. GitHub Favorite Markdownã®ããã«ãªã¹ãã§ã®ã¹ããŒã¹ïŒã§ãã£ãŠæ¬²ãããã®ã®è§£æ±ºæ¹æ³ãèŠã€ãããªã.
ox-rst
Org-modeã§æžããWikiçšã®ããŒãžãSphinxã§å ¬éããããã«reST圢åŒã«å€æãã.
ãªã³ã¯åœ¢åŒãããŸã倿ã§ããªãã®ã§ãã£ãã匷åŒã«å€æããŠãã(ããå°ãããŸãæ¹åããã).
(use-package! ox-rst
:after ox)
(after! ox
(defun my/rst-to-sphinx-link-format (text backend info)
(when (and (org-export-derived-backend-p backend 'rst)
(not (search "<http" text)))
(replace-regexp-in-string
"$\\.org>`_$" ">`"
(concat ":doc:" text) nil nil 1)))
(add-to-list 'org-export-filter-link-functions
'my/rst-to-sphinx-link-format))ox-qmd
GitHub Flavored Markdown.
æšæºã®Markdownã®åºåã ãšèŠãç®ãæªã. Bufferã«æžãåºããŠGitHubãšãã«ã³ãããããšãçšã«ãããŠãã.
ref. Org-modeããQiitaæºæ ã®Markdownãexportããããã±ãŒãžãäœã£ãŠã¿ãŸãã - Qiita
(use-package! ox-qmd)ox-gfmã¯2017ããã¡ã³ããããŠãªãã®ã§ãããšãã(ref).
org-babel(ob)
Org-modeã®ãªãã§Literature Programming.
åºæ¬æäœ:
- C-c C-, ã³ãŒããããã¯ã®æ¿å ¥ãã³ãã¬ãŒãåŒã³åºã(org-insert-structure-tempate)
- C-c C-c ã³ãŒãå®è¡(org-babel-execute-src-block)
- C-c C-o ã³ãŒãå®è¡çµæãéã(org-babel-open-src-block-result)
- C-c â ãœãŒã¹ã³ãŒãç·šé(org-edit-src-code)
- ã©ããEoom Emacsã ãš keybindingãå€ãããŠã.
- C-c l â(org-edit-special)ã§éã.
(after! org
;; https://stackoverflow.com/questions/53469017/org-mode-source-editing-indents-code-after-exiting-source-code-block-editor
;; ã€ã³ãã³ã. default 2ã«ãªã£ãŠãããšãžããªééãå
é ã«å
¥ã.
(setq org-edit-src-content-indentation 0)
(setq org-src-preserve-indentation t)
;; TABã®æå
(setq org-src-tab-acts-natively t)
;; org-babel ã®ãœãŒã¹ããã¬ã€ã«è¡šç€º.
(setq org-src-fontify-natively t)
(setq org-fontify-whole-heading-line t)
;; è©äŸ¡ã§ãã¡ãã¡è³ªåãããªãããã«.
(setq org-confirm-babel-evaluate nil)
;; org-babel ã§ å®è¡ããèšèªãæžã. ããã©ã«ãã§ã¯ emacs-lisp ã ã.
(org-babel-do-load-languages
'org-babel-load-languages
'((lisp . t)
(shell . t)
(clojure . t)))
;; org-modeããclojure codeãè©äŸ¡.
(define-key org-mode-map (kbd "C-c C-v e") 'cider-eval-last-sexp)
;; (org-defkey org-mode-map "\C-u\C-x\C-e" 'cider-eval-last-sexp)
;; Clojure Modeã®ç¹å¥å¯Ÿå¿. keybindingãäžæžããããã®ã§.
;; (define-key clojure-mode-map (kbd "C-c C-x k") 'org-edit-src-exit)
;; (define-key clojure-mode-map (kbd "C-c C-x q") 'org-edit-src-abort)
)refs:
- org-babel Key bindings and Useful Functions (The Org Manual)
- org-modeã®ã³ãŒããããã¯(Babel)ã®äœ¿ãæ¹ | Misohena Blog
ob-html
org-modeã®ã³ãŒããããã¯ã§HTMLããå®è¡ããã | Misohena Blog
(use-package! ob-html
:after org
:config
;; C-c C-o ã§ãã©ãŠã¶ã§éã.
(org-babel-html-enable-open-src-block-result-temporary))org-superstar
org-superstar-mode(+pretty option)é¢é£.
bulletãããããã«ããã. ãã ãããšåŒãæãã«ããã©ãŒãã³ã¹ã¯ã¡ãã£ãšèœã¡ããã.
(after! org
;;; Titles and Sections
;; hide #+TITLE:
;; (setq org-hidden-keywords '(title))
;; set basic title font
;; (set-face-attribute 'org-level-8 nil :weight 'bold :inherit 'default)
;; Low levels are unimportant => no scaling
;; (set-face-attribute 'org-level-7 nil :inherit 'org-level-8)
;; (set-face-attribute 'org-level-6 nil :inherit 'org-level-8)
;; (set-face-attribute 'org-level-5 nil :inherit 'org-level-8)
;; (set-face-attribute 'org-level-4 nil :inherit 'org-level-8)
;; Top ones get scaled the same as in LaTeX (\large, \Large, \LARGE)
;; (set-face-attribute 'org-level-3 nil :inherit 'org-level-8 :height 1.2) ;\large
;; (set-face-attribute 'org-level-2 nil :inherit 'org-level-8 :height 1.44) ;\Large
;; (set-face-attribute 'org-level-1 nil :inherit 'org-level-8 :height 1.728) ;\LARGE
;; Only use the first 4 styles and do not cycle.
(setq org-cycle-level-faces nil)
;; orgã®éå±€ã®è²åãã¬ãã«.
;; (setq org-n-level-faces 8)
;; Document Title, (\huge)
;; (set-face-attribute 'org-document-title nil
;; :height 2.074
;; :foreground 'unspecified
;; :inherit 'org-level-8)
;; (with-eval-after-load 'org-superstar
;; (set-face-attribute 'org-superstar-item nil :height 1.2)
;; (set-face-attribute 'org-superstar-header-bullet nil :height 1.2)
;; (set-face-attribute 'org-superstar-leading nil :height 1.3))
;; Set different bullets, with one getting a terminal fallback.
(setq org-superstar-headline-bullets-list '("â " "â" "â" "â·"))
;; (setq org-superstar-special-todo-items t)
;; Stop cycling bullets to emphasize hierarchy of headlines.
(setq org-superstar-cycle-headline-bullets nil)
;; Hide away leading stars on terminal.
;; (setq org-superstar-leading-fallback ?\s)
(setq inhibit-compacting-font-caches t))org-roam
Zettelkasten Methodã®Org-roamå®è£ .
;; org-roam
(setq org-roam-directory (file-truename "~/repo/keido/notes"))
(setq org-roam-zk-dir (concat org-roam-directory "/zk"))
(setq org-roam-db-location (file-truename "~/repo/keido/db/org-roam.db"))
(use-package! org-roam
:after org
:init
(setq org-roam-v2-ack t)
(map!
:leader
:prefix ("r" . "org-roam")
"f" #'org-roam-node-find
"i" #'org-roam-node-insert
"l" #'org-roam-buffer-toggle
"t" #'org-roam-tag-add
"T" #'org-roam-tag-remove
"a" #'org-roam-alias-add
"A" #'org-roam-alias-remove
"r" #'org-roam-ref-add
"R" #'org-roam-ref-remove
"o" #'org-id-get-create
"u" #'my/org-roam-update
"D" #'org-roam-dailies-goto-today
)
:custom
;;ãã¡ã€ã«åã ID ã«ãã.
(org-roam-capture-templates
'(("z" "ð± Zettel" plain "%?"
:target (file+head "zk/%<%Y%m%d%H%M%S>.org"
"\n#+date: %T\n#+title:ð±${title}\n#+filetags: :ZETTEL:\n")
:unnarrowed t)
("w" "ð Wiki" plain "%?"
:target (file+head "zk/%<%Y%m%d%H%M%S>.org"
"#+title:ð${title}\n#+filetags: :WIKI:\n")
:unnarrowed t)
("t" "ð Tag" plain "%?"
:target (file+head "zk/%<%Y%m%d%H%M%S>.org"
"#+title:ð${title}\n#+filetags: :TAG:\n")
:unnarrowed t)
("h" "ðš Person" plain "%?"
:target (file+head
"zk/%<%Y%m%d%H%M%S>.org"
"#+title:ðš${title}\n#+filetags: :PERSON:\n")
:unnarrowed t)
("f" "ð Type" plain "%?"
:target (file+head "zk/%<%Y%m%d%H%M%S>.org"
"#+title:ð${title}\n#+filetags: :TYPE:\n")
:unnarrowed t)
("m" "ð³ MOC" plain "%?"
:target (file+head "zk/%<%Y%m%d%H%M%S>.org"
"#+title:ð³${title}\n#+filetags: :MOC:\n")
:unnarrowed t)
("i" "â
Issue" plain "%?"
:target (file+head "zk/%<%Y%m%d%H%M%S>.org"
"#+title:â
${title}\n#+filetags: :ISSUE:\n")
:unnarrowed t)
("d" "ð¡ Idea" plain "%?"
:target (file+head "zk/%<%Y%m%d%H%M%S>.org"
"#+title:ð¡${title}\n#+filetags: :IDEA:\n")
:unnarrowed t)
("c" "ð Concept" plain "%?"
:target (file+head
"zk/%<%Y%m%d%H%M%S>.org"
"#+title:ð${title}\n#+filetags: :CONCEPT:\n")
:unnarrowed t)
("k" "ðŠ Darkfox" plain "%?"
:target (file+head
"zk/%<%Y%m%d%H%M%S>.org"
"#+title:ðŠ${title}\n#+filetags: :DARKFOX:\n")
:unnarrowed t)
("b" "ð Book" plain
"%?
- title: %^{title}
- authors: %^{author}
- date: %^{date}
- publisher: %^{publisher}
- url: http://www.amazon.co.jp/dp/%^{isbn}
"
:target (file+head "zk/%<%Y%m%d%H%M%S>.org"
"#+title:ð${title} - ${author}(${date})\n#+filetags: :BOOK:SOURCE:\n")
:unnarrowed t)
("s" "ðâ Talk" plain
"%?
- title: %^{title}
- url: %^{url}
"
:target (file+head "zk/%<%Y%m%d%H%M%S>.org"
"#+title:ð ${title} - ${editor}(${date})\n#+filetags: :TALK:SOURCE:\n")
:unnarrowed t)
("o" "ð» Online" plain
"%?
- title: %^{title}
- authors: %^{author}
- url: %^{url}
"
:target (file+head "zk/%<%Y%m%d%H%M%S>.org"
"#+title:ð»${title}\n#+filetags: :ONLINE:SOURCE:\n")
:unnarrowed t)))
(org-roam-extract-new-file-path "%<%Y%m%d%H%M%S>.org")
;; :map org-mode-map
;; ("C-M-i" . completion-at-point)
:config
(defun my/org-roam-update ()
(interactive)
(org-id-update-id-locations)
(org-roam-db-sync)
(org-roam-update-org-id-locations))
(setq org-roam-mode-sections
'((org-roam-backlinks-section :unique t)))
(setq org-roam-db-gc-threshold most-positive-fixnum)
;; for speed up
;; (setq org-roam-node-default-sort 'file-mtime)
(setq +org-roam-open-buffer-on-find-file nil)
;; (org-roam-db-autosync-mode)
(org-roam-db-autosync-enable)
;; (setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
;; for emacs 29~
;; (when (>= emacs-major-version 29)
;; (setq org-roam-database-connector 'sqlite-builtin))
)(setq org-roam-db-node-include-function
(lambda ()
(not (member "" (org-get-tags)))))consult-org-roam(Org-roamæ€çŽ¢åŒ·å)
ref. https://github.com/jgru/consult-org-roam
以äžã®æ©èœãæäŸ.ãã¡ã€ã«åã¯ä»ã¯æ¥ä»ã«ããŠãããããããªãããª.å šææ€çŽ¢ã¯åããªã.ããã¯ãªã³ã¯æ€çŽ¢ã ã䜿ããã.
- ãã¡ã€ã«åæ€çŽ¢
- ããã¯ãªã³ã¯æ€çŽ¢
- å šææ€çŽ¢
(use-package! consult-org-roam
:init
(require 'consult-org-roam)
;; Activate the minor-mode
(consult-org-roam-mode 1)
:custom
(consult-org-roam-grep-func #'consult-ripgrep)
:config
;; Eventually suppress previewing for certain functions
(consult-customize
consult-org-roam-forward-links
:preview-key (kbd "M-."))
:bind
("C-c r F" . consult-org-roam-file-find)
("C-c r b" . consult-org-roam-backlinks)
("C-c r S" . consult-org-roam-search))Org-roam管çäžã®ããŒãã®å šææ€çŽ¢
Using consult-ripgrep with org-roam for searching notes - How To - Org-roam
consult-ripgrepã deft ã®ä»£ããã«äœ¿ã. ããé«é.
æ€çŽ¢å¯Ÿè±¡ãå€ããããšãã³ã°ããã®ã§æ¹åããã.
(defun my/org-roam-rg-search ()
"Search org-roam directory using consult-ripgrep. With live-preview."
(interactive)
(consult-ripgrep org-roam-directory))
(global-set-key (kbd "C-c r s") 'my/org-roam-rg-search)org-publish(Org-roamã®ããŒãããµã€ããžå ¬é)
hugoçš. çŸç¶exit abnormally ã§åããªãã®ã§èª¿ã¹ã.
(setq org-publish-project-alist
(list
(list "keido-hugo"
:recursive nil
:base-directory org-roam-zk-dir
:publishing-directory "~/repo/keido-hugo/content"
:exclude ".*gitignore|.*/private/.*"
:publishing-function 'org-hugo-export-wim-to-md
:with-author nil ;; äœæè
é€å€
:with-creator nil ;; EmacsãšOrg version衚èšé€å€
:with-toc nil ;; Table of Contentsåºå
:section-numbers nil ;; ãã³ããªã³ã°çŠæ¢
:time-stamp-file nil ;; ã¿ã€ã ã¹ã¿ã³ããé€å€
)))
;; (require 'org-roam-export)htmlçš.
(setq org-publish-project-alist
(list
(list "keido-org"
:recursive nil
:base-directory org-roam-zk-dir
:publishing-directory "~/repo/keido-org/public/notes"
:exclude ".*gitignore|.*/private/.*"
;; :auto-sitemap t
;; :sitemap-function 'roam-sitemap
;; :sitemap-title "Keido notes"
:publishing-function 'org-html-publish-to-html
:with-author nil ;; äœæè
é€å€
:with-creator nil ;; EmacsãšOrg version衚èšé€å€
:with-toc t ;; Table of Contentsåºå
:section-numbers nil ;; ãã³ããªã³ã°çŠæ¢
:time-stamp-file nil ;; ã¿ã€ã ã¹ã¿ã³ããé€å€
)))
(defun my/setup-org-theme (backend)
(goto-char (point-max))
(insert "\n#+SETUPFILE: https://fniessen.github.io/org-html-themes/org/theme-readtheorg.setup\n")
(insert "\n#+HTML_HEAD: <style>pre.src{background:#343131;color:white;} </style>\n"))
(defun my/collect-backlinks-string (backend)
"Insert backlinks into the end of the org file before parsing it."
(when (org-roam-node-at-point)
(goto-char (point-max))
;; Add a new header for the references
(insert "\n\n* ðBacklinks\n")
(let* ((backlinks (org-roam-backlinks-get (org-roam-node-at-point))))
(dolist (backlink backlinks)
(let* ((source-node (org-roam-backlink-source-node backlink))
(node-file (org-roam-node-file source-node))
(file-name (file-name-nondirectory node-file))
(title (org-roam-node-title source-node)))
(insert
(format "- [[./%s][%s]]\n" file-name title)))))))
(add-hook 'org-export-before-parsing-functions 'my/setup-org-theme)
(add-hook 'org-export-before-processing-functions 'my/collect-backlinks-string)
;; (require 'org-roam-export)org-roam-dailies
Org-roamã«çµã¿èŸŒãŸããå£åçorg-journal. çŸç¶äœ¿çšããã®ãããã.
org-roam-dialiesãããorg-journalãå©çšãã(org-agendaã®éœå).
ref. Org-journal vs org-roam-dailies - Troubleshooting - Org-roam
é±åäœã§æ¥èšã®ãããªããŒãžãå€éšå ¬éçšã«äœ¿ã.
ãã€ãã¿ãŒã®ãããªãã€ã¯ãããã°ã®å©çšãæ³å®ããŠãã.
(after! org-roam
(setq org-roam-dailies-directory "zk")
(setq org-roam-dailies-capture-templates
'(("d" "default" entry "** %?" :if-new
(file+head+olp "%<%G-w%V>.org" "#+title: ð%<%G-w%V>\n"
("ðJournals"))))))(after! org-capture
(add-to-list 'org-capture-templates
'("w" "ð Thought(weekly)" entry
(file+headline (lambda ()
(my/create-weekly-org-file my/weekly-journal-dir))
"ðJournals")
"* ð%?\n%T\n\n"
:empty-lines 1
:unnarrowed nil ;; ã»ãã®ãšã³ããªã¯èŠããªãããã«.
:klll-buffer t)))org-roam-ui(disabled)
Web UI.
(use-package! websocket
:after org-roam)
(use-package! org-roam-ui
:after org-roam ;; or :after org
;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have
;; a hookable mode anymore, you're advised to pick something yourself
;; if you don't care about startup time, use
;; :hook (after-init . org-roam-ui-mode)
:config
(setq org-roam-ui-sync-theme t
org-roam-ui-follow t
org-roam-ui-update-on-save t
org-roam-ui-open-on-start t))
org-roam-timestamps(disabled)
org-roam-uiã§ã€ããã¡ã¿æ å ±ãä»äžããããšãç®çã ãçŸç¶äœ¿ã£ãŠããªãã®ã§ãã£ããå°å°.
(use-package! org-roam-timestamps
:after org-roam
:config
(org-roam-timestamps-mode)
(setq org-roam-timestamps-remember-timestamps nil)
(setq org-roam-timestamps-remember-timestamps nil))org-roamã®slowdownãåé¿ããTip
https://www.reddit.com/r/orgmode/comments/s8xv5j/orgroam_slows_down_as_nodes_increase_solution/
;; 2. Memoize the function that costs the most.
(load-file "~/.doom.d/private/memoize.el")
(require 'memoize)
(memoize 'org-roam-node-read--completions "10 minute")
(defun memoize-force-update (func &optional timeout)
(when (get func :memoize-original-function)
(progn (memoize-restore func)
(memoize func timeout))))
(defun my/force-update-org-roam-node-read-if-memoized (&optional timeout)
(interactive)
(memoize-force-update 'org-roam-node-read--completions
(if timeout timeout memoize-default-timeout)))
(run-with-idle-timer 60 t #'my/force-update-org-roam-node-read-if-memoized)
;; Note: it might be better to hack org-roam to make it use
;; hash-tables instead of lists. Have a way to quickly detect
;; which node is to be updated.org-toggl
org-modeãTogglãšé£æºããã. https://github.com/mbork/org-toggl
(use-package! org-toggl
:after org
:config
(setq org-toggl-inherit-toggl-properties t)
(toggl-get-projects)
(setq toggl-default-project "GTD")
(org-toggl-integration-mode))org-journal
https://github.com/bastibe/org-journal
(use-package! org-journal
:after org
:bind
;; org-roamãšæãããã®ã§ C-c rãŸã§ãprefixã«ãã.
("C-c r d n" . org-journal-new-entry)
("C-c r d d" . org-journal-open-current-journal-file)
:config
(setq org-journal-date-prefix "#+TITLE: â")
;; (setq org-journal-file-type `daily)
;; (setq org-journal-file-format "%Y-%m-%d.org")
;; (setq org-journal-date-format "%Y-%m-%d")
;; ããã¯org-journalã®å€æ°ã§ã¯ãªã.
(setq org-journal-file-format "%Y-w%W.org")
(setq org-journal-date-format "%Y-w%W")
(setq org-journal-file-type `weekly)
(setq org-journal-dir my/weekly-private-dir)
;; (setq org-journal-enable-agenda-integration t)
)org-ref(bibtex)
æç®ç®¡ç. Zoteroãšé£æºããŠïŒè«æãšããããã¯æžç±ãYoutubeåç»ãWebèšäºã®ã¡ã¢ã«å©çš.
- org-ref
- ivy-bibtex
- ivyã®action㯠ivy-bibtexã§C-SPCã§éžæ-> C-M-oã§actionéžæåè£ãåºãïŒpãšãeãšãæŒã.
- org-roam-bibtex
ãªããzoteroããããŒã¿ãšã¯ã¹ããŒãã§ããªããªã£ãŠåããªããªã£ã.
ãªããorg-modeéããã³ã«reloadãèµ°ãã®ã§maskãã.
(use-package! org-ref
:config
(setq bibtex-completion-bibliography (list (file-truename "~/repo/keido/references/zotLib.bib")))
(setq bibtex-completion-additional-search-fields '(keywords))
(setq bibtex-completion-display-formats
'((online . "${=has-pdf=:1}${=has-note=:1} ${=type=:6} ${year:4} ${author:24} ${title:*}")
(book . "${=has-pdf=:1}${=has-note=:1} ${=type=:6} ${year:4} ${author:24} ${title:*}")
(video . "${=has-pdf=:1}${=has-note=:1} ${=type=:6} ${year:4} ${editor:24} ${title:*}")
(paper . "${=has-pdf=:1}${=has-note=:1} ${=type=:6} ${year:4} ${author:24} ${title:*}")
(t . "${=has-pdf=:1}${=has-note=:1} ${=type=:6} ${year:4} ${author:24} ${title:*}")))
(setq bibtex-completion-pdf-symbol "ð")
(setq bibtex-completion-notes-symbol "ð")
(setq bibtex-completion-pdf-field "file")
;; (setq bibtex-completion-pdf-open-function
;; (lambda (fpath)
;; (call-process "open" nil 0 nil fpath)))
;; Create fields for Film type
(add-to-list 'bibtex-biblatex-field-alist
'(("video" "Video or Audio(like YouTube)")))
(add-to-list 'bibtex-biblatex-entry-alist
'("video" "A Video"
("video", "title" "editor" "date" "url" "urldate" "abstract" "editortype")
nil
"keywords"))
(bibtex-set-dialect 'biblatex))
(use-package! ivy-bibtex
:after org-ref
:init
(map!
:leader
:prefix ("b" . "org-ref")
"b" #'org-ref-bibtex-hydra/body
"v" #'ivy-bibtex
"c" #'org-ref-insert-cite-link
"a" #'orb-note-actions
"i" #'orb-insert-link)
:config
(setq ivy-re-builders-alist
'((ivy-bibtex . ivy--regex-ignore-order)
(t . ivy--regex-plus)))
(setq ivy-bibtex-default-action #'ivy-bibtex-open-url-or-doi)
(ivy-set-actions
'ivy-bibtex
'(("p" ivy-bibtex-open-any "Open PDF, URL, or DOI" ivy-bibtex-open-any)
("e" ivy-bibtex-edit-notes "Edit notes" ivy-bibtex-edit-notes)))
)
(use-package! org-roam-protocol
:after org-protocol)ã€ãã£ãŠãªãã®ã§ãšã©ãŒãã®ã§ãã£ãããã¹ã¯.
(use-package! org-roam-bibtex
:after org-roam ivy-bibtex
:hook (org-mode . org-roam-bibtex-mode)
:custom
(orb-insert-interface 'ivy-bibtex)
:config
(setq orb-preformat-keywords '("author" "date" "url" "title" "isbn" "publisher" "urldate" "editor" "file"))
(setq orb-process-file-keyword t)
(setq orb-attached-file-extensions '("pdf")))org-anki
Org-modeãšAnkiãã€ãªã.
https://github.com/eyeinsky/org-anki
ä»ãŸã§anki-editorãå©çšããŠãããã®ã®ïŒãã®èšæ³ãšwikiã®çžæ§ãæªãã£ãïŒåé·ïŒ. ãããªãorg-modeã®headlineããã®ãŸãŸã€ãããã®ã§ãããã.
(use-package! org-anki
:after org
:custom
;; one big deckã®ååã«åŸã.
;; ref: http://augmentingcognition.com/ltm.html
(org-anki-default-deck "Default")
:config
(define-key org-mode-map (kbd "C-c n A s") #'org-anki-sync-entry)
(define-key org-mode-map (kbd "C-c n A u") #'org-anki-update-all)
(define-key org-mode-map (kbd "C-c n A d") #'org-anki-delete-entry))URLã®æ¿å ¥ã¯org-link圢åŒã§ã§ãã. ããã¯äŸ¿å©.
org-bars(deprecated)
ä»ã©ãã®ã¢ãŠãã©ã€ããŒçãªç·ãåºã.
- Terminal Mode ã§ã¯ã€ãããªã.
- ãªã¹ãã®æè¿ãã§ã®ã€ã³ãã³ãã¯åŽ©ãã.
(require 'org-bars)
(add-hook! 'org-mode-hook #'org-bars-mode)<2025-11-12 Wed 16:25> è¡šç€ºãæ°æã¡æªããªã£ãã®ã§ç¡å¹å.
Org-noter(disabled)
PDFã®æ³šéã管çãã. :link:weirdNox/org-noter
ã¯ããã®èµ·åãã©ãããã°ããã®ãã¯ã«ã©ãªãã£ã. ç¹å®ã®ãã¡ã€ã«ã«èšé²ãæ®ãããå Žåã¯PDFã®Bufferã§ã¯ãªã, é©åœãªheadingäœæããŠM-x org-noterãèµ·åãããšPDFãéžæã§ãã.
M-x org-noter-create-skeltonãšãã颿°ãã€ã°ã. ðYoutubeåç»(1:08) PDFããOutlineãæãåºããŠOrg fileã«çæããŠïŒããšã¯ãã®Org-fileã®Bulletã®ã«ãŒãœã«ãç§»åãããšPDFã®ã»ããã·ã³ã¯ãããŠç§»åã§ãã.
åãããŠç¬ã£ãð
(use-package! org-noter
:after (:any org pdf-view)
:config
(setq
;; I want to see the whole file
org-noter-hide-other nil
;; Everything is relative to the main notes file
org-noter-notes-search-path (list (file-truename "~/repo/keido/notes/wiki"))))org-trello(disabled)
KanbanããŒã« Trello飿º.
å€ããããžã§ã¯ãã ãã¡ã³ãããããŠããŠã¹ã¿ãŒã500以äžã€ããŠãã.
ãã ãåããªãâŠnative compç¡å¹ã§è¡ããã. -> ããã. https://github.com/org-trello/org-trello/issues/418
(use-package! org-trello)ã©ããDoom Emacsã ãš C-uãå¹ããªã. ãããŠããã«ãã£ãŠtrello->org-fileãžã®downloadãC-u C-c o sã«é Œã£ãŠããã®ã§äžäŸ¿ã«ãªã. (org-trello-sync-buffer t) ãè©äŸ¡ãããšããŠã³ããŒããèµ°ããšãã仿§ã®ããããã颿°ã«ããŠåŒã¶ããšã«ãã£ãŠä»£æ¿.
Synching from and to Trello does not work · Issue #409
(after! org-trello
(defun my/org-trello-sync-from-trello ()
(interactive)
(org-trello-sync-buffer t)))org-table
(setq org-table-export-default-format "orgtbl-to-csv")org-sidebar
https://github.com/alphapapa/org-sidebar
org-sidebar-treeã§ãµã€ãããŒã«ã¢ãŠãã©ã€ã³ã衚瀺.
(use-package! org-sidebar
:config
;; cider-modeã«åãã㊠C-c C-zã«bindããŠã¿ã.
(define-key org-mode-map (kbd "C-c C-z") #'org-sidebar-tree-toggle))Org timestamps
org-mode ã§ timestamp ã®ã¿ãæ¿å ¥ããã«ã¹ã¿ã 颿°. Doom Emacsã®ããã§C-u C-c .ãåäœããªãã®ã§.
(after! org
(defun my/insert-timestamp ()
(interactive)
(org-insert-time-stamp (current-time) t))
(defun my/insert-timestamp-inactive ()
(interactive)
(org-time-stamp-inactive (current-time)))
(map! :map org-mode-map "C-u C-c C-." #'my/insert-timestamp-inactive)
(map! :map org-mode-map "C-c C-." #'my/insert-timestamp))空çœãä¿åæã«åé€ããããš bullet 衚瀺ããããããªã. ãªã wl-bulter 㯠doom emacs ã®ããã©ã«ãã§çµã¿èŸŒãŸããŠãã.
(add-hook! 'org-mode-hook
(when (fboundp 'ws-butler-mode)
(ws-butler-mode -1)))org-pomodoro
(use-package! org-pomodoro)org-web-tools
ewwãšorgã䟿å©ã«ããããŒã«çŸ€(https://github.com/alphapapa/org-web-tools).
(use-package! org-web-tools
:bind
("C-c i l" . org-web-tools-insert-link-for-url))org-ai
https://github.com/rksm/org-ai
openai-api-tokenã®èšå®ãå¿ èŠ. private/config.elã§å®çŸ©ããŠãã.
(use-package! org-ai
:load-path (lambda () "~/.emacs.d/.local/straight/repos/org-ai")
:commands (org-ai-mode)
;; :custom
;; (org-ai-openai-api-token "")
:init
(add-hook 'org-mode-hook #'org-ai-mode)
:config
;; if you are using yasnippet and want `ai` snippets
(org-ai-install-yasnippets))Term
;; Term
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Tools
;; Tools
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;forge
magitæ¡åŒµ, EmacsãšGitHubã飿º.
doom emacsã ãš (magit +forge) ã®ãªãã·ã§ã³ã§ã€ã³ã¹ããŒã«ã§ãã.
ref: Forge User and Developer Manual
(after! magit
(setq auth-sources '("~/.authinfo"))
(setq magit-revision-show-gravatars '("^Author: " . "^Commit: "))
;; (setq magit-diff-refine-hunk 'all)
)ãªããžããªåã倿Žããå Žåã¯issueãPRã®äœæã倱æãã. ãã㯠.git/configã®åé¡ãªã®ã§ããŒã«ã«ã®ãã¡ã€ã«ãä¿®æ£ãã.
git-link
çŸåšã®ãããã¡ã®äœçœ®ã®GitHubã®urlãååŸ.
(global-set-key (kbd "C-c s g") 'git-link)
(use-package! git-link
:config
;; urlã«branchã§ã¯ãªãcommitçªå·ãã€ãã.
;; org-journalãžã®è²Œãä»ããæ³å®ããŠããã®ã§ãã®èšå®ã«ããŠãã.
(setq git-link-use-commit t))UI
ã¿ããåšãã®èšå®.
Doom
;; UI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ã©ãããã©ã³ãã奿°ã ãš org-table ã®è¡šç€ºã厩ãã.
;; Source Han Code JP ã ãšãããã org-table ã®è¡šç€ºã厩ãã.
;; terminal ã ãšå€§äžå€«ãªæš¡æ§.ãããã Terminal ã¯ãã®èšå®ã§ã¯ãªããŠ
;; Terminal Emulator ã®èšå®ããã.
;; Twitterã§æŸã£ãèšå®ã ãã©è¥å¹²org-table衚瀺ããã·ã«ãªã£ãã®ã§æ¡çš.
;; (set-face-attribute 'fixed-pitch nil :font "Ricty Diminished" :height 160)
;; (setq doom-font (font-spec :family "Source Han Code JP" :size 15 ))
;; (setq doom-font (font-spec :family "Ricty Diminished" :size 16))
(when (wsl-p)
(setq doom-font (font-spec :family "HackGen" :size 18)))
(when (not (wsl-p))
(setq doom-font (font-spec :family "Source Han Code JP" :size 15 )))
;; doom-molokaiãdoom-monokai-classicã ãšewwã®è¡šç€ºãããŸãã¡.
(setq doom-theme 'doom-molokai)
(doom-themes-org-config)
;; counselãšdoom-modelineãçžæ§æªããããªã®ã§
;; workspace name衚瀺ã®ããã«ã¯è¿œå ã§èšå®.
;; https://github.com/hlissner/doom-emacs/issues/314
;; (after! doom-modeline
;; (setq doom-modeline-icon (display-graphic-p))
;; (setq doom-modeline-major-mode-icon t))https://github.com/seagle0128/doom-modeline
emojify
Emacsã§çµµæåãã€ãã.
ã©ããemojifyã®çµµæåèŸæžã¯ïŒemojione-v2.2.6-22ãšãããã®ã§ããå€ã. Twitterã奜ããªã®ã§Twitterã®ãªãŒãã³ãœãŒã¹èŸæžã®twemojiã«å€æŽ.
https://github.com/iqbalansari/emacs-emojify/blob/master/data/emoji-sets.json
(after! emojify
;; (setq emojify-emoji-set "openmoji-v13-0")
;; (setq emojify-emoji-set "emojione-v2.2.6.22")
)ãã ïŒ2022çŸåštwemojiã¯v13ãªã®ã§v2ã¯å€ããª..ãšãããã§ãªããã€ãããã.
Emacsã®æ©èœã§emoji-searchãããã®ã§ãããèšå®ããŠããã. ãã£ã¡ã®èŸæžã®ã»ããæ±ããæåãå€ã.
;; doomã ãš C-c i eã§emojify-insert-emoji
(global-set-key (kbd "C-c i E") 'emoji-search)svg-tag-mode
TODOã»ãã©ãã«ãçŸãã.
(use-package! svg-tag-mode
:config
(setq svg-tag-tags
'(
;; :XXX:
("$:[A-Z]+:$" . ((lambda (tag)
(svg-tag-make tag :beg 1 :end -1))))
;; :XXX|YYY:
("$:[A-Z]+$\|[a-zA-Z#0-9]+:" . ((lambda (tag)
(svg-tag-make tag :beg 1 :inverse t
:margin 0 :crop-right t))))
(":[A-Z]+$\|[a-zA-Z#0-9]+:$" . ((lambda (tag)
(svg-tag-make tag :beg 1 :end -1
:margin 0 :crop-left t))))
;; :#TAG1:#TAG2:âŠ:$
("$:#[A-Za-z0-9]+$" . ((lambda (tag)
(svg-tag-make tag :beg 2))))
("$:#[A-Za-z0-9]+:$$" . ((lambda (tag)
(svg-tag-make tag :beg 2 :end -1))))
)))Others
;; ãããã¹ã¯ããŒã«ãé
ãããå¯èœæ§ãããã®ã§å®éšçã«ææ¢.
(setq display-line-numbers-type nil) ; è¡çªå·è¡šç€º
;; less ã§ã®ãã¡ã€ã«é²èŠ§ã«æäœæ§ã䌌ãã mode.
;; view-mode 㯠emacs å
èµ. C-x C-r ã§ read-only-mode ã§ãã¡ã€ã«ãªãŒãã³
;; doom emacs ã ãš C-c t r ã§ read-only-mode ãèµ·åãã.
(add-hook! view-mode
(setq view-read-only t)
(define-key ctl-x-map "\C-q" 'view-mode) ;; assinged C-x C-q.
;; less ã£ãŒã.
(define-key view-mode-map (kbd "p") 'view-scroll-line-backward)
(define-key view-mode-map (kbd "n") 'view-scroll-line-forward)
;; default ã® e ã§ããããã©ïŒmule æä»£ã« v ã« bind ãããŠãã®ã§,
;; emacs ã§ã v ã« bind ããŠãã.
(define-key view-mode-map (kbd "v") 'read-only-mode))
;; EXWMã®å Žåsuspend-frameã§ãã³ã°ããã®ã¯ãã¡ãæªãã®ã§å°å°.
(use-package! frame
:bind
("C-z" . nil))
;; å®éš, ã©ããããŠã¹æäœã§Emacsã®å¶åŸ¡ãå¹ããªããªãããšãããã®ã§.
(setq make-pointer-invisible nil)
;; (general-def
;; :keymaps 'override
;; "C-u" 'universal-argument)AI
ããããããã®ã§è©Šããã€ããã®ã¯äžã€ã«ããããšãã.
chatgpt
https://github.com/emacs-openai/chatgpt
chatgpt-shell
chatgpt-shell-openai-keyã¯config.elã«èšèŒ. ChatGPT以å€ã§ãããã.
https://github.com/xenodium/chatgpt-shell
(use-package! chatgpt-shell
:commands chatgpt-shell
:init
(bind-key "C-c z b" 'chatgpt-shell)
:config
(setq chatgpt-shell-chatgpt-streaming t))Ellama
https://github.com/s-kostyaev/ellama/
(use-package! ellama
:bind ("C-c e" . ellama-transient-main-menu)
:init
;; setup key bindings
;; (setopt ellama-keymap-prefix "C-c e")
;; language you want ellama to translate to
(setopt ellama-language "Japanese")
;; could be llm-openai for example
(require 'llm-ollama)
(setopt ellama-provider
(make-llm-ollama
;; this model should be pulled to use it
;; value should be the same as you print in terminal during pull
:chat-model "llama3.2:latest"
:embedding-model "nomic-embed-text"
:default-chat-non-standard-params '(("num_ctx" . 8192))))
;; (setopt ellama-summarization-provider
;; (make-llm-ollama
;; :chat-model "qwen2.5:3b"
;; :embedding-model "nomic-embed-text"
;; :default-chat-non-standard-params '(("num_ctx" . 32768))))
;; (setopt ellama-coding-provider
;; (make-llm-ollama
;; :chat-model "qwen2.5-coder:3b"
;; :embedding-model "nomic-embed-text"
;; :default-chat-non-standard-params '(("num_ctx" . 32768))))
;; Predefined llm providers for interactive switching.
;; You shouldn't add ollama providers here - it can be selected interactively
;; without it. It is just example.
;; ellamaã§äœ¿ãããããã€ããŒãellama-provider-select ã§éžæã§ãã
(setopt ellama-providers
'(("zephyr" . (make-llm-ollama
:chat-model "zephyr:7b-beta-q6_K"
:embedding-model "zephyr:7b-beta-q6_K"))
("mistral" . (make-llm-ollama
:chat-model "mistral:7b-instruct-v0.2-q6_K"
:embedding-model "mistral:7b-instruct-v0.2-q6_K"))
("mixtral" . (make-llm-ollama
:chat-model "mixtral:8x7b-instruct-v0.1-q3_K_M-4k"
:embedding-model "mixtral:8x7b-instruct-v0.1-q3_K_M-4k"))))
;; Naming new sessions with llm
(setopt ellama-naming-provider
(make-llm-ollama
:chat-model "llama3.2:latest"
:embedding-model "nomic-embed-text"
:default-chat-non-standard-params '(("stop" . ("\n")))))
(setopt ellama-naming-scheme 'ellama-generate-name-by-llm)
;; Translation llm provider, 翻蚳ã§å©çšãããããã€ããŒ
(setopt ellama-translation-provider
(make-llm-ollama
:chat-model "elyza:jp8b"
:embedding-model "nomic-embed-text"
:default-chat-non-standard-params
'(("num_ctx" . 32768))))
;; customize display buffer behaviour
;; see ~(info "(elisp) Buffer Display Action Functions")~
(setopt ellama-chat-display-action-function #'display-buffer-full-frame)
(setopt ellama-instant-display-action-function #'display-buffer-at-bottom)
:config
;; send last message in chat buffer with C-c C-c
(add-hook 'org-ctrl-c-ctrl-c-hook #'ellama-chat-send-last-message))Claude code IDE
https://github.com/manzaltu/claude-code-ide.el
(use-package! claude-code-ide
:bind (("C-c z c" . claude-code-ide)
("C-c C-7" . claude-code-ide-menu)
("C-c C-r" . claude-code-ide-insert-at-mentioned))
:config
(setq claude-code-ide-window-side 'left)
(claude-code-ide-emacs-tools-setup))