From 8c2ab11618f2a82b9953293ff96511e8348ba6e0 Mon Sep 17 00:00:00 2001 From: Chizi123 <joelgrun@gmail.com> Date: Wed, 21 Nov 2018 13:18:28 +0000 Subject: [PATCH] readding custom/ after removed --- custom/setup-editing.el | 226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 226 insertions(+), 0 deletions(-) diff --git a/custom/setup-editing.el b/custom/setup-editing.el new file mode 100644 index 0000000..e5f89f3 --- /dev/null +++ b/custom/setup-editing.el @@ -0,0 +1,226 @@ +(provide 'setup-editing) + +;; GROUP: Editing -> Editing Basics +(setq global-mark-ring-max 5000 ; increase mark ring to contains 5000 entries + mark-ring-max 5000 ; increase kill ring to contains 5000 entries + mode-require-final-newline t ; add a newline to end of file + ) + +(setq c-default-style "linux") + +(set-terminal-coding-system 'utf-8) +(set-keyboard-coding-system 'utf-8) +(set-language-environment "UTF-8") +(prefer-coding-system 'utf-8) + +(setq-default indent-tabs-mode t) +(delete-selection-mode) +(global-set-key (kbd "RET") 'newline-and-indent) + +;; GROUP: Editing -> Killing +(setq + kill-ring-max 5000 ; increase kill-ring capacity + kill-whole-line t ; if NIL, kill whole line and move the next line up + ) + +;; display whitespace characters +(global-set-key (kbd "C-c w") 'whitespace-mode) + +;; show important whitespace in diff-mode +(add-hook 'diff-mode-hook (lambda () + (setq-local whitespace-style + '(face + tabs + tab-mark + spaces + space-mark + trailing + indentation::space + indentation::tab + newline + newline-mark)) + (whitespace-mode 1))) + + +(defun prelude-move-beginning-of-line (arg) + "Move point back to indentation of beginning of line. + +Move point to the first non-whitespace character on this line. +If point is already there, move to the beginning of the line. +Effectively toggle between the first non-whitespace character and +the beginning of the line. + +If ARG is not nil or 1, move forward ARG - 1 lines first. If +point reaches the beginning or end of the buffer, stop there." + (interactive "^p") + (setq arg (or arg 1)) + + ;; Move lines first + (when (/= arg 1) + (let ((line-move-visual nil)) + (forward-line (1- arg)))) + + (let ((orig-point (point))) + (back-to-indentation) + (when (= orig-point (point)) + (move-beginning-of-line 1)))) + +(global-set-key (kbd "C-a") 'prelude-move-beginning-of-line) + +(defadvice kill-ring-save (before slick-copy activate compile) + "When called interactively with no active region, copy a single +line instead." + (interactive + (if mark-active (list (region-beginning) (region-end)) + (message "Copied line") + (list (line-beginning-position) + (line-beginning-position 2))))) + +(defadvice kill-region (before slick-cut activate compile) + "When called interactively with no active region, kill a single + line instead." + (interactive + (if mark-active (list (region-beginning) (region-end)) + (list (line-beginning-position) + (line-beginning-position 2))))) + +;; kill a line, including whitespace characters until next non-whiepsace character +;; of next line +(defadvice kill-line (before check-position activate) + (if (member major-mode + '(emacs-lisp-mode scheme-mode lisp-mode + c-mode c++-mode objc-mode + latex-mode plain-tex-mode)) + (if (and (eolp) (not (bolp))) + (progn (forward-char 1) + (just-one-space 0) + (backward-char 1))))) + +;; taken from prelude-editor.el +;; automatically indenting yanked text if in programming-modes +(defvar yank-indent-modes + '(LaTeX-mode TeX-mode) + "Modes in which to indent regions that are yanked (or yank-popped). +Only modes that don't derive from `prog-mode' should be listed here.") + +(defvar yank-indent-blacklisted-modes + '(python-mode slim-mode haml-mode) + "Modes for which auto-indenting is suppressed.") + +(defvar yank-advised-indent-threshold 1000 + "Threshold (# chars) over which indentation does not automatically occur.") + +(defun yank-advised-indent-function (beg end) + "Do indentation, as long as the region isn't too large." + (if (<= (- end beg) yank-advised-indent-threshold) + (indent-region beg end nil))) + +(defadvice yank (after yank-indent activate) + "If current mode is one of 'yank-indent-modes, +indent yanked text (with prefix arg don't indent)." + (if (and (not (ad-get-arg 0)) + (not (member major-mode yank-indent-blacklisted-modes)) + (or (derived-mode-p 'prog-mode) + (member major-mode yank-indent-modes))) + (let ((transient-mark-mode nil)) + (yank-advised-indent-function (region-beginning) (region-end))))) + +(defadvice yank-pop (after yank-pop-indent activate) + "If current mode is one of `yank-indent-modes', +indent yanked text (with prefix arg don't indent)." + (when (and (not (ad-get-arg 0)) + (not (member major-mode yank-indent-blacklisted-modes)) + (or (derived-mode-p 'prog-mode) + (member major-mode yank-indent-modes))) + (let ((transient-mark-mode nil)) + (yank-advised-indent-function (region-beginning) (region-end))))) + +;; prelude-core.el +(defun prelude-duplicate-current-line-or-region (arg) + "Duplicates the current line or region ARG times. +If there's no region, the current line will be duplicated. However, if +there's a region, all lines that region covers will be duplicated." + (interactive "p") + (pcase-let* ((origin (point)) + (`(,beg . ,end) (prelude-get-positions-of-line-or-region)) + (region (buffer-substring-no-properties beg end))) + (-dotimes arg + (lambda (n) + (goto-char end) + (newline) + (insert region) + (setq end (point)))) + (goto-char (+ origin (* (length region) arg) arg)))) + +;; prelude-core.el +(defun indent-buffer () + "Indent the currently visited buffer." + (interactive) + (indent-region (point-min) (point-max))) + +;; prelude-editing.el +(defcustom prelude-indent-sensitive-modes + '(coffee-mode python-mode slim-mode haml-mode yaml-mode) + "Modes for which auto-indenting is suppressed." + :type 'list) + +(defun indent-region-or-buffer () + "Indent a region if selected, otherwise the whole buffer." + (interactive) + (unless (member major-mode prelude-indent-sensitive-modes) + (save-excursion + (if (region-active-p) + (progn + (indent-region (region-beginning) (region-end)) + (message "Indented selected region.")) + (progn + (indent-buffer) + (message "Indented buffer."))) + (whitespace-cleanup)))) + +(global-set-key (kbd "C-c i") 'indent-region-or-buffer) + +;; add duplicate line function from Prelude +;; taken from prelude-core.el +(defun prelude-get-positions-of-line-or-region () + "Return positions (beg . end) of the current line +or region." + (let (beg end) + (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)) + (cons beg end))) + +(defun kill-default-buffer () + "Kill the currently active buffer -- set to C-x k so that users are not asked which buffer they want to kill." + (interactive) + (let (kill-buffer-query-functions) (kill-buffer))) + +(global-set-key (kbd "C-x k") 'kill-default-buffer) + +;; smart openline +(defun prelude-smart-open-line (arg) + "Insert an empty line after the current line. +Position the cursor at its beginning, according to the current mode. +With a prefix ARG open line above the current line." + (interactive "P") + (if arg + (prelude-smart-open-line-above) + (progn + (move-end-of-line nil) + (newline-and-indent)))) + +(defun prelude-smart-open-line-above () + "Insert an empty line above the current line. +Position the cursor at it's beginning, according to the current mode." + (interactive) + (move-beginning-of-line nil) + (newline-and-indent) + (forward-line -1) + (indent-according-to-mode)) + +(global-set-key (kbd "C-o") 'prelude-smart-open-line) +(global-set-key (kbd "M-o") 'open-line) -- Gitblit v1.9.3