Compare commits

...

8 Commits

Author SHA1 Message Date
Taryel Hlontsi c66fe03d31 Make startup a bit faster 2024-07-22 22:51:06 +02:00
Taryel Hlontsi 8774c6ffec Update init.el 2024-05-01 20:12:28 +02:00
Taryel Hlontsi e9f5463f26 Update snippets for Python, remove pyenv-mode 2024-04-22 18:41:54 +02:00
Taryel Hlontsi 214eb9560d Add functions and snippets for csharp 2024-03-28 14:01:33 +01:00
Taryel Hlontsi d6def578dd Add zig mode and snippets for C# 2024-01-20 10:04:12 +01:00
Taryel Hlontsi fc23dc235b Add ef-themes and disable lines numbers by default 2023-12-09 18:39:36 +01:00
Taryel Hlontsi cb197f8f1a Add compiled libraries for tree-sitter 2023-12-01 10:21:56 +01:00
Taryel Hlontsi 786808e94b Update init.el with vertico, marginalia, lsp for C# 2023-12-01 10:17:16 +01:00
28 changed files with 597 additions and 111 deletions

2
.gitignore vendored
View File

@ -3,3 +3,5 @@
!/.gitignore !/.gitignore
!/init.el !/init.el
!/snippets !/snippets
!/tree-sitter
!/profile-dotemacs.el

375
init.el
View File

