 ;;; core-editor.el --- filling the editor shaped hole in the Emacs OS
 
-;; Bookmarks
-(setq bookmark-default-file (concat doom-temp-dir "/bookmarks")
-      bookmark-save-flag t)
-
-;; Formatting
-(setq delete-trailing-lines nil
+(setq shift-select-mode t ; activate mark on shift-click
+      ;; Save clipboard contents into kill-ring before replacing them
+      save-interprogram-paste-before-kill t
+      ;; Bookmarks
+      bookmark-default-file (concat doom-cache-dir "/bookmarks")
+      bookmark-save-flag t
+      ;; Formatting
+      delete-trailing-lines nil
       fill-column 80
-      sentence-end-double-space nil)
-
-;; Scrolling
-(setq hscroll-margin 1
+      sentence-end-double-space nil
+      ;; Scrolling
+      hscroll-margin 1
       hscroll-step 1
       scroll-conservatively 1001
       scroll-margin 0
-      scroll-preserve-screen-position t)
-
-;; Whitespace (see `editorconfig')
-(setq indent-tabs-mode nil
+      scroll-preserve-screen-position t
+      ;; Whitespace (see `editorconfig')
+      indent-tabs-mode nil
       require-final-newline t
       tab-always-indent t
       tab-width 4
       tabify-regexp "^\t* [ \t]+"  ; for :retab
       whitespace-line-column fill-column
       whitespace-style
-      '(face tabs tab-mark trailing indentation lines-tail)
+      '(face tabs tab-mark trailing lines-tail)
       whitespace-display-mappings
-      '((tab-mark ?\t [?› ?\t]) (newline-mark 10  [36 10])))
-
-;; Wrapping
-(setq truncate-lines t
+      '((tab-mark ?\t [?› ?\t]) (newline-mark 10  [36 10]))
+      ;; Wrapping
+      truncate-lines t
       truncate-partial-width-windows 50
       visual-fill-column-center-text nil
-      word-wrap t)
-
-;; Regions
-(setq shift-select-mode t)
-
-;; Save point across sessions
-(require 'saveplace)
-(setq save-place-file (concat doom-temp-dir "saveplace")
-      save-place t)
-(when (>= emacs-major-version 25)
-  (save-place-mode +1))
-
-;; Save history across sessions
-(require 'savehist)
-(setq savehist-file (concat doom-temp-dir "savehist")
-      savehist-save-minibuffer-history t
-      savehist-additional-variables
-      '(kill-ring search-ring regexp-search-ring))
-(savehist-mode 1)
-
-;; Remove text-property cruft from history
-(defun unpropertize-savehist ()
-  (mapc (lambda (list)
-          (when (boundp list)
-            (set list (mapcar 'substring-no-properties (eval list)))))
-        '(kill-ring minibuffer-history helm-grep-history helm-ff-history
-          file-name-history read-expression-history extended-command-history
-          evil-ex-history)))
-(add-hook 'kill-emacs-hook    'unpropertize-savehist)
-(add-hook 'savehist-save-hook 'unpropertize-savehist)
-
-;; Keep track of recently opened files
-(require 'recentf)
-(setq recentf-save-file (concat doom-temp-dir "recentf")
-      recentf-exclude '("/tmp/" "/ssh:" "\\.?ido\\.last$" "\\.revive$" "/TAGS$"
-                        "emacs\\.d/private/cache/.+" "emacs\\.d/workgroups/.+$"
-                        "wg-default" "/company-statistics-cache.el$"
-                        "^/var/folders/.+$" "^/tmp/.+")
-      recentf-max-menu-items 0
-      recentf-max-saved-items 250
-      recentf-auto-cleanup 600
-      recentf-filename-handlers '(abbreviate-file-name))
-(recentf-mode 1)
-
-;; Ediff
-(add-hook! ediff-load
-  (setq ediff-diff-options           "-w"
-        ediff-split-window-function 'split-window-horizontally
-        ediff-window-setup-function 'ediff-setup-windows-plain)) ; no extra frames
-
-;; revert buffers for changed files
-(global-auto-revert-mode +1)
-
-
-;;
-;; Plugins
-;;
-
+      word-wrap t
+      ;; clipboard
+      x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)
+      ;; Use a shared clipboard
+      select-enable-clipboard t
+      select-enable-primary t)
+
+(unless noninteractive
+  ;; Save point across sessions
+  (require 'saveplace)
+  (setq save-place-file (concat doom-cache-dir "saveplace")
+        save-place t)
+  (when (>= emacs-major-version 25)
+    (save-place-mode +1))
+
+  ;; Save history across sessions
+  (require 'savehist)
+  (setq savehist-file (concat doom-cache-dir "savehist")
+        savehist-save-minibuffer-history t
+        savehist-additional-variables
+        '(kill-ring search-ring regexp-search-ring))
+  (savehist-mode 1)
+
+  ;; Remove text-property cruft from history
+  (defun unpropertize-savehist ()
+    (mapc (lambda (list)
+            (when (boundp list)
+              (set list (mapcar 'substring-no-properties (eval list)))))
+          '(kill-ring minibuffer-history helm-grep-history helm-ff-history
+            file-name-history read-expression-history extended-command-history
+            evil-ex-history)))
+  (add-hook 'kill-emacs-hook    'unpropertize-savehist)
+  (add-hook 'savehist-save-hook 'unpropertize-savehist)
+
+  ;; Keep track of recently opened files
+  (require 'recentf)
+  (setq recentf-save-file (concat doom-cache-dir "recentf")
+        recentf-exclude '("/tmp/" "/ssh:" "\\.?ido\\.last$" "\\.revive$" "/TAGS$"
+                          "emacs\\.d/private/cache/.+" "emacs\\.d/workgroups/.+$"
+                          "wg-default" "/company-statistics-cache.el$"
+                          "^/var/folders/.+$" "^/tmp/.+")
+        recentf-max-menu-items 0
+        recentf-max-saved-items 250
+        recentf-auto-cleanup 600
+        recentf-filename-handlers '(abbreviate-file-name))
+  (recentf-mode 1)
+
+  ;; Ediff
+  (add-hook! ediff-load
+    (setq ediff-diff-options           "-w"
+          ediff-split-window-function 'split-window-horizontally
+          ediff-window-setup-function 'ediff-setup-windows-plain)) ; no extra frames
+
+  ;; revert buffers for changed files
+  (global-auto-revert-mode 1)
+  (setq auto-revert-verbose nil))
+
+
+;;
+;; Core Plugins
+;;
+
+;; Handles whitespace (tabs/spaces) settings externally. This way projects can
+;; specify their own formatting rules.
 (package! editorconfig :demand t
   :mode ("\\.?editorconfig$" . editorconfig-conf-mode)
   :config (editorconfig-mode +1)
-  (push 'doom-mode editorconfig-exclude-modes)
   ;; Show whitespace in tabs indentation mode
   (add-hook! 'editorconfig-custom-hooks
     (if indent-tabs-mode (whitespace-mode +1))))
 
+;; Auto-close delimiters and blocks as you type
 (package! smartparens :demand t
   :init
   (setq sp-autowrap-region nil          ; let evil-surround handle this

  )

(package! rotate-text
  :quelpa (rotate-text :fetcher github :repo "debug-ito/rotate-text.el")
  :commands (rotate-text rotate-text-backward)
  :config (push '("true" "false") rotate-text-words))



(package! emr
  :commands (emr-show-refactor-menu emr-declare-command)
  :config (emr-initialize)
  (define-key popup-menu-keymap [escape] 'keyboard-quit))

(package! expand-region :commands (er/expand-region er/contract-region er/mark-symbol er/mark-word))
