More Buffer Defaults

Emojify

If you use emojies, you can explore the emojify package. 🙂😍😊

You only need twemoji-v2 installed.



(use-package emojify

:commands (emojify-mode emojify-insert-emoji)

:config
(emojify-set-emoji-styles '(github ascii unicode))
(setq emojify-emoji-set "twemoji-v2") ; twemoji-v2-22, emojione-v2.2.6, emojione-v2.2.6-22, twemoji-v2, emojione-v2, emojione-v2-22, openmoji-v13-0

:hook
(org-mode-hook . emojify-mode)

);end emojify

You can call them like this in a hydra:


("i" emoji-insert "Insert Emoji" )
           ("s" emoji-list "Search Emoji" )
           ("r" emoji-recent "Search Recent Emoji" )

Insert Date And Time

You can use date and time stamps to track the time and schedule tasks.



;; Date and time functions
(setq current-date-time-format "%a %b %d %Y %H:%M:%S %Z ")
(setq current-date-format "%Y-%m-%d")
(setq current-time-format "%a %H:%M:%S")

(defun insert-current-date-time ()
  "insert the current date and time into current buffer.
Uses `current-date-time-format' for the formatting the date/time."
       (interactive)
;       (insert (let () (comment-start)))
       (insert (format-time-string current-date-time-format (current-time)))
       )

(defun insert-current-date ()
  "insert the current date and time into current buffer.
Uses `current-date-format' for the formatting the date/time."
       (interactive)
;       (insert (let () (comment-start)))
       (insert (format-time-string current-date-format (current-time)))
   )

(defun insert-current-time ()
  "insert the current time (1-week scope) into the current buffer."
       (interactive)
       (insert (format-time-string current-time-format (current-time)))
       )

(bind-key "\C-c\C-y" 'insert-current-date)
(bind-key "\C-c\C-t" 'insert-current-time)

New Frame Scratch Buffer

Open a new frame with a scratch buffer on the fly.





(defun new-frame-scratch-buffer ()
"Create a new scratch buffer -- \*hello-world\*"
(interactive)
  (let ((n 0)
        bufname buffer)
    (catch 'done
      (while t
        (setq bufname (concat "*hello-world"
          (if (= n 0) "" (int-to-string n))
            "*"))
        (setq n (1+ n))
        (when (not (get-buffer bufname))
          (setq buffer (get-buffer-create bufname))
          (with-current-buffer buffer
            (emacs-lisp-mode))
          ;; When called non-interactively, the `t` targets the other window (if it exists).
          (throw 'done (display-buffer buffer '(display-buffer-pop-up-frame .( (window-height .8) (window-width .8)))
)) )))))

; to make a new scratch buffer in a new frame
(bind-key "C-c b" 'new-frame-scratch-buffer)
(bind-key "C-c v" 'new-window-scratch-buffer)
;to kill a frame in emacs (also, C-x 0)
(bind-key "C-x C-c" 'delete-frame)
 ;make a new frame
(bind-key "C-x C-n" 'make-frame-command)

New Window Scratch Buffer

Open a new window with a scratch buffer.



;create scratch buffer in new window
(defun new-window-scratch-buffer ()
  "Create a new scratch buffer -- \*hello-world\*"
(interactive)
(let (($buf (generate-new-buffer "hello-world")))
(switch-to-buffer $buf)
(funcall initial-major-mode)
(setq buffer-offer-save t)
$buf
))

New Org Write Buffer

You can open an org-mode buffer if you want org-mode functionality in your scratch buffer.





(defun pos:open-temp-buffer ()
  "Open/create a temporary buffer for writing."
  (interactive)
  (let ((buf (get-buffer-create "*write*")))
    (with-current-buffer buf
      (org-mode)
;      (pjones:markdown-visual-line);
)
    (pop-to-buffer buf)))

Delete All Other Buffers

You can delete all the other open buffers.




;delete-all-buffers
(defun delete-all-other-buffers ()
  (interactive)
    (mapc 'kill-buffer (cdr (buffer-list (current-buffer)))))

Kill This Buffer




;Bind Kill This Buffer
(bind-key "\C-x\C-k" 'kill-this-buffer)

Cursor And Scroll Defaults

Set some cursor defaults.





;cursors, and mouse

(setq mouse-yank-at-point t)
(setq cursor-in-non-selected-windows t)

(blink-cursor-mode 0)                           ; Disable the cursor blinking
(setq x-stretch-cursor t)
(mouse-avoidance-mode 'banish)

;scrolling buffers, movement top to bottom

(setq fast-but-imprecise-scrolling t )
(setq scroll-conservatively 10000) ; Always scroll by one line
(setq scroll-conservatively 1000)

;"Don't hscroll unless needed"- ? More voodoo lisp.

;(setq hscroll-margin 1)
(setq scroll-margin 1)

;(setq scroll-margin 8)
(setq scroll-step 1)  ; keyboard scroll one line at a

;Keeps cursor in the same relative row during pgups and dwns
(setq scroll-preserve-screen-position t)

(setq recenter-positions '(5 top bottom))
;(recenter-top-bottom)

; Don't highlight matches with jump-char - it's distracting
(setq jump-char-lazy-highlight-face nil)

; Scroll 1 line at a time
;Fix the whole huge-jumps-scrolling-between-windows nastiness

;Accelerate the cursor when scrolling.
(load "accel" t)

; scroll N lines to screen edge
;speed up cursor
(setq auto-window-vscroll nil)

;cursor
(blink-cursor-mode 0)

;Push the mouse out of the way when the cursor approaches.
(mouse-avoidance-mode 'jump)

(use-package smooth-scrolling

:config
(require 'smooth-scrolling)
(smooth-scrolling-mode t)
(setq smooth-scroll/vscroll-step-size 1)
(setq smooth-scroll/hscroll-step-size 1)
(setq fast-but-imprecise-scrolling t)
:diminish
)

;backward/forward paragraph
(bind-key "M-p" 'backward-paragraph)
(bind-key "M-n" 'forward-paragraph)

;pop-to-mark-command
;(bind-key "<prior>" 'pop-to-mark-command)
;(bind-key "<next>" 'pop-to-mark-command)

;enables C-u C-<SPC>, to return to last mark, followed by C-<SPC> to cycle through all marks set
(setq set-mark-command-repeat-pop t)

;beginning end of buffer
(bind-key "<home>" 'beginning-of-buffer)
(bind-key "<end>" 'end-of-buffer)

Multiple Cursors





(use-package multiple-cursors
;:ensure t
;:commands (lots)

:config
(global-set-key (kbd "C-S-<mouse-1>") 'mc/add-cursor-on-click)
;(add-to-list 'mc/cmds-to-run-once '())
;(add-to-list 'mc/always-run-for-all '())
);

Multiple Cursors Hydra

You can edit lines with a multiple cursors hydra.




;define a title function

(setq multiple-cursors-title (with-faicon "desktop" "Multiple Cursors Command"))
;generate hydra

(pretty-hydra-define multiple-cursors-hydra (:foreign-keys warn :title multiple-cursors-title :quit-key "q" :color pink )
("A"
   (

    ("a" mc/mark-all-like-this "+ cursor/region all parts buffer match region")
    ("w" mc/mark-all-words-like-this "+ cursor/region buffers words match region" )
    ("s" mc/mark-all-in-region "+ cursor/region match strings in region")
    ("@" mc/mark-all-symbols-like-this "+ cursor/region buffer matching symbols")
    ("F" mc/mark-all-like-this-in-defun "+ cursor/region all part matches in function")
    ("W" mc/mark-all-words-like-this-in-defun "+ cursor/region all word matches in function")
    ("$" mc/mark-all-symbols-like-this-in-defun "+ cursor/regionall symbol matches in function")
    ("A" set-rectangular-region-anchor "set rectangular region anchor")
    ("H" mc-hide-unmatched-lines-mode "Hide/show unmatched lines")
    ("}" mc-cycle-forward "Cycle forward cursors")
    ("{" mc-cycle-backward "Cycle backward cursors")
);end A
"B"
   (
    ("n"  mc/mark-next-like-this "+ cursor/region next region match in buffer")
    ("p"  mc/mark-previous-like-this "+ cursor/region previous region match in buffer")    
    ("f"  mc/mark-next-like-this-word "+ cursor/region next word match in buffer")
    ("b"  mc/mark-previous-like-this-word "+ cursor/region previous word match in buffer")
    ("\)"  mc/mark-next-like-this-symbol "+ cursor/region next symbol match in buffer")
    ("\("  mc/mark-previous-like-this-symbol "+ cursor/region previous symbol match in buffer")
    ("\/"  mc/mark-next-word-like-this "Mark next word match in buffer")
    ("\\"  mc/mark-previous-word-like-this "Mark next word match in buffer")
    (">"  mc/mark-next-symbol-like-this "Mark next symbol match in buffer")
    ("<"  mc/mark-previous-symbol-like-this "Mark previous symbol match in buffer")
    
);end B
"C"
   (
    ("m" multiple-cursors-mode "Multiple Cursors Mode"  :toggle t)
    ("B" mc/edit-beginings-of-lines "Add cursor to start of each line in region" )    
    ("E" mc/edit-ends-of-lines "Add cursor to end of each line in region" )
    ("d" mc/mark-all-dwim "Mark all dwim ?")    
    ("t" mc/mark-all-like-this-dwim "Mark all similar tags - html")
    ("r" mc/reverse-regions "Mark all similar tags - html")
    ("<left>"  mc/mark-more-like-this-extended "Arrow keys mark/skip n/p occurances")
    ("P"  mc/mark-pop "Leave a cursor, move to next spot")
    ("h" hydra-helm/body "Return To Helm" :color blue )
    ("<SPC>" nil "Quit" :color blue )
);end miscellaneous
);end hydra body
);end pretty-hydra-multiple cursors

(bind-key "<C-m> c" 'multiple-cursors-hydra/body)

Better Scroll

Improve scrolling.




(use-package better-scroll
;:ensure t

:config
(global-set-key (kbd "C-M-n") 'better-scroll-down)
;(global-set-key (kbd "<prior> ") 'better-scroll-down)
(global-set-key (kbd "C-M-p") 'better-scroll-up)
;(global-set-key (kbd "<next>") 'better-scroll-up)

(global-set-key (kbd "<next>") 'better-scroll-down-other-window)
(global-set-key (kbd "<prior>") 'better-scroll-up-other-window)
;(setq better-scroll-align-type 'center)

);end better scroll

Buffer Move

Move the buffer.





(use-package buffer-move
:ensure t
;:init

:commands (buf-move)
;:config
;bind (
;:bind (
;("C-x" . package-function)
;:map minibuffer-local-map
;("C-r" . 'counsel-minibuffer-history))
;hook
);end package)

Shackle

You may want to use shackle often, those buffers can be pesky.




(use-package shackle
;:ensure t

:commands shackle-mode
:config
(setq shackle-default-rule '(:same t))
;(setq shackle-rules '((compilation-mode :noselect t))
;      shackle-default-rule '(:select t))
;(setq helm-display-function 'pop-to-buffer) ; make helm play nice
;(setq shackle-rules '(("\\`\\*helm.*?\\*\\'" :regexp t :align t :size 0.4)))
)

Beacon




;highlight cursor when jump window/buffer

(use-package beacon

:diminish
:commands beacon-mode

:init
(beacon-mode 1)

:config
;; only flash on window/buffer changes...
(setq beacon-blink-when-window-changes t)
(setq beacon-blink-when-window-scrolls nil)
(setq beacon-blink-when-point-moves nil)
(setq beacon-blink-duration .2)
(setq beacon-blink-delay .2)
(setq beacon-size 20)

);end beacon

Goto Line With Feedback

Show line numbers temporarily, while prompting for the line number input.




; go to line with feedback
;quit-selection-here

 (defun goto-line-with-feedback ()
   "Show line numbers temporarily, while prompting for the line number input"
   (interactive)
   (unwind-protect
       (progn
 (display-line-numbers-mode 1)
 (goto-line (read-number "Goto line: ")))
     (display-line-numbers-mode 0)))

Append Lines



(defun append-lines ()
"add next line to current line"
    (lambda ()
        (interactive)
            (join-line -1)))

Mwim - Beginning of Line & End of Line





(use-package mwim
:bind
("C-a" . mwim-beginning-of-code-or-line)
("C-e" . mwim-end-of-code-or-line)
);end mwim

Avy Jump to Character

You can enter letter combinations to move the cursor around.



(use-package avy

:commands (avy-goto-char avy-goto-char2 avy-goto-char-timer avy-goto-word avy-goto-word-1 avy-org-goto-heading-timer avy-org-refile-as-child)

;:config
;(global-set-key (kbd "C-;") 'avy-goto-char)

:bind
("C-;" . avy-goto-char)
);end avy

Buffers Hydra




;define a title function

(setq buffers-title (with-fileicon "broccoli" "Buffers Command"))

;generate hydra

(pretty-hydra-define buffers-hydra (:foreign-keys warn :title buffers-title :quit-key "q" :color pink )
("TABS"
   (

    ("T" tab-bar-mode "Toggle Tab-bar Mode"  :toggle t)
    ("6" tab-new "Open New Tab C-6" )
    ("9" tab-next "Next Tab C-9")
    ("3" tab-previous "Previous Tab C-3" )
    ("l" tab-bar-switch-to-previous-tab "Switch to last Tab" )
    ("@" tab-rename "Rename Current Tab C-M-n" )
    ("7" close-tab "Kill Tab C-7" )
    ("u" tab-bar-undo-close-tab "Undo closed Tab" )
    ("}" tab-move "Move Current Tab L/R"  )
    ("N" tab-bar-select-by-name "Select Tab Bar By name")
    ("*" switch-to-buffer-other-tab "Switch to Buffer Other tab C-8")
    ("$" find-file-other-tab "Find File Other Tab C-4")
    ("#" dired-other-tab "Dired Other Tab C-0")
;    ("t" new-window-scratch-buffer "New Scratch Tab in tab-mode")

);end A
"B"
   (
    ("d"  delete-all-other-buffers "Delete All Other Buffers" :color red)
    ("i" counsel-ibuffer "Quick switch to buffer" :color blue)
    ("I" ibuffer "Edit buffer list")
    ("R" pos-rename-current-file "Rename this file (and save)")
    ("<" previous-buffer "Previous Buffer")
    (">" next-buffer "Next Buffer")
    ("a" elwm-swap-left "Swap with buffer to left")
    ("e" elwm-swap-right "Swap with buffer to right")
    ("p" elwm-swap-up "Swap with buffer above")
    ("n" elwm-swap-down "Swap with buffer below")
    
);end B
"C"
   (
    ("s"  shackle-mode "Shackle Buffers")
    ("f"  new-frame-scratch-buffer "Make New Scratch Frame" )
    ("t"  new-window-scratch-buffer "Make New Scratch Tab or buffer")
    ("o" pos:open-temp-buffer "New Org Write Buffer")
    ("k" kill-buffer-and-window "Kill Buffer and Window")
    ("K" kill-this-buffer "Kill This Buffer C-x C-k")
    ;    ("x" centaur-tabs-open-in-external-application "Open in External App")
;    ("X" centaur-tabs-open-directory-in-external-application "Open Directory External")
;    ("1" centaur-tabs-select-beg-tab "Select First Tab")
;    ("0" centaur-tabs-select-end-tab "Select Last Tab")
    ("h" hydra-helm/body "Return To Helm" :color blue )
    ("<SPC>" nil "Quit" :color blue )
);end miscellaneous
);end hydra body
);end pretty-hydra-CentaurTabs

(bind-key "<C-m> t" 'buffers-hydra/body)