init.el updated

This commit is contained in:
Muha Aliss 2023-09-11 13:20:34 +03:00
parent 44b045d867
commit af8710d17f

572
init.el
View file

@ -1,78 +1,204 @@
;; Initial window and default window
(setq inhibit-startup-screen t)
;;; Author: Muha Aliss
;;; Mail: muhaaliss@pm.me
;;; Create: 07/09/2023
;;; Edit: 09/09/2023
(setq default-frame-alist
(if (display-graphic-p)
'((tool-bar-lines . 0)
(background-color . "honeydew")
(width . 155)
(height . 46))
'((tool-bar-lines . 0))))
;;; ---> Package
;; Package signature check disable
(setq package-check-signature nil)
(when (version<= "25" emacs-version)
(setq package-check-signature nil))
;; User interface
(when (version<= "26.0.50" emacs-version )
;; List the packages you want
(setq package-list '(gnu-elpa gnu-elpa-keyring-update atom-one-dark-theme))
;; List the repositories containing them
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
("melpa" . "https://melpa.org/packages/")))
;; Activate all the packages (in particular autoloads)
(package-initialize)
;; Fetch the list of packages available
(unless package-archive-contents
(package-refresh-contents))
;; İnstall the missing packages
(dolist (package package-list)
(unless (package-installed-p package)
(package-install package)))
;;; ---> Interface
;; Hide welcome screen and open bookmark
(setq inhibit-splash-screen t)
(require 'bookmark)
(list-bookmarks)
(switch-to-buffer "*Bookmark List*")
;; Set cursor to i-beam
(modify-all-frames-parameters (list (cons 'cursor-type 'bar)))
;; Set a theme
(load-theme 'atom-one-dark t)
;; Set default window size
(if (display-graphic-p)
(progn
(setq initial-frame-alist
'(
(tool-bar-lines . 0)
(width . 110) ; chars
(height . 40) ; lines
;(background-color . "honeydew")
(left . 50)
(top . 50)))
(setq default-frame-alist
'(
(tool-bar-lines . 0)
(width . 110)
(height . 40)
;(background-color . "honeydew")
(left . 50)
(top . 50))))
(progn
(setq initial-frame-alist '( (tool-bar-lines . 0)))
(setq default-frame-alist '( (tool-bar-lines . 0)))))
;; Show line number global
(when (version<= "26.1" emacs-version)
(global-display-line-numbers-mode))
(set-face-attribute 'default nil :font "Source Code Pro" :height 125)
;;(load-theme 'atom-one-dark)
;; Highlight Current Line
(global-hl-line-mode 1)
;; Up/Down arrow move based on logical lines (newline char) or visual line
(setq line-move-visual nil)
;; Show cursor position within line
(column-number-mode 1)
(blink-cursor-mode 0)
(setq use-dialog-box nil)
(setq visible-bell t)
(progn
;; minibuffer setup
(setq enable-recursive-minibuffers t)
(savehist-mode 0)
;; big minibuffer height, for ido to show choices vertically
(setq max-mini-window-height 0.5)
;; minibuffer, stop cursor going into prompt
(customize-set-variable
'minibuffer-prompt-properties
(quote (read-only t cursor-intangible t face minibuffer-prompt))))
(if (version< emacs-version "28.1")
(progn
(progn
;; make buffer switch command do suggestions, also for find-file command
(require 'ido)
(ido-mode 1)
;; show choices vertically
(setf (nth 2 ido-decorations) "\n")
;; show any name that has the chars you typed
(setq ido-enable-flex-matching t)
;; use current pane for newly opened file
(setq ido-default-file-method 'selected-window)
;; use current pane for newly switched buffer
(setq ido-default-buffer-method 'selected-window)
)
(progn
;; minibuffer enhanced completion icomplete
(require 'icomplete)
(icomplete-mode 1)
;; show choices vertically
(setq icomplete-separator "\n")
(setq icomplete-hide-common-prefix nil)
(setq icomplete-in-buffer t)
(define-key icomplete-minibuffer-map (kbd "<right>") 'icomplete-forward-completions)
(define-key icomplete-minibuffer-map (kbd "<left>") 'icomplete-backward-completions)))
(fido-vertical-mode 1))
;;; Editing related
;; Set default font
(cond
((string-equal system-type "windows-nt") ; Microsoft Windows
(when (member "Consolas" (font-family-list))
(set-frame-font "Consolas-12" t t)))
((string-equal system-type "darwin") ; macOS
(when (member "Menlo" (font-family-list))
(set-frame-font "Menlo-12" t t)))
((string-equal system-type "gnu/linux") ; linux
(when (member "Source Code Pro" (font-family-list))
(set-frame-font "Source Code Pro-12" t t))))
;; Make typing delete/overwr_ites selected text
;; org mode syntax color embeded source code
(setq org-src-fontify-natively t)
;;; ---> Editing
;; Stop auto save and backup
(setq auto-save-default nil)
(setq make-backup-files nil)
(setq backup-by-copying t)
;; Turn on/off line wrap for current buffer.
(global-visual-line-mode 1)
;; Make typing delete/overwrites selected text
(delete-selection-mode 1)
;; Set default tab char's display width to 4 spaces
(setq-default tab-width 4)
;; Make indent commands use space only (never tab character)
(progn
(setq-default indent-tabs-mode nil))
;; Make tab key do indent first then completion.
(setq-default tab-always-indent nil)
;; Set highlighting brackets
(show-paren-mode 1)
(setq show-paren-style 'parenthesis)
(setq show-paren-style 'mixed)
(setq save-interprogram-paste-before-kill t)
(setq x-select-enable-clipboard-manager nil)
;; Add support for pretty symbols mode
(global-prettify-symbols-mode 1)
(defun my-add-pretty-symbol ()
"make some word display as Unicode symbols"
(setq prettify-symbols-alist
'(
("->" . 8594) ; → 8594
("lambda" . 955) ; λ 955
("--->" . 10230) ; ⟶ 10230
("=>" . 8658) ; ⇒ 8658
("map" . 8614) ; ↦ 8614
)))
;; Pretty symbols hook for some major modes
(add-hook 'clojure-mode-hook 'my-add-pretty-symbol)
(add-hook 'haskell-mode-hook 'my-add-pretty-symbol)
(add-hook 'tex-mode-hook 'my-add-pretty-symbol)
(add-hook 'emacs-lisp-mode-hook 'my-add-pretty-symbol)
(add-hook 'python-mode-hook 'my-add-pretty-symbol)
;; Hippie expand keybindings
(global-set-key (kbd "C-t") 'hippie-expand)
;; Hippie expand to words only
(setq hippie-expand-try-functions-list
'(
try-expand-dabbrev
@ -87,15 +213,43 @@
;; try-expand-line
))
;; Use short answer
(if (version< emacs-version "28.1")
(defalias 'yes-or-no-p 'y-or-n-p)
(setq use-short-answers t))
;; Select current line keybinding
(global-set-key (kbd "M-7") 'xah-select-line)
(defun xah-select-line ()
"Select current line. If region is active, extend selection downward by line.
If `visual-line-mode' is on, consider line as visual line.
URL `http://xahlee.info/emacs/emacs/modernization_mark-word.html'
Version: 2017-11-01 2021-03-19 2023-07-16"
(interactive)
(if (region-active-p)
(if visual-line-mode
(let ((xp1 (point)))
(end-of-visual-line 1)
(when (eq xp1 (point))
(end-of-visual-line 2)))
(progn
(forward-line 1)
(end-of-line)))
(if visual-line-mode
(progn (beginning-of-visual-line)
(push-mark (point) t t)
(end-of-visual-line))
(progn
(push-mark (line-beginning-position) t t)
(end-of-line)))))
;; Copy or cut current line if no selection keybindings
(global-set-key (kbd "<f2>") 'xah-cut-line-or-region) ; cut
(global-set-key (kbd "<f3>") 'xah-copy-line-or-region) ; copy
(global-set-key (kbd "<f4>") 'yank) ; paste
;; Copy current line if no selection
(defun xah-copy-line-or-region ()
"Copy current line or selection.
When called repeatedly, append copy subsequent lines.
@ -133,6 +287,9 @@ Version: 2010-05-21 2022-10-03"
(end-of-line)
(forward-char))))))))
;; Cut current line if no selection
(defun xah-cut-line-or-region ()
"Cut current line or selection.
When `universal-argument' is called first, cut whole buffer (respects `narrow-to-region').
@ -147,3 +304,294 @@ Version: 2010-05-21 2015-06-10"
(progn (if (region-active-p)
(kill-region (region-beginning) (region-end) t)
(kill-region (line-beginning-position) (line-beginning-position 2))))))
;; Move line keybindings.
(global-set-key (kbd "M-<up>") 'move-line-up)
(global-set-key (kbd "M-<down>") 'move-line-down)
;; Move the current line up or down by N lines.
(defun move-line (n)
(interactive "p")
(setq col (current-column))
(beginning-of-line) (setq start (point))
(end-of-line) (forward-char) (setq end (point))
(let ((line-text (delete-and-extract-region start end)))
(forward-line n)
(insert line-text)
;; restore point to original column in moved line
(forward-line -1)
(forward-char col)))
(defmacro save-column (&rest body)
`(let ((column (current-column)))
(unwind-protect
(progn ,@body)
(move-to-column column))))
(put 'save-column 'lisp-indent-function 0)
(defun move-line-up ()
(interactive)
(save-column
(transpose-lines 1)
(forward-line -2)))
(defun move-line-down ()
(interactive)
(save-column
(forward-line 1)
(transpose-lines 1)
(forward-line -1)))
;; Delete the matching brackets
(defun xah-delete-forward-bracket-pairs (&optional DeleteInnerTextQ)
"Delete the matching brackets to the right of cursor including the inner text.
e.g. (a b c)
In lisp code, if DeleteInnerTextQ is true, also delete the inner text.
After the command, mark is set at the left matching bracket position, so you can `exchange-point-and-mark' to select it.
This command assumes the char to the right of point is a left bracket or quote, and have a matching one after.
What char is considered bracket or quote is determined by current syntax table.
URL `http://xahlee.info/emacs/emacs/emacs_delete_backward_char_or_bracket_text.html'
Version: 2017-07-02 2023-07-30"
(interactive (list t))
(if DeleteInnerTextQ
(progn
(mark-sexp)
(kill-region (region-beginning) (region-end)))
(let ((xpt (point)))
(forward-sexp)
(delete-char -1)
(push-mark (point) t)
(goto-char xpt)
(delete-char 1))))
(defun xah-delete-backward-bracket-text ()
"Delete the matching brackets to the left of cursor, including the inner text.
e.g. (a b c)
This command assumes the left of cursor is a right bracket, and there is a matching one before it.
What char is considered bracket or quote is determined by current syntax table.
URL `http://xahlee.info/emacs/emacs/emacs_delete_backward_char_or_bracket_text.html'
Version: 2017-09-21 2023-07-30"
(interactive)
(progn
(forward-sexp -1)
(mark-sexp)
(kill-region (region-beginning) (region-end))))
(defun xah-delete-backward-bracket-pair ()
"Delete the matching brackets/quotes to the left of cursor.
After call, mark is set at the matching bracket position, so you can `exchange-point-and-mark' to select it.
This command assumes the left of point is a right bracket, and there is a matching one before it.
What char is considered bracket or quote is determined by current syntax table.
URL `http://xahlee.info/emacs/emacs/emacs_delete_backward_char_or_bracket_text.html'
Version: 2017-07-02"
(interactive)
(let ((xp0 (point)) xp1)
(forward-sexp -1)
(setq xp1 (point))
(goto-char xp0)
(delete-char -1)
(goto-char xp1)
(delete-char 1)
(push-mark (point) t)
(goto-char (- xp0 2))))
(defun xah-delete-backward-char-or-bracket-text ()
"Delete 1 character or delete quote/bracket pair and inner text.
If the char to the left of cursor is a matching pair, delete it along with inner text, push the deleted text to `kill-ring'.
What char is considered bracket or quote is determined by current syntax table.
If `universal-argument' is called first, do not delete inner text.
URL `http://xahlee.info/emacs/emacs/emacs_delete_backward_char_or_bracket_text.html'
Version: 2017-07-02 2023-07-22 2023-07-30"
(interactive)
(if (and delete-selection-mode (region-active-p))
(delete-region (region-beginning) (region-end))
(cond
((prog2 (backward-char) (looking-at "\\s)") (forward-char))
(if current-prefix-arg
(xah-delete-backward-bracket-pair)
(xah-delete-backward-bracket-text))
)
((prog2 (backward-char) (looking-at "\\s(") (forward-char))
(message "left of cursor is opening bracket")
(let (xpOpenBracketLeft
(xpOpenBracketRight (point)) xisComment)
(backward-char)
(setq xpOpenBracketLeft (point))
(goto-char xpOpenBracketRight)
(forward-char)
(setq xisComment (nth 4 (syntax-ppss)))
(if xisComment
(progn
(message "cursor is in comment")
(goto-char xpOpenBracketLeft)
(if (forward-comment 1)
(kill-region (point) xpOpenBracketLeft)
(message "error hSnRp: parsing comment failed.")))
(progn
(message "right 1 char of cursor is not in comment")
(goto-char xpOpenBracketLeft)
(forward-sexp)
(if current-prefix-arg
(xah-delete-backward-bracket-pair)
(xah-delete-backward-bracket-text))))))
((prog2 (backward-char) (looking-at "\\s\"") (forward-char))
(if (nth 3 (syntax-ppss))
(progn
(backward-char)
(xah-delete-forward-bracket-pairs (not current-prefix-arg)))
(if current-prefix-arg
(xah-delete-backward-bracket-pair)
(xah-delete-backward-bracket-text))))
(t
(delete-char -1)))))
;; Delete batching bracket keybindings
(global-set-key (kbd "M-<delete>") 'xah-delete-forward-bracket-pairs)
(global-set-key (kbd "M-S-<delete>") 'xah-delete-backward-bracket-text)
(defvar xah-brackets '("“”" "()" "[]" "{}" "<>" "" "" "" "" "⦅⦆" "〚〛" "⦃⦄" "" "«»" "「」" "〈〉" "《》" "【】" "" "⦗⦘" "『』" "〖〗" "〘〙" "「」" "⟦⟧" "⟨⟩" "⟪⟫" "⟮⟯" "⟬⟭" "⌈⌉" "⌊⌋" "⦇⦈" "⦉⦊" "❛❜" "❝❞" "" "❪❫" "" "❬❭" "" "❰❱" "" "〈〉" "⦑⦒" "⧼⧽" "﹙﹚" "﹛﹜" "﹝﹞" "⁽⁾" "₍₎" "⦋⦌" "⦍⦎" "⦏⦐" "⁅⁆" "⸢⸣" "⸤⸥" "⟅⟆" "⦓⦔" "⦕⦖" "⸦⸧" "⸨⸩" "⦅⦆")
"A list of strings, each element is a string of 2 chars, the left bracket and a matching right bracket.
Used by `xah-select-text-in-quote' and others.")
(defconst xah-left-brackets
(mapcar (lambda (x) (substring x 0 1)) xah-brackets)
"List of left bracket chars. Each element is a string.")
(defconst xah-right-brackets
(mapcar (lambda (x) (substring x 1 2)) xah-brackets)
"List of right bracket chars. Each element is a string.")
(defun xah-goto-matching-bracket ()
"Move cursor to the matching bracket.
If cursor is not on a bracket, call `backward-up-list'.
The list of brackets to jump to is defined by `xah-left-brackets' and `xah-right-brackets'.
URL `http://xahlee.info/emacs/emacs/emacs_navigating_keys_for_brackets.html'
Version: 2016-11-22 2023-07-22"
(interactive)
(if (nth 3 (syntax-ppss))
(backward-up-list 1 'ESCAPE-STRINGS 'NO-SYNTAX-CROSSING)
(cond
((eq (char-after) ?\") (forward-sexp))
((eq (char-before) ?\") (backward-sexp))
((looking-at (regexp-opt xah-left-brackets))
(forward-sexp))
((prog2 (backward-char) (looking-at (regexp-opt xah-right-brackets)) (forward-char))
(backward-sexp))
(t (backward-up-list 1 'ESCAPE-STRINGS 'NO-SYNTAX-CROSSING)))))
;; Goto matching bracket keybindings
(global-set-key (kbd "M-<left>") 'xah-goto-matching-bracket)
(global-set-key (kbd "M-<right>") 'xah-goto-matching-bracket)
;;; ---> Buffer
;; Make ibuffer default
(defalias 'list-buffers 'ibuffer)
;; Minibuffer setup
(progn
(setq enable-recursive-minibuffers t)
(savehist-mode 0)
;; big minibuffer height, for ido to show choices vertically
(setq max-mini-window-height 0.5)
;; minibuffer, stop cursor going into prompt
(customize-set-variable
'minibuffer-prompt-properties
(quote (read-only t cursor-intangible t face minibuffer-prompt))))
;; Make buffer switch command do suggestions, also for find-file command
(if (version< emacs-version "28.1")
(progn
(progn
(require 'ido)
(ido-mode 1)
;; show choices vertically
(setf (nth 2 ido-decorations) "\n")
;; show any name that has the chars you typed
(setq ido-enable-flex-matching t)
;; use current pane for newly opened file
(setq ido-default-file-method 'selected-window)
;; use current pane for newly switched buffer
(setq ido-default-buffer-method 'selected-window)
)
(progn
;; minibuffer enhanced completion icomplete
(require 'icomplete)
(icomplete-mode 1)
;; show choices vertically
(setq icomplete-separator "\n")
(setq icomplete-hide-common-prefix nil)
(setq icomplete-in-buffer t)
(define-key icomplete-minibuffer-map (kbd "<right>") 'icomplete-forward-completions)
(define-key icomplete-minibuffer-map (kbd "<left>") 'icomplete-backward-completions)))
(fido-vertical-mode 1))
;; Use short answer
(if (version< emacs-version "28.1")
(defalias 'yes-or-no-p 'y-or-n-p)
(setq use-short-answers t))
;;; ---> Load other .el files
(load "~/.emacs.d/my-abbrev.el")
;;; ---> Get value PATH
;; get value of env var PATH
(getenv "PATH")
;;; ---> Emacs auto added
(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-enabled-themes '(atom-one-dark))
'(custom-safe-themes
'("0c860c4fe9df8cff6484c54d2ae263f19d935e4ff57019999edbda9c7eda50b8" default))
'(package-selected-packages '(gnu-elpa-keyring-update gnu-elpa atom-one-dark-theme)))
(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.
)