Emacs init
This commit is contained in:
commit
ed6632c47a
|
@ -0,0 +1,240 @@
|
||||||
|
;; ----------------------------
|
||||||
|
;; Podstawowa konfiguracja pakietów i MELPA
|
||||||
|
;; ----------------------------
|
||||||
|
(require 'package)
|
||||||
|
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
||||||
|
("gnu" . "https://elpa.gnu.org/packages/")))
|
||||||
|
(package-initialize)
|
||||||
|
(unless package-archive-contents
|
||||||
|
(package-refresh-contents))
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Instalacja i konfiguracja LSP dla Python
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package lsp-mode
|
||||||
|
:ensure t
|
||||||
|
:hook ((python-mode . lsp)) ;; Automatyczne uruchamianie LSP w Python-mode
|
||||||
|
:commands lsp
|
||||||
|
:config
|
||||||
|
;; Ustawienia LSP
|
||||||
|
(setq lsp-headerline-breadcrumb-enable t) ;; Breadcrumb w nagłówku
|
||||||
|
(setq lsp-completion-provider :capf) ;; Włączenie podpowiedzi capf
|
||||||
|
(setq lsp-enable-snippet t) ;; Włączenie snippetów w podpowiedziach
|
||||||
|
(setq lsp-pyright-auto-import-completions t) ;; Automatyczne podpowiedzi importów
|
||||||
|
(setq lsp-pyright-diagnostic-mode "workspace") ;; Diagnostyka w kontekście projektu
|
||||||
|
(setq lsp-pylsp-plugins-pyflakes-enabled nil) ;; Wyłącz pyflakes
|
||||||
|
(setq lsp-pylsp-plugins-flake8-enabled t) ;; Użyj flake8 zamiast pyflakes
|
||||||
|
(setq lsp-pylsp-plugins-flake8-ignore ["F405" "F403" "E231" "E303" "E302" "E305" "E501"]) ;; Ignorowanie błędów w flake8
|
||||||
|
|
||||||
|
;; Ścieżka do interpretera Python
|
||||||
|
(setq lsp-pyright-python-executable-cmd "python3"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(use-package lsp-ui
|
||||||
|
:ensure t
|
||||||
|
:hook (lsp-mode . lsp-ui-mode)
|
||||||
|
:config
|
||||||
|
;; Ustawienia lsp-ui
|
||||||
|
(setq lsp-ui-doc-enable t) ;; Dokumentacja w wyskakującym oknie
|
||||||
|
(setq lsp-ui-doc-position 'at-point)
|
||||||
|
(setq lsp-ui-sideline-enable t) ;; Diagnostyka w wierszu kodu
|
||||||
|
(setq lsp-ui-sideline-show-hover t) ;; Podpowiedzi w wierszu
|
||||||
|
(setq lsp-ui-sideline-show-code-actions t)) ;; Akcje kodu
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Flycheck - konfiguracja diagnostyki
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package flycheck
|
||||||
|
:ensure t
|
||||||
|
:hook (lsp-mode . flycheck-mode)
|
||||||
|
:config
|
||||||
|
;; Priorytet diagnostyki LSP
|
||||||
|
(setq flycheck-check-syntax-automatically '(save mode-enabled))
|
||||||
|
(setq flycheck-highlighting-mode 'lines)
|
||||||
|
(setq flycheck-indication-mode 'right-fringe))
|
||||||
|
|
||||||
|
(use-package lsp-ui-flycheck
|
||||||
|
:after (lsp-mode flycheck)
|
||||||
|
:ensure nil)
|
||||||
|
|
||||||
|
|
||||||
|
;; Obsługa wirtualnych środowisk Python (pyvenv)
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package pyvenv
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
;; Automatyczna aktywacja środowiska venv w katalogu projektu
|
||||||
|
(defun my-auto-activate-venv ()
|
||||||
|
"Automatycznie aktywuj venv w bieżącym katalogu projektu."
|
||||||
|
(let ((venv-path (locate-dominating-file default-directory "venv")))
|
||||||
|
(when venv-path
|
||||||
|
(pyvenv-activate (expand-file-name "venv" venv-path))
|
||||||
|
(setq lsp-pyright-python-executable-cmd (expand-file-name "bin/python" venv-path)))))
|
||||||
|
(add-hook 'python-mode-hook #'my-auto-activate-venv)
|
||||||
|
|
||||||
|
;; Dodanie informacji o aktywnym venv do modeline
|
||||||
|
(defun my-get-current-venv ()
|
||||||
|
"Zwraca nazwę aktywnego środowiska wirtualnego."
|
||||||
|
(if (and (boundp 'pyvenv-virtual-env) pyvenv-virtual-env)
|
||||||
|
(propertize (concat "venv: " (file-name-nondirectory (directory-file-name pyvenv-virtual-env)))
|
||||||
|
'face '(:foreground "green"))
|
||||||
|
"No venv"))
|
||||||
|
|
||||||
|
(setq-default mode-line-format
|
||||||
|
(append mode-line-format
|
||||||
|
'((:eval (my-get-current-venv))))))
|
||||||
|
|
||||||
|
;; Skróty klawiszowe dla pyvenv
|
||||||
|
(global-set-key (kbd "C-c v a") 'pyvenv-activate) ;; Aktywuj środowisko
|
||||||
|
(global-set-key (kbd "C-c v d") 'pyvenv-deactivate) ;; Dezaktywuj środowisko
|
||||||
|
(global-set-key (kbd "C-c v w") 'pyvenv-workon) ;; Przełącz środowisko (workon)
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; System podpowiedzi: Company
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package company
|
||||||
|
:ensure t
|
||||||
|
:hook (lsp-mode . company-mode)
|
||||||
|
:config
|
||||||
|
(setq company-idle-delay 0.2) ;; Opóźnienie podpowiedzi
|
||||||
|
(setq company-minimum-prefix-length 1) ;; Minimalna długość prefiksu dla podpowiedzi
|
||||||
|
(setq company-selection-wrap-around t)) ;; Zawijanie w menu podpowiedzi
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Magit i zarządzanie projektami
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package magit
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(setq magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))
|
||||||
|
|
||||||
|
(use-package treemacs
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(global-set-key (kbd "C-c t") 'treemacs) ;; Skrót do otwierania Treemacs
|
||||||
|
(setq treemacs-position 'right) ;; Pozycja drzewa po prawej stronie
|
||||||
|
(setq treemacs-follow-mode t) ;; Automatyczne śledzenie otwartego pliku
|
||||||
|
(setq treemacs-filewatch-mode t) ;; Automatyczne odświeżanie
|
||||||
|
(setq treemacs-git-mode 'deferred)) ;; Obsługa Git w Treemacs
|
||||||
|
|
||||||
|
(use-package lsp-treemacs
|
||||||
|
:ensure t
|
||||||
|
:after (lsp-mode treemacs)
|
||||||
|
:config
|
||||||
|
(lsp-treemacs-sync-mode 1))
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Ulepszenia interfejsu: which-key
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package which-key
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(which-key-mode)
|
||||||
|
(setq which-key-idle-delay 0.5) ;; Opóźnienie wyświetlania podpowiedzi
|
||||||
|
(setq which-key-idle-secondary-delay 0.1))
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Konfiguracja Evil i lidera (leader key)
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package evil
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(evil-mode 1))
|
||||||
|
|
||||||
|
(use-package evil-leader
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(global-evil-leader-mode)
|
||||||
|
(evil-leader/set-leader "<SPC>")
|
||||||
|
(evil-leader/set-key
|
||||||
|
"g g" 'magit-status
|
||||||
|
"f f" 'find-file
|
||||||
|
"b b" 'switch-to-buffer
|
||||||
|
"b m" 'buffer-menu
|
||||||
|
"t t" 'treemacs
|
||||||
|
"t a" 'treemacs-add-project-to-workspace
|
||||||
|
"t r" 'treemacs-remove-project-from-workspace
|
||||||
|
"t c" 'treemacs-copy-file
|
||||||
|
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Dodanie obsługi komentowania za pomocą "gc"
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package evil-commentary
|
||||||
|
:ensure t
|
||||||
|
:after evil
|
||||||
|
:config
|
||||||
|
(evil-commentary-mode))
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Wygląd: Motyw i minimalistyczny interfejs
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package gruvbox-theme
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(load-theme 'gruvbox-dark-medium t))
|
||||||
|
|
||||||
|
(tool-bar-mode -1)
|
||||||
|
(menu-bar-mode -1)
|
||||||
|
(scroll-bar-mode -1)
|
||||||
|
(setq inhibit-startup-message t)
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Formatowanie kodu z Black
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package blacken
|
||||||
|
:ensure t
|
||||||
|
:hook (python-mode . blacken-mode)
|
||||||
|
:config
|
||||||
|
(setq blacken-line-length 88))
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Podsumowanie i test
|
||||||
|
;; ----------------------------
|
||||||
|
(recentf-mode 1)
|
||||||
|
(setq recentf-max-menu-items 25) ;; Maksymalna liczba plików na liście
|
||||||
|
(global-set-key (kbd "C-c r") 'recentf-open-files) ;; Skrót do ostatnich plików
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Other keys
|
||||||
|
;; ----------------------------
|
||||||
|
(global-set-key (kbd "C-c e") 'eshell)
|
||||||
|
(global-set-key (kbd "C-c d") 'flymake-show-buffer-diagnostics)
|
||||||
|
|
||||||
|
(global-set-key (kbd "C-c j s") 'jupyter-run-server-repl) ;; Połącz się z serwerem
|
||||||
|
(global-set-key (kbd "C-c j a") 'jupyter-repl-associate-buffer) ;; Powiąż bufor z REPL
|
||||||
|
(global-set-key (kbd "C-c j b") 'jupyter-eval-buffer) ;; Wykonaj cały bufor
|
||||||
|
|
||||||
|
(setq initial-scratch-message (concat ";; Aby otworzyć org daj na C-c o\n"
|
||||||
|
";; Aby otworzyć ostatnie pliki daj na C-c r\n"
|
||||||
|
";; Aby otworzyć treemacs daj na C-c t \n"
|
||||||
|
";; Aktywacja środowiska pyenv C-c v a \n"
|
||||||
|
";; Eshell C-c e \n"
|
||||||
|
";; Pokaż błędy flymake C-c d \n"
|
||||||
|
"\n"
|
||||||
|
";;Jupyter \n"
|
||||||
|
";;Wykonaj Połącz się z serwerem C-c j s \n"
|
||||||
|
";;Powiazanie bufora REPL C-c j a \n"
|
||||||
|
";;Wykonaj cały bufor C-c j b \n"
|
||||||
|
";;Wykkonaj region C-c C-c \n"))
|
||||||
|
(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.
|
||||||
|
'(package-selected-packages
|
||||||
|
'(evil-commentary yasnippet which-key vterm request pyvenv polymode neotree magit lsp-ui lsp-treemacs jupyter highlight-indentation gruvbox-theme evil-org evil-leader deferred company anaphora)))
|
||||||
|
(custom-set-faces
|
||||||
|
;; custom-set-faces 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.
|
||||||
|
)
|
|
@ -0,0 +1,449 @@
|
||||||
|
;; ----------------------------
|
||||||
|
;; Podstawowa konfiguracja pakietów i MELPA
|
||||||
|
;; ----------------------------
|
||||||
|
|
||||||
|
(require 'package)
|
||||||
|
|
||||||
|
;; Dodaj repozytoria
|
||||||
|
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
||||||
|
("gnu" . "https://elpa.gnu.org/packages/")
|
||||||
|
("org" . "https://orgmode.org/elpa/")))
|
||||||
|
|
||||||
|
;; Inicjalizuj system pakietów
|
||||||
|
(package-initialize)
|
||||||
|
|
||||||
|
;; Odśwież listę pakietów, jeśli jest pusta
|
||||||
|
(unless package-archive-contents
|
||||||
|
(package-refresh-contents))
|
||||||
|
|
||||||
|
|
||||||
|
;; Funkcja do instalowania pakietów
|
||||||
|
(defun ensure-package-installed (&rest packages)
|
||||||
|
"Ensure that the given PACKAGES are installed.
|
||||||
|
Missing packages are automatically installed."
|
||||||
|
(dolist (package packages)
|
||||||
|
(unless (package-installed-p package)
|
||||||
|
(package-install package))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; Instalacja wymaganych pakietów
|
||||||
|
(ensure-package-installed
|
||||||
|
'use-package
|
||||||
|
'magit
|
||||||
|
'blacken
|
||||||
|
'lsp-mode
|
||||||
|
'lsp-ui
|
||||||
|
'flycheck
|
||||||
|
'company
|
||||||
|
'jupyter
|
||||||
|
'treemacs
|
||||||
|
'winum
|
||||||
|
'lsp-treemacs)
|
||||||
|
|
||||||
|
;; Wczytaj i skonfiguruj `use-package`
|
||||||
|
(unless (package-installed-p 'use-package)
|
||||||
|
(package-install 'use-package))
|
||||||
|
(require 'use-package)
|
||||||
|
(setq use-package-always-ensure t)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; Przełączanie się między oknami
|
||||||
|
(use-package winum
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(winum-mode))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Konfiguracja org-mode
|
||||||
|
;; ----------------------------
|
||||||
|
|
||||||
|
;; Definicja ścieżek dla Windows i Linux
|
||||||
|
(setq my-org-agenda-windows-path "C:/Users/TwojaNazwaUżytkownika/Documents/org/")
|
||||||
|
(setq my-org-agenda-linux-path "~/Nextcloud/todo/")
|
||||||
|
|
||||||
|
;; Definicja ścieżek do pliku todo.org
|
||||||
|
(setq my-todo-file-windows "C:/Users/TwojaNazwaUżytkownika/Documents/org/todo.org")
|
||||||
|
(setq my-todo-file-linux "~/Nextcloud/todo/todo.org")
|
||||||
|
|
||||||
|
;; Funkcja ustawiająca odpowiednią ścieżkę na podstawie systemu
|
||||||
|
(defun my-set-org-agenda-files ()
|
||||||
|
"Ustaw pliki agendy Org w zależności od systemu operacyjnego."
|
||||||
|
(setq org-agenda-files
|
||||||
|
(directory-files-recursively
|
||||||
|
(if (eq system-type 'windows-nt)
|
||||||
|
my-org-agenda-windows-path
|
||||||
|
my-org-agenda-linux-path)
|
||||||
|
"\\.org$")))
|
||||||
|
|
||||||
|
;; Wywołaj funkcję przy starcie Emacs
|
||||||
|
(my-set-org-agenda-files)
|
||||||
|
|
||||||
|
;; Funkcja otwierająca plik todo.org
|
||||||
|
(defun my-open-todo-file ()
|
||||||
|
"Otwórz plik todo.org w zależności od systemu operacyjnego."
|
||||||
|
(interactive)
|
||||||
|
(let ((todo-file (if (eq system-type 'windows-nt)
|
||||||
|
my-todo-file-windows
|
||||||
|
my-todo-file-linux)))
|
||||||
|
(if (file-exists-p todo-file)
|
||||||
|
(find-file todo-file)
|
||||||
|
(message "Plik todo.org nie istnieje: %s" todo-file))))
|
||||||
|
|
||||||
|
;; Włącz org-mode automatycznie dla plików .org
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
|
||||||
|
|
||||||
|
;; Włącz folding w org-mode (skróty klawiszowe)
|
||||||
|
(setq org-startup-folded t) ;; Start with folded headlines
|
||||||
|
(setq org-hide-leading-stars t) ;; Ukrywanie gwiazdek poza pierwszym poziomem
|
||||||
|
(setq org-ellipsis "⤵") ;; Znak na końcu zwiniętych sekcji
|
||||||
|
|
||||||
|
|
||||||
|
;; Ustawienia klawisza TAB w org-mode przy użyciu Evil
|
||||||
|
(add-hook 'org-mode-hook
|
||||||
|
(lambda ()
|
||||||
|
(evil-define-key 'normal org-mode-map (kbd "TAB") 'org-cycle)
|
||||||
|
(evil-define-key 'normal org-mode-map (kbd "S-TAB") 'org-shifttab)))
|
||||||
|
|
||||||
|
|
||||||
|
;; Podświetlanie składni i elementów w org-mode
|
||||||
|
(setq org-fontify-whole-heading-line t) ;; Podświetlaj cały nagłówek
|
||||||
|
(setq org-fontify-done-headline t) ;; Podświetlaj ukończone nagłówki
|
||||||
|
(setq org-fontify-quote-and-verse-blocks t) ;; Podświetlaj bloki cytatów i wierszy
|
||||||
|
|
||||||
|
;; Automatyczne podświetlanie kodu w blokach źródłowych
|
||||||
|
(setq org-src-fontify-natively t)
|
||||||
|
(setq org-src-tab-acts-natively t)
|
||||||
|
|
||||||
|
;; Wsparcie dla hierarchicznego folding w org-mode
|
||||||
|
(setq org-cycle-separator-lines 2) ;; Próg zwijania między sekcjami
|
||||||
|
|
||||||
|
;; Wygląd i czytelność w org-mode
|
||||||
|
(setq org-hide-emphasis-markers t) ;; Ukryj znaki formatowania (*bold*, /italic/)
|
||||||
|
(setq org-pretty-entities t) ;; Wyświetl symbole matematyczne jako unicode
|
||||||
|
(setq org-highlight-latex-and-related '(latex script entities)) ;; Podświetlaj LaTeX
|
||||||
|
|
||||||
|
;; Współpraca z tytułami i nagłówkami
|
||||||
|
(setq org-startup-indented t) ;; Włącz automatyczne wcięcia
|
||||||
|
(setq org-indent-mode-turns-on-hiding-stars t) ;; Ukryj gwiazdki w nagłówkach
|
||||||
|
|
||||||
|
;; Funkcje dodatkowe
|
||||||
|
(setq org-log-done 'time) ;; Zapisuj czas oznaczenia zadania jako DONE
|
||||||
|
(setq org-return-follows-link t) ;; ENTER podąża za linkami
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Instalacja i konfiguracja LSP dla Python
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package lsp-mode
|
||||||
|
:ensure t
|
||||||
|
:hook ((python-mode . lsp)) ;; Automatyczne uruchamianie LSP w Python-mode
|
||||||
|
:commands lsp
|
||||||
|
:config
|
||||||
|
;; Ustawienia LSP
|
||||||
|
(setq lsp-headerline-breadcrumb-enable t) ;; Breadcrumb w nagłówku
|
||||||
|
(setq lsp-completion-provider :capf) ;; Włączenie podpowiedzi capf
|
||||||
|
(setq lsp-enable-snippet t) ;; Włączenie snippetów w podpowiedziach
|
||||||
|
(setq lsp-pyright-auto-import-completions t) ;; Automatyczne podpowiedzi importów
|
||||||
|
(setq lsp-pyright-diagnostic-mode "workspace") ;; Diagnostyka w kontekście projektu
|
||||||
|
(setq lsp-pylsp-plugins-pyflakes-enabled nil) ;; Wyłącz pyflakes
|
||||||
|
(setq lsp-diagnostics-provider :none) ;; Wyłącz diagnostykę LSP na rzecz Flycheck
|
||||||
|
(setq lsp-pylsp-plugins-flake8-enabled nil) ;; Użyj flake8 zamiast pyflakes
|
||||||
|
(setq lsp-pylsp-plugins-ruff-enabled t) ;; Użyj flake8 zamiast pyflakes
|
||||||
|
|
||||||
|
|
||||||
|
;; Ścieżka do interpretera Python
|
||||||
|
(setq lsp-pyright-python-executable-cmd "python3"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(use-package lsp-ui
|
||||||
|
:ensure t
|
||||||
|
:hook (lsp-mode . lsp-ui-mode)
|
||||||
|
:config
|
||||||
|
;; Ustawienia lsp-ui
|
||||||
|
(setq lsp-ui-doc-enable t) ;; Dokumentacja w wyskakującym oknie
|
||||||
|
(setq lsp-ui-doc-position 'at-point)
|
||||||
|
(setq lsp-ui-sideline-enable t) ;; Diagnostyka w wierszu kodu
|
||||||
|
(setq lsp-ui-sideline-show-hover t) ;; Podpowiedzi w wierszu
|
||||||
|
(setq lsp-ui-sideline-show-code-actions t)) ;; Akcje kodu
|
||||||
|
|
||||||
|
|
||||||
|
;; ;; ----------------------------
|
||||||
|
;; ;; Flycheck - konfiguracja diagnostyki
|
||||||
|
;; ;; ----------------------------
|
||||||
|
(use-package flycheck
|
||||||
|
:ensure t
|
||||||
|
:hook (lsp-mode . flycheck-mode)
|
||||||
|
:config
|
||||||
|
;; Priorytet diagnostyki LSP
|
||||||
|
(setq flycheck-check-syntax-automatically '(save mode-enabled))
|
||||||
|
(setq flycheck-highlighting-mode 'lines)
|
||||||
|
(setq flycheck-indication-mode 'right-fringe))
|
||||||
|
|
||||||
|
(use-package lsp-ui-flycheck
|
||||||
|
:after (lsp-mode flycheck)
|
||||||
|
:ensure nil)
|
||||||
|
|
||||||
|
(defun set-flycheck-executables ()
|
||||||
|
"Set Flycheck executables to use from the active Python virtual environment."
|
||||||
|
(when (and (boundp 'pyvenv-virtual-env) pyvenv-virtual-env)
|
||||||
|
(let* ((flake8-path (concat pyvenv-virtual-env
|
||||||
|
(if (eq system-type 'windows-nt)
|
||||||
|
"/Scripts/flake8.exe" ; Ścieżka na Windows
|
||||||
|
"/bin/flake8"))) ; Ścieżka na Linux/Mac
|
||||||
|
(pylint-path (concat pyvenv-virtual-env
|
||||||
|
(if (eq system-type 'windows-nt)
|
||||||
|
"/Scripts/pylint.exe" ; Ścieżka na Windows
|
||||||
|
"/bin/pylint")))) ; Ścieżka na Linux/Mac
|
||||||
|
(when (file-executable-p flake8-path)
|
||||||
|
(flycheck-set-checker-executable 'python-flake8 flake8-path))
|
||||||
|
(when (file-executable-p pylint-path)
|
||||||
|
(flycheck-set-checker-executable 'python-pylint pylint-path)))))
|
||||||
|
(add-hook 'flycheck-before-syntax-check-hook #'set-flycheck-executables)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; Obsługa wirtualnych środowisk Python (pyvenv)
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package pyvenv
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
;; Automatyczna aktywacja środowiska venv w katalogu projektu
|
||||||
|
(defun my-auto-activate-venv ()
|
||||||
|
"Automatycznie aktywuj venv w bieżącym katalogu projektu."
|
||||||
|
(let ((venv-path (locate-dominating-file default-directory "venv")))
|
||||||
|
(when venv-path
|
||||||
|
(pyvenv-activate (expand-file-name "venv" venv-path))
|
||||||
|
(setq lsp-pyright-python-executable-cmd (expand-file-name "bin/python" venv-path)))))
|
||||||
|
(add-hook 'python-mode-hook #'my-auto-activate-venv)
|
||||||
|
|
||||||
|
;; Dodanie informacji o aktywnym venv do modeline
|
||||||
|
(defun my-get-current-venv ()
|
||||||
|
"Zwraca nazwę aktywnego środowiska wirtualnego."
|
||||||
|
(if (and (boundp 'pyvenv-virtual-env) pyvenv-virtual-env)
|
||||||
|
(propertize (concat "venv: " (file-name-nondirectory (directory-file-name pyvenv-virtual-env)))
|
||||||
|
'face '(:foreground "green"))
|
||||||
|
"No venv"))
|
||||||
|
|
||||||
|
(setq-default mode-line-format
|
||||||
|
(append mode-line-format
|
||||||
|
'((:eval (my-get-current-venv))))))
|
||||||
|
|
||||||
|
;; Skróty klawiszowe dla pyvenv
|
||||||
|
(global-set-key (kbd "C-c v a") 'pyvenv-activate) ;; Aktywuj środowisko
|
||||||
|
(global-set-key (kbd "C-c v d") 'pyvenv-deactivate) ;; Dezaktywuj środowisko
|
||||||
|
(global-set-key (kbd "C-c v w") 'pyvenv-workon) ;; Przełącz środowisko (workon)
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; System podpowiedzi: Company
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package company
|
||||||
|
:ensure t
|
||||||
|
:hook (lsp-mode . company-mode)
|
||||||
|
:config
|
||||||
|
(setq company-idle-delay 0.2) ;; Opóźnienie podpowiedzi
|
||||||
|
(setq company-minimum-prefix-length 1) ;; Minimalna długość prefiksu dla podpowiedzi
|
||||||
|
(setq company-selection-wrap-around t)) ;; Zawijanie w menu podpowiedzi
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Magit i zarządzanie projektami
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package magit
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(setq magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))
|
||||||
|
|
||||||
|
(use-package treemacs
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(global-set-key (kbd "C-c t") 'treemacs) ;; Skrót do otwierania Treemacs
|
||||||
|
(setq treemacs-position 'right) ;; Pozycja drzewa po prawej stronie
|
||||||
|
(setq treemacs-follow-mode t) ;; Automatyczne śledzenie otwartego pliku
|
||||||
|
(setq treemacs-filewatch-mode t) ;; Automatyczne odświeżanie
|
||||||
|
(setq treemacs-git-mode 'deferred)) ;; Obsługa Git w Treemacs
|
||||||
|
|
||||||
|
(use-package lsp-treemacs
|
||||||
|
:ensure t
|
||||||
|
:after (lsp-mode treemacs)
|
||||||
|
:config
|
||||||
|
(lsp-treemacs-sync-mode 1))
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Ulepszenia interfejsu: which-key
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package which-key
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(which-key-mode)
|
||||||
|
(setq which-key-idle-delay 0.5) ;; Opóźnienie wyświetlania podpowiedzi
|
||||||
|
(setq which-key-idle-secondary-delay 0.1))
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Konfiguracja Evil i lidera (leader key)
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package evil
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(evil-mode 1))
|
||||||
|
|
||||||
|
(use-package evil-leader
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(global-evil-leader-mode)
|
||||||
|
(evil-leader/set-leader "<SPC>")
|
||||||
|
(evil-leader/set-key
|
||||||
|
"g g" 'magit-status
|
||||||
|
"o o" 'my-open-todo-file
|
||||||
|
"o f" 'org-overview
|
||||||
|
"o l" 'org-agenda-list
|
||||||
|
"o i" 'org-clock-in
|
||||||
|
"o s" 'org-clock-out
|
||||||
|
"o r" 'org-clock-report
|
||||||
|
"g a" 'magit-remote-add
|
||||||
|
"f f" 'find-file
|
||||||
|
"b b" 'switch-to-buffer
|
||||||
|
"b m" 'buffer-menu
|
||||||
|
"b w" 'buffer-menu-open
|
||||||
|
"t t" 'treemacs
|
||||||
|
"t a" 'treemacs-add-project-to-workspace
|
||||||
|
"t r" 'treemacs-remove-project-from-workspace
|
||||||
|
"t c" 'treemacs-copy-file
|
||||||
|
"t f" 'treemacs-create-file
|
||||||
|
"t m" 'treemacs-rename-file
|
||||||
|
"l l" 'toggle-truncate-lines
|
||||||
|
"l n" 'display-line-numbers-mode
|
||||||
|
"j s" 'jupyter-run-server-repl
|
||||||
|
"j a" 'jupyter-repl-associate-buffer
|
||||||
|
"e e" 'eshell
|
||||||
|
"n n" 'narrow-to-region
|
||||||
|
"n w" 'widen
|
||||||
|
"a" 'mark-whole-buffer
|
||||||
|
"TAB" (lambda () (interactive) (switch-to-buffer (other-buffer)))
|
||||||
|
"1" 'winum-select-window-1
|
||||||
|
"2" 'winum-select-window-2
|
||||||
|
"3" 'winum-select-window-3
|
||||||
|
"4" 'winum-select-window-4
|
||||||
|
"5" 'winum-select-window-5))
|
||||||
|
|
||||||
|
(which-key-add-key-based-replacements
|
||||||
|
"<SPC> g" "Magit"
|
||||||
|
"<SPC> n" "Narrow"
|
||||||
|
"<SPC> f" "Files"
|
||||||
|
"<SPC> b" "Buffers"
|
||||||
|
"<SPC> t" "Treemacs"
|
||||||
|
"<SPC> l" "Lines"
|
||||||
|
"<SPC> j" "Jupyter"
|
||||||
|
"<SPC> e" "Eshell"
|
||||||
|
"<SPC> o" "Org"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
;; Utwórz mapę klawiszy dla "SPC"
|
||||||
|
(define-prefix-command 'my-space-prefix)
|
||||||
|
(define-key evil-normal-state-map (kbd "SPC") 'my-space-prefix)
|
||||||
|
|
||||||
|
;; Dodaj mapowanie "SPC 0" do Treemacs
|
||||||
|
(define-key my-space-prefix (kbd "0") 'my-treemacs-select-or-open)
|
||||||
|
|
||||||
|
;; Funkcja, która przełącza się na okno Treemacs lub je otwiera
|
||||||
|
(defun my-treemacs-select-or-open ()
|
||||||
|
"Przełącz się na okno Treemacs lub otwórz Treemacs, jeśli nie jest aktywne."
|
||||||
|
(interactive)
|
||||||
|
(if (treemacs-get-local-window)
|
||||||
|
(treemacs-select-window)
|
||||||
|
(treemacs)))
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Dodanie obsługi komentowania za pomocą "gc"
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package evil-commentary
|
||||||
|
:ensure t
|
||||||
|
:after evil
|
||||||
|
:config
|
||||||
|
(evil-commentary-mode))
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Wygląd: Motyw i minimalistyczny interfejs
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package gruvbox-theme
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(load-theme 'gruvbox-dark-medium t))
|
||||||
|
|
||||||
|
(tool-bar-mode -1)
|
||||||
|
(menu-bar-mode -1)
|
||||||
|
(scroll-bar-mode -1)
|
||||||
|
(setq inhibit-startup-message t)
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Formatowanie kodu z Black
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package blacken
|
||||||
|
:ensure t
|
||||||
|
:hook (python-mode . blacken-mode)
|
||||||
|
:config
|
||||||
|
(setq blacken-line-length 75))
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Podsumowanie i test
|
||||||
|
;; ----------------------------
|
||||||
|
(recentf-mode 1)
|
||||||
|
(setq recentf-max-menu-items 25) ;; Maksymalna liczba plików na liście
|
||||||
|
(global-set-key (kbd "C-c r") 'recentf-open-files) ;; Skrót do ostatnich plików
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Other keys
|
||||||
|
;; ----------------------------
|
||||||
|
(global-set-key (kbd "C-c e") 'eshell)
|
||||||
|
(global-set-key (kbd "C-c d") 'flycheck-list-errors)
|
||||||
|
|
||||||
|
(global-set-key (kbd "C-c j s") 'jupyter-run-server-repl) ;; Połącz się z serwerem
|
||||||
|
(global-set-key (kbd "C-c j a") 'jupyter-repl-associate-buffer) ;; Powiąż bufor z REPL
|
||||||
|
(global-set-key (kbd "C-c j b") 'jupyter-eval-buffer) ;; Wykonaj cały bufor
|
||||||
|
|
||||||
|
|
||||||
|
(setq initial-scratch-message (concat ";; Aby otworzyć org daj na SPC o o \n"
|
||||||
|
";; Aby otworzyć ostatnie pliki daj na C-c r\n"
|
||||||
|
";; Aby otworzyć treemacs daj na C-c t \n"
|
||||||
|
";; Aktywacja środowiska pyenv C-c v a \n"
|
||||||
|
";; Eshell C-c e \n"
|
||||||
|
";; Pokaż błędy flycheck C-c d \n"
|
||||||
|
"\n"
|
||||||
|
";;Jupyter \n"
|
||||||
|
";;Wykonaj Połącz się z serwerem C-c j s \n"
|
||||||
|
";;Powiazanie bufora REPL C-c j a \n"
|
||||||
|
";;Wykonaj cały bufor C-c j b \n"
|
||||||
|
";;Wykkonaj region C-c C-c \n"))
|
||||||
|
(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.
|
||||||
|
'(package-selected-packages
|
||||||
|
'(evil-commentary yasnippet which-key vterm request pyvenv polymode neotree magit lsp-ui lsp-treemacs jupyter highlight-indentation gruvbox-theme evil-org evil-leader deferred company anaphora)))
|
||||||
|
(custom-set-faces
|
||||||
|
;; custom-set-faces 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.
|
||||||
|
)
|
||||||
|
(put 'narrow-to-region 'disabled nil)
|
|
@ -0,0 +1,452 @@
|
||||||
|
;; ----------------------------
|
||||||
|
;; Podstawowa konfiguracja pakietów i MELPA
|
||||||
|
;; ----------------------------
|
||||||
|
|
||||||
|
(require 'package)
|
||||||
|
|
||||||
|
;; Dodaj repozytoria
|
||||||
|
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
||||||
|
("gnu" . "https://elpa.gnu.org/packages/")
|
||||||
|
("org" . "https://orgmode.org/elpa/")))
|
||||||
|
|
||||||
|
;; Inicjalizuj system pakietów
|
||||||
|
(package-initialize)
|
||||||
|
|
||||||
|
;; Odśwież listę pakietów, jeśli jest pusta
|
||||||
|
(unless package-archive-contents
|
||||||
|
(package-refresh-contents))
|
||||||
|
|
||||||
|
|
||||||
|
;; Funkcja do instalowania pakietów
|
||||||
|
(defun ensure-package-installed (&rest packages)
|
||||||
|
"Ensure that the given PACKAGES are installed.
|
||||||
|
Missing packages are automatically installed."
|
||||||
|
(dolist (package packages)
|
||||||
|
(unless (package-installed-p package)
|
||||||
|
(package-install package))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; Instalacja wymaganych pakietów
|
||||||
|
(ensure-package-installed
|
||||||
|
'use-package
|
||||||
|
'magit
|
||||||
|
'blacken
|
||||||
|
'lsp-mode
|
||||||
|
'lsp-ui
|
||||||
|
'flycheck
|
||||||
|
'company
|
||||||
|
'jupyter
|
||||||
|
'treemacs
|
||||||
|
'winum
|
||||||
|
'lsp-treemacs)
|
||||||
|
|
||||||
|
;; Wczytaj i skonfiguruj `use-package`
|
||||||
|
(unless (package-installed-p 'use-package)
|
||||||
|
(package-install 'use-package))
|
||||||
|
(require 'use-package)
|
||||||
|
(setq use-package-always-ensure t)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; Przełączanie się między oknami
|
||||||
|
(use-package winum
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(winum-mode))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Konfiguracja org-mode
|
||||||
|
;; ----------------------------
|
||||||
|
|
||||||
|
;; Definicja ścieżek dla Windows i Linux
|
||||||
|
(setq my-org-agenda-windows-path "C:/Users/TwojaNazwaUżytkownika/Documents/org/")
|
||||||
|
(setq my-org-agenda-linux-path "~/Nextcloud/todo/")
|
||||||
|
|
||||||
|
;; Definicja ścieżek do pliku todo.org
|
||||||
|
(setq my-todo-file-windows "C:/Users/TwojaNazwaUżytkownika/Documents/org/todo.org")
|
||||||
|
(setq my-todo-file-linux "~/Nextcloud/todo/todo.org")
|
||||||
|
|
||||||
|
;; Funkcja ustawiająca odpowiednią ścieżkę na podstawie systemu
|
||||||
|
(defun my-set-org-agenda-files ()
|
||||||
|
"Ustaw pliki agendy Org w zależności od systemu operacyjnego."
|
||||||
|
(setq org-agenda-files
|
||||||
|
(directory-files-recursively
|
||||||
|
(if (eq system-type 'windows-nt)
|
||||||
|
my-org-agenda-windows-path
|
||||||
|
my-org-agenda-linux-path)
|
||||||
|
"\\.org$")))
|
||||||
|
|
||||||
|
;; Wywołaj funkcję przy starcie Emacs
|
||||||
|
(my-set-org-agenda-files)
|
||||||
|
|
||||||
|
;; Funkcja otwierająca plik todo.org
|
||||||
|
(defun my-open-todo-file ()
|
||||||
|
"Otwórz plik todo.org w zależności od systemu operacyjnego."
|
||||||
|
(interactive)
|
||||||
|
(let ((todo-file (if (eq system-type 'windows-nt)
|
||||||
|
my-todo-file-windows
|
||||||
|
my-todo-file-linux)))
|
||||||
|
(if (file-exists-p todo-file)
|
||||||
|
(find-file todo-file)
|
||||||
|
(message "Plik todo.org nie istnieje: %s" todo-file))))
|
||||||
|
|
||||||
|
;; Włącz org-mode automatycznie dla plików .org
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
|
||||||
|
|
||||||
|
;; Włącz folding w org-mode (skróty klawiszowe)
|
||||||
|
(setq org-startup-folded t) ;; Start with folded headlines
|
||||||
|
(setq org-hide-leading-stars t) ;; Ukrywanie gwiazdek poza pierwszym poziomem
|
||||||
|
(setq org-ellipsis "⤵") ;; Znak na końcu zwiniętych sekcji
|
||||||
|
|
||||||
|
|
||||||
|
;; Ustawienia klawisza TAB w org-mode przy użyciu Evil
|
||||||
|
(add-hook 'org-mode-hook
|
||||||
|
(lambda ()
|
||||||
|
(evil-define-key 'normal org-mode-map (kbd "TAB") 'org-cycle)
|
||||||
|
(evil-define-key 'normal org-mode-map (kbd "S-TAB") 'org-shifttab)))
|
||||||
|
|
||||||
|
|
||||||
|
;; Podświetlanie składni i elementów w org-mode
|
||||||
|
(setq org-fontify-whole-heading-line t) ;; Podświetlaj cały nagłówek
|
||||||
|
(setq org-fontify-done-headline t) ;; Podświetlaj ukończone nagłówki
|
||||||
|
(setq org-fontify-quote-and-verse-blocks t) ;; Podświetlaj bloki cytatów i wierszy
|
||||||
|
|
||||||
|
;; Automatyczne podświetlanie kodu w blokach źródłowych
|
||||||
|
(setq org-src-fontify-natively t)
|
||||||
|
(setq org-src-tab-acts-natively t)
|
||||||
|
|
||||||
|
;; Wsparcie dla hierarchicznego folding w org-mode
|
||||||
|
(setq org-cycle-separator-lines 2) ;; Próg zwijania między sekcjami
|
||||||
|
|
||||||
|
;; Wygląd i czytelność w org-mode
|
||||||
|
(setq org-hide-emphasis-markers t) ;; Ukryj znaki formatowania (*bold*, /italic/)
|
||||||
|
(setq org-pretty-entities t) ;; Wyświetl symbole matematyczne jako unicode
|
||||||
|
(setq org-highlight-latex-and-related '(latex script entities)) ;; Podświetlaj LaTeX
|
||||||
|
|
||||||
|
;; Współpraca z tytułami i nagłówkami
|
||||||
|
(setq org-startup-indented t) ;; Włącz automatyczne wcięcia
|
||||||
|
(setq org-indent-mode-turns-on-hiding-stars t) ;; Ukryj gwiazdki w nagłówkach
|
||||||
|
|
||||||
|
;; Funkcje dodatkowe
|
||||||
|
(setq org-log-done 'time) ;; Zapisuj czas oznaczenia zadania jako DONE
|
||||||
|
(setq org-return-follows-link t) ;; ENTER podąża za linkami
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Instalacja i konfiguracja LSP dla Python
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package lsp-mode
|
||||||
|
:ensure t
|
||||||
|
:hook ((python-mode . lsp)) ;; Automatyczne uruchamianie LSP w Python-mode
|
||||||
|
:commands lsp
|
||||||
|
:config
|
||||||
|
;; Ustawienia LSP
|
||||||
|
(setq lsp-headerline-breadcrumb-enable t) ;; Breadcrumb w nagłówku
|
||||||
|
(setq lsp-completion-provider :capf) ;; Włączenie podpowiedzi capf
|
||||||
|
(setq lsp-enable-snippet t) ;; Włączenie snippetów w podpowiedziach
|
||||||
|
(setq lsp-pyright-auto-import-completions t) ;; Automatyczne podpowiedzi importów
|
||||||
|
(setq lsp-pyright-diagnostic-mode "workspace") ;; Diagnostyka w kontekście projektu
|
||||||
|
(setq lsp-pylsp-plugins-pyflakes-enabled nil) ;; Wyłącz pyflakes
|
||||||
|
(setq lsp-diagnostics-provider :none) ;; Wyłącz diagnostykę LSP na rzecz Flycheck
|
||||||
|
(setq lsp-pylsp-plugins-flake8-enabled nil) ;; Użyj flake8 zamiast pyflakes
|
||||||
|
(setq lsp-pylsp-plugins-ruff-enabled t) ;; Użyj flake8 zamiast pyflakes
|
||||||
|
|
||||||
|
|
||||||
|
;; Ścieżka do interpretera Python
|
||||||
|
(setq lsp-pyright-python-executable-cmd "python3"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(use-package lsp-ui
|
||||||
|
:ensure t
|
||||||
|
:hook (lsp-mode . lsp-ui-mode)
|
||||||
|
:config
|
||||||
|
;; Ustawienia lsp-ui
|
||||||
|
(setq lsp-ui-doc-enable t) ;; Dokumentacja w wyskakującym oknie
|
||||||
|
(setq lsp-ui-doc-position 'at-point)
|
||||||
|
(setq lsp-ui-sideline-enable t) ;; Diagnostyka w wierszu kodu
|
||||||
|
(setq lsp-ui-sideline-show-hover t) ;; Podpowiedzi w wierszu
|
||||||
|
(setq lsp-ui-sideline-show-code-actions t)) ;; Akcje kodu
|
||||||
|
|
||||||
|
|
||||||
|
;; ;; ----------------------------
|
||||||
|
;; ;; Flycheck - konfiguracja diagnostyki
|
||||||
|
;; ;; ----------------------------
|
||||||
|
(use-package flycheck
|
||||||
|
:ensure t
|
||||||
|
:hook (lsp-mode . flycheck-mode)
|
||||||
|
:config
|
||||||
|
;; Priorytet diagnostyki LSP
|
||||||
|
(setq flycheck-check-syntax-automatically '(save mode-enabled))
|
||||||
|
(setq flycheck-highlighting-mode 'lines)
|
||||||
|
(setq flycheck-indication-mode 'right-fringe))
|
||||||
|
|
||||||
|
(use-package lsp-ui-flycheck
|
||||||
|
:after (lsp-mode flycheck)
|
||||||
|
:ensure nil)
|
||||||
|
|
||||||
|
(defun set-flycheck-executables ()
|
||||||
|
"Set Flycheck executables to use from the active Python virtual environment."
|
||||||
|
(when (and (boundp 'pyvenv-virtual-env) pyvenv-virtual-env)
|
||||||
|
(let* ((flake8-path (concat pyvenv-virtual-env
|
||||||
|
(if (eq system-type 'windows-nt)
|
||||||
|
"/Scripts/flake8.exe" ; Ścieżka na Windows
|
||||||
|
"/bin/flake8"))) ; Ścieżka na Linux/Mac
|
||||||
|
(pylint-path (concat pyvenv-virtual-env
|
||||||
|
(if (eq system-type 'windows-nt)
|
||||||
|
"/Scripts/pylint.exe" ; Ścieżka na Windows
|
||||||
|
"/bin/pylint")))) ; Ścieżka na Linux/Mac
|
||||||
|
(when (file-executable-p flake8-path)
|
||||||
|
(flycheck-set-checker-executable 'python-flake8 flake8-path))
|
||||||
|
(when (file-executable-p pylint-path)
|
||||||
|
(flycheck-set-checker-executable 'python-pylint pylint-path)))))
|
||||||
|
(add-hook 'flycheck-before-syntax-check-hook #'set-flycheck-executables)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; Obsługa wirtualnych środowisk Python (pyvenv)
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package pyvenv
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
;; Automatyczna aktywacja środowiska venv w katalogu projektu
|
||||||
|
(defun my-auto-activate-venv ()
|
||||||
|
"Automatycznie aktywuj venv w bieżącym katalogu projektu."
|
||||||
|
(let ((venv-path (locate-dominating-file default-directory "venv")))
|
||||||
|
(when venv-path
|
||||||
|
(pyvenv-activate (expand-file-name "venv" venv-path))
|
||||||
|
(setq lsp-pyright-python-executable-cmd (expand-file-name "bin/python" venv-path)))))
|
||||||
|
(add-hook 'python-mode-hook #'my-auto-activate-venv)
|
||||||
|
|
||||||
|
;; Dodanie informacji o aktywnym venv do modeline
|
||||||
|
(defun my-get-current-venv ()
|
||||||
|
"Zwraca nazwę aktywnego środowiska wirtualnego."
|
||||||
|
(if (and (boundp 'pyvenv-virtual-env) pyvenv-virtual-env)
|
||||||
|
(propertize (concat "venv: " (file-name-nondirectory (directory-file-name pyvenv-virtual-env)))
|
||||||
|
'face '(:foreground "green"))
|
||||||
|
"No venv"))
|
||||||
|
|
||||||
|
(setq-default mode-line-format
|
||||||
|
(append mode-line-format
|
||||||
|
'((:eval (my-get-current-venv))))))
|
||||||
|
|
||||||
|
;; Skróty klawiszowe dla pyvenv
|
||||||
|
(global-set-key (kbd "C-c v a") 'pyvenv-activate) ;; Aktywuj środowisko
|
||||||
|
(global-set-key (kbd "C-c v d") 'pyvenv-deactivate) ;; Dezaktywuj środowisko
|
||||||
|
(global-set-key (kbd "C-c v w") 'pyvenv-workon) ;; Przełącz środowisko (workon)
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; System podpowiedzi: Company
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package company
|
||||||
|
:ensure t
|
||||||
|
:hook (lsp-mode . company-mode)
|
||||||
|
:config
|
||||||
|
(setq company-idle-delay 0.2) ;; Opóźnienie podpowiedzi
|
||||||
|
(setq company-minimum-prefix-length 1) ;; Minimalna długość prefiksu dla podpowiedzi
|
||||||
|
(setq company-selection-wrap-around t)) ;; Zawijanie w menu podpowiedzi
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Magit i zarządzanie projektami
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package magit
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(setq magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))
|
||||||
|
|
||||||
|
(use-package treemacs
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(global-set-key (kbd "C-c t") 'treemacs) ;; Skrót do otwierania Treemacs
|
||||||
|
(setq treemacs-position 'right) ;; Pozycja drzewa po prawej stronie
|
||||||
|
(setq treemacs-follow-mode t) ;; Automatyczne śledzenie otwartego pliku
|
||||||
|
(setq treemacs-filewatch-mode t) ;; Automatyczne odświeżanie
|
||||||
|
(setq treemacs-git-mode 'deferred)) ;; Obsługa Git w Treemacs
|
||||||
|
|
||||||
|
(use-package lsp-treemacs
|
||||||
|
:ensure t
|
||||||
|
:after (lsp-mode treemacs)
|
||||||
|
:config
|
||||||
|
(lsp-treemacs-sync-mode 1))
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Ulepszenia interfejsu: which-key
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package which-key
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(which-key-mode)
|
||||||
|
(setq which-key-idle-delay 0.5) ;; Opóźnienie wyświetlania podpowiedzi
|
||||||
|
(setq which-key-idle-secondary-delay 0.1))
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Konfiguracja Evil i lidera (leader key)
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package evil
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(evil-mode 1))
|
||||||
|
|
||||||
|
(use-package evil-leader
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(global-evil-leader-mode)
|
||||||
|
(evil-leader/set-leader "<SPC>")
|
||||||
|
(evil-leader/set-key
|
||||||
|
"g g" 'magit-status
|
||||||
|
"o o" 'my-open-todo-file
|
||||||
|
"o l" 'org-agenda-list
|
||||||
|
"o i" 'org-clock-in
|
||||||
|
"o s" 'org-clock-out
|
||||||
|
"o r" 'org-clock-report
|
||||||
|
"g a" 'magit-remote-add
|
||||||
|
"f f" 'find-file
|
||||||
|
"b b" 'switch-to-buffer
|
||||||
|
"b m" 'buffer-menu
|
||||||
|
"b w" 'buffer-menu-open
|
||||||
|
"t t" 'treemacs
|
||||||
|
"t a" 'treemacs-add-project-to-workspace
|
||||||
|
"t r" 'treemacs-remove-project-from-workspace
|
||||||
|
"t c" 'treemacs-copy-file
|
||||||
|
"t f" 'treemacs-create-file
|
||||||
|
"t m" 'treemacs-rename-file
|
||||||
|
"l l" 'toggle-truncate-lines
|
||||||
|
"l n" 'display-line-numbers-mode
|
||||||
|
"j s" 'jupyter-run-server-repl
|
||||||
|
"j a" 'jupyter-repl-associate-buffer
|
||||||
|
"e e" 'eshell
|
||||||
|
"n n" 'narrow-to-region
|
||||||
|
"n w" 'widen
|
||||||
|
"a" 'mark-whole-buffer
|
||||||
|
"TAB" (lambda () (interactive) (switch-to-buffer (other-buffer)))
|
||||||
|
"1" 'winum-select-window-1
|
||||||
|
"2" 'winum-select-window-2
|
||||||
|
"3" 'winum-select-window-3
|
||||||
|
"4" 'winum-select-window-4
|
||||||
|
"5" 'winum-select-window-5))
|
||||||
|
|
||||||
|
(which-key-add-key-based-replacements
|
||||||
|
"<SPC> g" "Magit"
|
||||||
|
"<SPC> n" "Narrow"
|
||||||
|
"<SPC> f" "Files"
|
||||||
|
"<SPC> b" "Buffers"
|
||||||
|
"<SPC> t" "Treemacs"
|
||||||
|
"<SPC> l" "Lines"
|
||||||
|
"<SPC> j" "Jupyter"
|
||||||
|
"<SPC> e" "Eshell"
|
||||||
|
"<SPC> o" "Org"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
;; Utwórz mapę klawiszy dla "SPC"
|
||||||
|
(define-prefix-command 'my-space-prefix)
|
||||||
|
(define-key evil-normal-state-map (kbd "SPC") 'my-space-prefix)
|
||||||
|
|
||||||
|
;; Dodaj mapowanie "SPC 0" do Treemacs
|
||||||
|
(define-key my-space-prefix (kbd "0") 'my-treemacs-select-or-open)
|
||||||
|
|
||||||
|
;; Funkcja, która przełącza się na okno Treemacs lub je otwiera
|
||||||
|
(defun my-treemacs-select-or-open ()
|
||||||
|
"Przełącz się na okno Treemacs lub otwórz Treemacs, jeśli nie jest aktywne."
|
||||||
|
(interactive)
|
||||||
|
(if (treemacs-get-local-window)
|
||||||
|
(treemacs-select-window)
|
||||||
|
(treemacs)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Dodanie obsługi komentowania za pomocą "gc"
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package evil-commentary
|
||||||
|
:ensure t
|
||||||
|
:after evil
|
||||||
|
:config
|
||||||
|
(evil-commentary-mode))
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Wygląd: Motyw i minimalistyczny interfejs
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package gruvbox-theme
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(load-theme 'gruvbox-dark-medium t))
|
||||||
|
|
||||||
|
(tool-bar-mode -1)
|
||||||
|
(menu-bar-mode -1)
|
||||||
|
(scroll-bar-mode -1)
|
||||||
|
(setq inhibit-startup-message t)
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Formatowanie kodu z Black
|
||||||
|
;; ----------------------------
|
||||||
|
(use-package blacken
|
||||||
|
:ensure t
|
||||||
|
:hook (python-mode . blacken-mode)
|
||||||
|
:config
|
||||||
|
(setq blacken-line-length 75))
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Podsumowanie i test
|
||||||
|
;; ----------------------------
|
||||||
|
(recentf-mode 1)
|
||||||
|
(setq recentf-max-menu-items 25) ;; Maksymalna liczba plików na liście
|
||||||
|
(global-set-key (kbd "C-c r") 'recentf-open-files) ;; Skrót do ostatnich plików
|
||||||
|
|
||||||
|
;; ----------------------------
|
||||||
|
;; Other keys
|
||||||
|
;; ----------------------------
|
||||||
|
(global-set-key (kbd "C-c e") 'eshell)
|
||||||
|
(global-set-key (kbd "C-c d") 'flycheck-list-errors)
|
||||||
|
|
||||||
|
(global-set-key (kbd "C-c j s") 'jupyter-run-server-repl) ;; Połącz się z serwerem
|
||||||
|
(global-set-key (kbd "C-c j a") 'jupyter-repl-associate-buffer) ;; Powiąż bufor z REPL
|
||||||
|
(global-set-key (kbd "C-c j b") 'jupyter-eval-buffer) ;; Wykonaj cały bufor
|
||||||
|
|
||||||
|
|
||||||
|
(setq initial-scratch-message (concat ";; Aby otworzyć org daj na SPC o o \n"
|
||||||
|
";; Aby otworzyć ostatnie pliki daj na C-c r\n"
|
||||||
|
";; Aby otworzyć treemacs daj na C-c t \n"
|
||||||
|
";; Aktywacja środowiska pyenv C-c v a \n"
|
||||||
|
";; Eshell C-c e \n"
|
||||||
|
";; Pokaż błędy flycheck C-c d \n"
|
||||||
|
"\n"
|
||||||
|
";;Jupyter \n"
|
||||||
|
";;Wykonaj Połącz się z serwerem C-c j s \n"
|
||||||
|
";;Powiazanie bufora REPL C-c j a \n"
|
||||||
|
";;Wykonaj cały bufor C-c j b \n"
|
||||||
|
";;Wykkonaj region C-c C-c \n"))
|
||||||
|
(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.
|
||||||
|
'(package-selected-packages
|
||||||
|
'(evil-commentary yasnippet which-key vterm request pyvenv polymode neotree magit lsp-ui lsp-treemacs jupyter highlight-indentation gruvbox-theme evil-org evil-leader deferred company anaphora)))
|
||||||
|
(custom-set-faces
|
||||||
|
;; custom-set-faces 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.
|
||||||
|
)
|
||||||
|
(put 'narrow-to-region 'disabled nil)
|
Loading…
Reference in New Issue