@ -1,3 +1,47 @@
(setq gc-cons-threshold (* 100 1000 1000))
(defun my/dired-open-current-file-directory ()
"Open the current file's directory in Dired, if possible."
(interactive)
(if (buffer-file-name)
(dired-jump)
(call-interactively 'dired)))
(defun my/duplicate-line-or-region (arg)
(interactive "p")
(let (beg end (origin (point)))
(if (and mark-active (> (point) (mark)))
(exchange-point-and-mark))
(setq beg (line-beginning-position))
(if mark-active
(exchange-point-and-mark))
(setq end (line-end-position))
(let ((region (buffer-substring-no-properties beg end)))
(dotimes (i arg)
(goto-char end)
(newline)
(insert region)
(setq end (point)))
(goto-char (+ origin (* (length region) arg) arg)))))
(defun my/mhtml-forward (arg)
(interactive "P")
(pcase (get-text-property (point) 'mhtml-submode)
('nil (sgml-skip-tag-forward 1))
(submode (forward-sexp))))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(custom-safe-themes
'("b99e334a4019a2caa71e1d6445fc346c6f074a05fcbb989800ecbe54474ae1b0" default))
'(initial-frame-alist '((fullscreen . maximized)))
'(package-selected-packages
'(json-mode orderless prettier-js magit docker-compose-mode zig-mode treesit ef-themes dockerfile-mode dap-mode julia-ts-mode lsp-julia julia-mode marginalia vertico tide which-key use-package pyenv-mode flycheck exec-path-from-shell elpy doom-themes doom-modeline all-the-icons)))
(require 'package) (require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize) (package-initialize)
@ -10,7 +54,57 @@
:ensure t :ensure t
:config (which-key-mode)) :config (which-key-mode))
(set-face-attribute 'default nil :font "JetBrains Mono" :height 130) (use-package vertico
:ensure t
:config
(add-hook 'rfn-eshadow-update-overlay-hook 'vertico-directory-tidy))
(use-package marginalia
:ensure t)
(require 'treesit)
(use-package docker-compose-mode
:ensure t)
(use-package zig-mode
:ensure t)
(use-package dockerfile-mode
:ensure t
:defer t
:mode ("Dockerfile\\'" "\\.dockerfile\\'")
:commands dockerfile-mode)
(use-package flycheck
:ensure t)
(use-package dired
:config
(put 'dired-find-alternate-file 'disabled nil)
(add-hook 'dired-mode-hook
(lambda ()
(define-key dired-mode-map (kbd "RET")
(lambda () (interactive) (find-alternate-file (dired-get-file-for-visit))))))
(setq delete-by-moving-to-trash t)
(setq dired-dwim-target t))
(vertico-mode 1)
(marginalia-mode 1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
;;"M+1Code Nerd Font"
;;"Lekton Nerd Font"
(set-face-attribute 'default nil :font "Lekton" :height 120)
;;(set-fontset-font t nil (font-spec :size 20 :name "VictorMono Nerd Font Mono"))
;;(set-face-attribute 'default nil :font "VictorMono Nerd Font Mono" :height 110)
;;(setq x-antialiasing-factor nil)
(set-default-coding-systems 'utf-8) (set-default-coding-systems 'utf-8)
@ -24,66 +118,57 @@
(setq-default indent-tabs-mode nil) (setq-default indent-tabs-mode nil)
;;(setq ido-everywhere t)
;;(setq ido-enable-flex-matching t)
(ido-mode)
(setq show-paren-delay 0) (setq show-paren-delay 0)
(setq native-comp-async-report-warnings-errors 'silent)
(delete-selection-mode 1) (delete-selection-mode 1)
(show-paren-mode 1) (show-paren-mode 1)
(require 'paren)
(set-face-background 'show-paren-match (face-background 'default))
(set-face-foreground 'show-paren-match "#def")
(set-face-attribute 'show-paren-match nil :weight 'extra-bold)
(add-hook 'before-save-hook 'whitespace-cleanup) (add-hook 'before-save-hook 'whitespace-cleanup)
(add-hook 'prog-mode-hook 'flycheck-mode)
(setq-default frame-title-format
'(:eval
(format "%s"
(cond
(buffer-file-truename buffer-file-truename )
(dired-directory (concat "[ " dired-directory " ]"))
(t "GNU Emacs 👾")))))
(use-package elpy (use-package elpy
:ensure t) :ensure t
:defer t
:commands (elpy-enable)
:init
(add-hook 'python-mode-hook 'elpy-enable)
:config
(setq elpy-modules (delq 'elpy-module-flymake elpy-modules)))
(use-package flycheck ;; (use-package exec-path-from-shell
:ensure t) ;; :ensure t)
;; (exec-path-from-shell-copy-env "PATH")
(use-package exec-path-from-shell ;; black or standard (flake8 ?) code formatter:
:ensure t) ;; (add-hook 'elpy-mode-hook (lambda ()
;; (add-hook 'before-save-hook
(elpy-enable) ;; 'elpy-format-code nil t)))
(exec-path-from-shell-copy-env "PATH")
(when (require 'flycheck nil t)
(setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
(add-hook 'elpy-mode-hook 'flycheck-mode))
(add-hook 'elpy-mode-hook (lambda () (add-hook 'elpy-mode-hook (lambda ()
(add-hook 'before-save-hook (add-hook 'before-save-hook
'elpy-format-code nil t))) 'elpy-black-fix-code nil t)))
(add-hook 'python-mode-hook (add-hook 'python-mode-hook
(lambda () (setq gud-pdb-command-name "python3 -m pdb"))) (lambda () (setq gud-pdb-command-name "python3 -m pdb")))
(use-package pyenv-mode
:ensure t)
(pyenv-mode)
(use-package yasnippet (use-package yasnippet
:config :config
(setq yas-snippet-dirs '("~/.emacs.d/snippets")) (setq yas-snippet-dirs '("~/.emacs.d/snippets"))
(yas-reload-all) (yas-reload-all)
(add-hook 'prog-mode-hook 'yas-minor-mode)) (add-hook 'prog-mode-hook 'yas-minor-mode))
;; setup dired
(put 'dired-find-alternate-file 'disabled nil)
(add-hook 'dired-mode-hook
(lambda ()
(define-key dired-mode-map (kbd "RET")
(lambda () (interactive) (find-alternate-file (dired-get-file-for-visit))))))
;; my keybindings ;; my keybindings
@ -91,6 +176,10 @@
(interactive) (interactive)
(revert-buffer :ignore-auto :noconfirm)) (revert-buffer :ignore-auto :noconfirm))
(defun kill-buffer-no-confirm ()
(interactive)
(kill-buffer nil))
(defun list-buffers-please () (defun list-buffers-please ()
(interactive) (interactive)
(list-buffers) (list-buffers)
@ -103,20 +192,30 @@
(mark-whole-buffer) (mark-whole-buffer)
(json-pretty-print (region-beginning) (region-end)))) (json-pretty-print (region-beginning) (region-end))))
(global-unset-key (kbd "C-d"))
(global-unset-key (kbd "C-z")) (global-unset-key (kbd "C-z"))
(global-unset-key (kbd "C-v")) (global-unset-key (kbd "C-v"))
(global-unset-key (kbd "C-f")) (global-unset-key (kbd "C-f"))
(global-unset-key (kbd "C-b")) (global-unset-key (kbd "C-b"))
(global-unset-key (kbd "C-n")) (global-unset-key (kbd "C-n"))
(global-unset-key (kbd "C-l"))
(global-unset-key (kbd "C-p")) (global-unset-key (kbd "C-p"))
(global-unset-key (kbd "M-v")) (global-unset-key (kbd "M-v"))
(global-set-key (kbd "<f1>") 'list-buffers-please) (global-set-key (kbd "<f1>") 'find-file)
(global-set-key (kbd "<f5>") 'revert-buffer-no-confirm) (global-set-key (kbd "<f5>") 'revert-buffer-no-confirm)
(global-set-key (kbd "<f12>") 'kill-buffer-no-confirm)
(global-set-key (kbd "C-b") 'list-buffers-please)
(global-set-key (kbd "C-n") 'dired-create-empty-file)
(global-set-key (kbd "C-d") 'my/duplicate-line-or-region)
(global-set-key (kbd "C-x d") 'my/dired-open-current-file-directory)
(add-hook 'elpy-mode-hook (add-hook 'elpy-mode-hook
(lambda () (local-set-key [f2] 'elpy-refactor-rename))) (lambda () (local-set-key [f2] 'elpy-refactor-rename)))
(add-hook 'elpy-mode-hook
(lambda () (local-set-key [f7] 'elpy-goto-definition)))
(add-hook 'typescript-mode-hook (add-hook 'typescript-mode-hook
(lambda () (local-set-key [f2] 'tide-rename-symbol))) (lambda () (local-set-key [f2] 'tide-rename-symbol)))
@ -129,28 +228,29 @@
(add-hook 'mhtml-mode-hook (add-hook 'mhtml-mode-hook
(lambda () (local-set-key (kbd "C-f") 'prettier-js))) (lambda () (local-set-key (kbd "C-f") 'prettier-js)))
(add-hook 'typescript-mode-hook (add-hook 'typescript-ts-mode-hook
(lambda () (local-set-key (kbd "C-f") 'prettier-js))) (lambda () (local-set-key (kbd "C-f") 'prettier-js)))
(add-hook 'js-mode-hook (add-hook 'js-mode-hook
(lambda () (local-set-key (kbd "C-f") 'make-json-great-again))) (lambda () (local-set-key (kbd "C-f") 'make-json-great-again)))
(add-hook 'lsp-mode-hook
(lambda () (local-set-key (kbd "C-f") 'lsp-format-buffer)))
;; (add-hook 'prog-mode-hook ;; (add-hook 'prog-mode-hook
;; (lambda () (local-set-key (kbd "C-;") 'comment-or-uncomment-region))) ;; (lambda () (local-set-key (kbd "C-;") 'comment-or-uncomment-region)))
;; (define-key map (kbd "M-.") 'elpy-goto-assignment
;; (define-key map (kbd "C-x 4 M-.") 'elpy-goto-assignment-other-window)
;; stuff for folding html ;; stuff for folding html
(defun mhtml-forward (arg)
(interactive "P")
(pcase (get-text-property (point) 'mhtml-submode)
('nil (sgml-skip-tag-forward 1))
(submode (forward-sexp))))
(add-to-list 'hs-special-modes-alist (add-to-list 'hs-special-modes-alist
'(mhtml-mode '(mhtml-mode
"{\\|<[^/>]+?" "{\\|<[^/>]+?"
"}\\|</[^/>]*[^/]>" "}\\|</[^/>]*[^/]>"
"<!--" "<!--"
mhtml-forward my/mhtml-forward
nil)) nil))
(add-hook 'prog-mode-hook 'hs-minor-mode) (add-hook 'prog-mode-hook 'hs-minor-mode)
@ -158,8 +258,8 @@
(require 'display-line-numbers) (require 'display-line-numbers)
(defcustom display-line-numbers-exempt-modes (defcustom display-line-numbers-exempt-modes
'(gud-mode inferior-python-mode dired-mode vterm-mode eshell-mode shell-mode term-mode ansi-tern-mode) '(gud-mode inferior-python-mode dired-mode vterm-mode eshell-mode shell-mode term-mode ansi-tern-mode treemacs-mode)
"Major modes on which to disable line numbers" "Major modes on which to disable line numbers."
:group 'display-line-numbers :group 'display-line-numbers
:type 'list :type 'list
:version "green") :version "green")
@ -171,65 +271,67 @@ Exempt major modes are defined in `display-line-numbers-exempt-modes'."
(member major-mode display-line-numbers-exempt-modes)) (member major-mode display-line-numbers-exempt-modes))
(display-line-numbers-mode))) (display-line-numbers-mode)))
(global-display-line-numbers-mode) ;; (global-display-line-numbers-mode)
;; theming starts here: ;; theming starts here:
;; (use-package doom-themes
;; :ensure t
;; :config
;; (load-theme 'doom-monokai-pro))
(use-package modus-themes (use-package modus-themes
:ensure t) :ensure t)
(load-theme 'modus-operandi-tinted t) (modus-themes-select 'modus-operandi-tinted)
(setq modus-themes-to-toggle '(modus-operandi-tinted modus-vivendi-tinted))
;;(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/") (use-package ef-themes
:ensure t)
;;(use-package doom-themes (setq ef-themes-to-toggle '(ef-day ef-autumn))
;; :ensure t
;; :config
;; (load-theme 'doom-monokai-pro t))
;; (use-package zenburn-theme (setq ef-themes-headings ; read the manual's entry or the doc string
;; :ensure t) '((0 . (variable-pitch light 1.9))
(1 . (variable-pitch light 1.8))
(2 . (variable-pitch regular 1.7))
(3 . (variable-pitch regular 1.6))
(4 . (variable-pitch regular 1.5))
(5 . (variable-pitch 1.4)) ; absence of weight means `bold'
(6 . (variable-pitch 1.3))
(7 . (variable-pitch 1.2))
(t . (variable-pitch 1.1))))
;; (load-theme 'zenburn t) (setq ef-themes-mixed-fonts t
ef-themes-variable-pitch-ui t)
;; (use-package birds-of-paradise-plus-theme ;; (mapc #'disable-theme custom-enabled-themes)
;; :ensure t)
;; (load-theme 'birds-of-paradise-plus t) ;; (ef-themes-select 'ef-maris-light)
;; (use-package spacemacs-theme ;; theming stops here
;; :defer t
;; :init (load-theme 'spacemacs-light t))
;; (use-package poet-theme
;; :ensure t)
;; (load-theme 'poet t)
;; ;;(set-face-attribute 'default nil :family "DejaVu Sans Mono" :height 130)
;; (set-face-attribute 'fixed-pitch nil :family "DejaVu Sans Mono")
;; (set-face-attribute 'variable-pitch nil :family "IBM Plex Serif")
;; (add-to-list
;; 'default-frame-alist'(ns-transparent-titlebar . t))
;; (add-to-list
;; 'default-frame-alist'(ns-appearance . light))
;; (add-hook 'text-mode-hook
;; (lambda ()
;; (variable-pitch-mode 1)))
(use-package magit (use-package magit
:ensure t) :ensure t
:defer t
:bind (("C-x g" . magit-status))
:commands (magit-status magit-dispatch magit-file-dispatch)
:init
(setq magit-auto-revert-mode nil))
(use-package doom-modeline (use-package doom-modeline
:ensure t :ensure t
:hook (after-init . doom-modeline-mode)) :hook (after-init . doom-modeline-mode))
(use-package all-the-icons ;; M-x nerd-icons-install-fonts
:if (display-graphic-p)) (use-package nerd-icons
:ensure t)
;; prettier setup goes here ;; prettier setup goes here
(use-package prettier-js (use-package prettier-js
:ensure t) :ensure t)
;;________________________________________________________ ;; __________________________________________________
(use-package orderless (use-package orderless
:ensure t :ensure t
@ -237,46 +339,99 @@ Exempt major modes are defined in `display-line-numbers-exempt-modes'."
(completion-styles '(orderless basic)) (completion-styles '(orderless basic))
(completion-category-overrides '((file (styles basic partial-completion))))) (completion-category-overrides '((file (styles basic partial-completion)))))
(use-package json-mode :ensure t) (use-package json-mode
:ensure t
:mode "\\.json\\'"
:defer t
:commands json-mode)
;; __________________________________________________ ;; __________________________________________________
;; typescript setup starts here
;; typescript setup starts here (TO REVIEW!)
(defun setup-tide-mode () (defun setup-tide-mode ()
(interactive) (interactive)
(tide-setup) (tide-setup)
(flycheck-mode +1) (flycheck-mode +1)
(setq flycheck-check-syntax-automatically '(save mode-enabled)) (setq flycheck-check-syntax-automatically '(save mode-enabled))
(eldoc-mode +1) (eldoc-mode +1)
(tide-hl-identifier-mode +1) (tide-hl-identifier-mode +1))
;; company is an optional dependency. You have to
;; install it separately via package-install
;; `M-x package-install [ret] company`
;; (company-mode +1)
)
;; aligns annotation to the right hand side
;; (setq company-tooltip-align-annotations t)
;; formats the buffer before saving
;; (add-hook 'before-save-hook 'tide-format-before-save)
(add-hook 'typescript-mode-hook #'setup-tide-mode)
(use-package tide (use-package tide
:ensure t :ensure t
:after (typescript-mode company flycheck) :after (flycheck)
:hook ((typescript-mode . tide-setup) :hook ((typescript-ts-mode . setup-tide-mode)
(typescript-mode . tide-hl-identifier-mode) (tsx-ts-mode . setup-tide-mode)
(typescript-ts-mode . tide-hl-identifier-mode)
(before-save . tide-format-before-save))) (before-save . tide-format-before-save)))
(custom-set-variables
;; custom-set-variables was added by Custom. (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode))
;; If you edit it by hand, you could mess it up, so be careful. (add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode))
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right. ;;----------------------------------------
'(package-selected-packages ;; dotnet starts here
'(tide which-key use-package pyenv-mode flycheck exec-path-from-shell elpy doom-themes doom-modeline all-the-icons))) (use-package lsp-mode
:commands (lsp lsp-deferred))
(use-package dap-mode
:ensure t
;;:custom (lsp-enable-dap-auto-configure nil)
:commands dap-debug)
(use-package dap-netcore
:after dap-mode
:defer t
:commands (dap-netcore-setup)
:init
(add-hook 'csharp-mode-hook
(lambda ()
(require 'dap-netcore)
(dap-netcore-setup))))
;;(setq dap-auto-configure-features '(sessions locals controls tooltip))
(defun setup-lsp-keys ()
(interactive)
(local-set-key [f7] 'lsp-find-implementation)
(local-set-key [f2] 'lsp-rename))
(add-hook 'lsp-mode-hook
(lambda () (setup-lsp-keys)))
(defun setup-dotnet ()
(interactive)
(exec-path-from-shell-copy-env "DOTNET_ROOT")
(lsp-deferred))
(add-to-list 'auto-mode-alist '("\\.csproj\\'" . xml-mode))
(add-hook 'csharp-mode-hook
(lambda () (setup-dotnet)))
(defun find-project-root ()
(interactive)
(if (ignore-errors (eproject-root))
(eproject-root)
(or (find-git-repo (buffer-file-name)) (file-name-directory (buffer-file-name)))))
(defun find-git-repo (dir)
(if (string= "/" dir)
nil
(if (file-exists-p (expand-file-name "../.git/" dir))
dir
(find-git-repo (expand-file-name "../" dir)))))
(defun file-path-to-namespace ()
(interactive)
(let (
(root (find-project-root))
(base (file-name-nondirectory buffer-file-name))
)
(substring (replace-regexp-in-string "/" "\." (substring buffer-file-name (length root) (* -1 (length base))) t t) 0 -1)
)
)
(custom-set-faces (custom-set-faces
;; custom-set-faces was added by Custom. ;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful. ;; If you edit it by hand, you could mess it up, so be careful.

200
profile-dotemacs.el Normal file
View File

@ -0,0 +1,200 @@
;;; profile-dotemacs.el --- Profile your Emacs init file
;; Copyright (C) 2010, 2012 David Engster
;; Author: David Engster <dengste@eml.cc>
;; This file is NOT part of GNU Emacs.
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License
;; as published by the Free Software Foundation; either version 2
;; of the License, or (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; This is to easily profile your Emacs init file (or any other
;; script-like Emacs Lisp file, for that matter).
;; It will go over all sexp's (balanced expressions) in the file and
;; run them through `benchmark-run'. It will then show the file with
;; overlays applied in a way that let you easily find out which sexp's
;; take the most time. Since time is relative, it's not the absolute
;; value that counts but the percentage of the total running time.
;;
;; * All other sexp's with a percentage greater than
;; `profile-dotemacs-low-percentage' will be preceded by a
;; highlighted line, showing the results from `benchmark-run'.
;; Also, the more 'reddish' the background of the sexp, the more
;; time it needs.
;; * All other sexp's will be grayed out to indicate that their
;; running time is miniscule. You can still see the benchmark
;; results in the minibuffer by hovering over the sexp with the
;; mouse.
;; You can only benchmark full sexp's, so if you wrapped large parts
;; of your init file in some conditional clause, you'll have to remove
;; that for getting finer granularity.
;;; Usage:
;; Start emacs as follows:
;;
;; emacs -Q -l <PATH>/profile-dotemacs.el -f profile-dotemacs
;;
;; with <PATH> being the path to where this file resides.
;;; Caveats (thanks to Raffaele Ricciardi for reporting those):
;; - The usual `--debug-init' for debugging your init file won't work
;; with profile-dotemacs, so you'll have to call
;; `toggle-debug-on-error', either on the commandline or at the
;; beginning of your init file.
;; - `load-file-name' is nil when the init file is being loaded
;; by the profiler. This might matter if you perform the
;; bulk of initializations in a different file.
;; - Starting external shells like IELM or eshell in your init file
;; might mess with overlay creation, so this must not be done.
;;; Download:
;; You can always get the latest version from
;; http://randomsample.de/profile-dotemacs.el
;;; Code:
(require 'thingatpt)
(require 'benchmark)
;; User variables
(defvar profile-dotemacs-file "~/.emacs.d/init.el"
"File to be profiled.")
(defvar profile-dotemacs-low-percentage 3
"Percentage which should be considered low.
All sexp's with a running time below this percentage will be
grayed out.")
(defface profile-dotemacs-time-face
'((((background dark)) (:background "OrangeRed1"))
(t (:background "red3")))
"Background color to indicate percentage of total time.")
(defface profile-dotemacs-low-percentage-face
'((((background dark)) (:foreground "gray25"))
(t (:foreground "gray75")))
"Face for sexps below `profile-dotemacs-low-percentage'.")
(defface profile-dotemacs-highlight-face
'((((background dark)) (:background "blue"))
(t (:background "yellow")))
"Highlight face for benchmark results.")
;; Main function
(defun profile-dotemacs ()
"Load `profile-dotemacs-file' and benchmark its sexps."
(interactive)
(with-current-buffer (find-file-noselect profile-dotemacs-file t)
(setq buffer-read-only t) ;; just to be sure
(goto-char (point-min))
(let (start end results)
(while
(< (point)
(setq end (progn
(forward-sexp 1)
(point))))
(forward-sexp -1)
(setq start (point))
(add-to-list
'results
`(,start ,end
,(benchmark-run
(eval (sexp-at-point)))))
(goto-char end))
(profile-dotemacs-show-results results)
(switch-to-buffer (current-buffer)))))
;; Helper functions
(defun profile-dotemacs-show-results (results)
"Show timings from RESULTS in current buffer."
(let ((totaltime (profile-dotemacs-totaltime results))
current percentage ov)
(while results
(let* ((current (pop results))
(ov (make-overlay (car current) (cadr current)))
(current (car (last current)))
(percentage (/ (+ (car current) (nth 2 current))
totaltime))
col benchstr lowface)
(setq col
(profile-dotemacs-percentage-color
percentage
(face-background 'default)
(face-background 'profile-dotemacs-time-face)))
(setq percentage (round (* 100 percentage)))
(setq benchstr (profile-dotemacs-make-benchstr current))
(overlay-put ov 'help-echo benchstr)
(if (and (numberp profile-dotemacs-low-percentage)
(< percentage profile-dotemacs-low-percentage))
(overlay-put ov 'face 'profile-dotemacs-low-percentage-face)
(overlay-put ov 'before-string
(propertize benchstr
'face 'profile-dotemacs-highlight-face))
(overlay-put ov 'face
`(:background ,col)))))
(setq ov (make-overlay (1- (point-max)) (point-max)))
(overlay-put ov 'after-string
(propertize
(format "\n-----------------\nTotal time: %.2fs\n"
totaltime)
'face 'profile-dotemacs-highlight-face))))
(defun profile-dotemacs-totaltime (results)
"Calculate total time of RESULTS."
(let ((totaltime 0))
(mapc (lambda (x)
(let ((cur (car (last x))))
(setq totaltime (+ totaltime (car cur) (nth 2 cur)))))
results)
totaltime))
(defun profile-dotemacs-percentage-color (percent col-begin col-end)
"Calculate color according to PERCENT between COL-BEGIN and COL-END."
(let* ((col1 (color-values col-begin))
(col2 (color-values col-end))
(col
(mapcar (lambda (c)
(round
(+ (* (- 1 percent) (nth c col1))
(* percent (nth c col2)))))
'(0 1 2))))
(format "RGB:%04x/%04x/%04x"
(car col)
(nth 1 col)
(nth 2 col))))
(defun profile-dotemacs-make-benchstr (timings)
"Create descriptive benchmark string from TIMINGS."
(format
(concat
"<Percentage: %d ; "
"Time: %.2f ; "
"Number of GC: %d ; "
"Time for GC: %.2f>\n")
percentage
(car timings) (nth 1 timings) (nth 2 timings)))
;; profile-dotemacs.el ends here

View File

@ -0,0 +1,14 @@
# -*- mode: csharp -*-
# name: class
# key: cl
# --
namespace `(file-path-to-namespace)`;
public sealed class `(file-name-nondirectory (file-name-sans-extension (buffer-file-name)))`
{
$0
public `(file-name-nondirectory (file-name-sans-extension (buffer-file-name)))`()
{
}
}

View File

@ -0,0 +1,8 @@
# -*- mode: csharp -*-
# name: ctor
# key: ctor
# --
public `(file-name-nondirectory (file-name-sans-extension (buffer-file-name)))`()
{
$0
}

View File

@ -0,0 +1,8 @@
# -*- mode: csharp -*-
# name: foreach
# key: f
# --
foreach (var ${1:Name} in ${2:Collection})
{
$0
}

View File

@ -0,0 +1,8 @@
# -*- mode: csharp -*-
# name: mpriv
# key: mr
# --
private ${1:void} ${2:Method}($3)
{
$0
}

View File

@ -0,0 +1,8 @@
# -*- mode: csharp -*-
# name: mpub
# key: mp
# --
public ${1:void} ${2:Method}($3)
{
$0
}

View File

@ -0,0 +1,8 @@
# -*- mode: csharp -*-
# name: mpubstatv
# key: mpsv
# --
public static void ${1:Method}($2)
{
$0
}

View File

@ -0,0 +1,5 @@
# -*- mode: csharp -*-
# name: print
# key: p
# --
System.Console.WriteLine($"{$0}");

View File

@ -0,0 +1,5 @@
# -*- mode: csharp -*-
# name: prop
# key: prop
# --
public ${1:string} ${2:PropertyName} { get; set; }

View File

@ -0,0 +1,7 @@
# -*- mode: csharp -*-
# name: summary
# key: ///
# --
/// <summary>
/// $0
/// </summary>

12
snippets/csharp-mode/try Normal file
View File

@ -0,0 +1,12 @@
# -*- mode: csharp -*-
# name: try
# key: t
# --
try
{
$0
}
catch (${1:Exception} ${2:ex})
{
${3:System.Console.WriteLine(ex.Message);}
}

View File

@ -0,0 +1,9 @@
# -*- mode: python -*-
# name: file-read
# key: fr
# --
with open($0, 'r') as file:
try:
data = json.load(file)
except (json.JSONDecodeError):
data = {}

View File

@ -0,0 +1,7 @@
# -*- mode: python -*-
# name: file-write
# key: fw
# --
f_name = ${1:name}
with open(f'~/Documents/$0/{f_name}.txt', 'w') as file:
file.write(${2:content})

View File

@ -0,0 +1,10 @@
# -*- mode: python -*-
# name: json-dump
# key: jd
# --
import uuid
import json
f_name = str(uuid.uuid4())
with open(f'~/Documents/$0/{f_name}.json', 'w') as file:
file.write(json.dumps(${1:content}, indent=2))

View File

@ -0,0 +1,7 @@
# -*- mode: python -*-
# name: print-version
# key: pi
# --
import sys
print(sys.version)

View File

@ -0,0 +1,13 @@
# -*- mode: python -*-
# name: script
# key: s
# --
#!/usr/bin/env python3
def main():
pass$0
if __name__ == "__main__":
main()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
tree-sitter/libtree-sitter-tsx.so Executable file

Binary file not shown.

Binary file not shown.

BIN
tree-sitter/libtree-sitter-zig.so Executable file

Binary file not shown.