Key binding utili

Se vi va condividete i key binding che ritenete utile, io per ora ne metto un paio che trovo super utili ma che mi dimentico sempre

C-% → Registra la posizione del punto ed il buffer nella variabile org-mark-ring, lo fa anche di default quando usiamo il comando per aprire un link org-open-at-point o la scorciatoia C-c C-o
C-& → Va al punto salvato nella org-mark-ring
M-! → Esegue un comando nella shell
M-& → Esegue un comando nella shell ma in modalita asincrona
M-g g → Chiedera di inserire una linea e ci andra

Alcuni dei keybinds che uso

(global-set-key (kbd "C-=") 'text-scale-increase)
(global-set-key (kbd "C--") 'text-scale-decrease)
(global-set-key (kbd "C-h C-l") 'find-library)
(global-set-key (kbd "C-h M-h") 'remove-hook)
(global-set-key (kbd "C-h C-b") 'button-describe)
(global-set-key (kbd "C-h C-v") 'set-variable)
(global-set-key (kbd "C-x C-g") 'find-grep)
(global-set-key (kbd "C-c p") 'beginning-of-buffer)
(global-set-key (kbd "C-c n") 'end-of-buffer)
(global-set-key (kbd "C-t") #'transpose-words)
(global-set-key (kbd "M-t") #'transpose-chars)
(global-set-key (kbd "C-S-d") 'kill-word)
(global-set-key (kbd "C-S-o") 'duplicate-line)
(global-set-key (kbd "C-S-w") 'mark-word)
(global-set-key (kbd "C-c C-p") 'laluxx/find-package-source-code)
(global-set-key (kbd "C-x C-r") 'consult-recent-file)
(global-set-key (kbd "C-h C-f") 'describe-face)
(global-set-key (kbd "C-h t") 'consult-theme)
(global-set-key (kbd "C-x k") 'kill-current-buffer)
(global-set-key (kbd "C-c i") 'consult-imenu)
(global-set-key (kbd "C-x f") 'consult-find)
(global-set-key (kbd "M-n") 'forward-paragraph) 
(global-set-key (kbd "M-p") 'backward-paragraph)
(global-set-key (kbd "C-h C-e") #'consult-flycheck)


(defun laluxx/mwim-beginning-of-line ()
  "Move to beginning of line or string intelligently.
If inside a string:
- First call moves to beginning of string content
- Second call moves to beginning of line
If not in string, moves to beginning of line."
  (interactive)
  (let ((string-bounds (laluxx/mwim--in-string-p))
        (orig-point (point)))
    (if (not string-bounds)
        (beginning-of-line)
      (if (= (point) (car string-bounds))
          (beginning-of-line)
        (goto-char (car string-bounds))))))

(defun laluxx/mwim-end-of-line ()
  "Move to end of line or string intelligently.
If inside a string:
- First call moves to end of string content
- Second call moves to end of line
If not in string, moves to end of line."
  (interactive)
  (let ((string-bounds (laluxx/mwim--in-string-p))
        (orig-point (point)))
    (if (not string-bounds)
        (end-of-line)
      (if (= (point) (cdr string-bounds))
          (end-of-line)
        (goto-char (cdr string-bounds))))))

(global-set-key (kbd "C-a") #'laluxx/mwim-beginning-of-line)
(global-set-key (kbd "C-e") #'laluxx/mwim-end-of-line)

(defun laluxx/dired-jump-or-kill ()
  "Jump to Dired buffer in another window or kill the Dired buffer if already in one."
  (interactive)
  (if (eq major-mode 'dired-mode)
      (progn
        (kill-this-buffer)
        (delete-window))
    (dired-jump-other-window)))

(global-set-key (kbd "C-x C-l") 'laluxx/dired-jump-or-kill)
(global-set-key (kbd "C-h C-s") 'eww)
(global-set-key (kbd "C-h g") #'magit-status)
(global-set-key (kbd "C-h C-c") #'magit-log-all)


(defun laluxx/toggle-ielm ()
  "Toggle ielm buffer."
  (interactive)
  (toggle-buffer "*ielm*" #'ielm))

(global-set-key (kbd "C-c C-i") 'laluxx/toggle-ielm)
(global-set-key (kbd "C-h w") 'woman)

(defun laluxx/delete-blank-lines ()
  (interactive)
  (delete-blank-lines)
  (open-line 1)
  (next-line 1)
  (open-line 1))

(global-set-key (kbd "C-x C-o") 'laluxx/delete-blank-lines)


(defun laluxx/adjust-hex-color (hex-string delta)
  "Adjust each RGB component of HEX-STRING by DELTA."
  (let* ((rgb-str (substring hex-string 1))  ; Remove # prefix
         (rgb-val (string-to-number rgb-str 16))
         (r (lsh rgb-val -16))
         (g (logand (lsh rgb-val -8) #xFF))
         (b (logand rgb-val #xFF))
         (new-r (min 255 (max 0 (+ r delta))))
         (new-g (min 255 (max 0 (+ g delta))))
         (new-b (min 255 (max 0 (+ b delta)))))
    (format "#%02x%02x%02x" new-r new-g new-b)))

;; NOTE Useful for macros
(defun laluxx/smart-increment-at-point (&optional n)
  "Increment number or adjust hex color at point by N (default 1)."
  (interactive "p")
  (or n (setq n 1))
  (save-excursion
    (skip-chars-backward "0123456789abcdefABCDEF#")
    (cond
     ;; Hex color case
     ((looking-at "#[0-9a-fA-F]\\{6\\}")
      (let* ((hex-color (match-string 0))
             (new-color (laluxx/adjust-hex-color hex-color n)))
        (replace-match new-color)))
     ;; Number case
     ((looking-at "[0-9]+")
      (replace-match
       (number-to-string (+ (string-to-number (match-string 0)) n))))
     (t (error "No number or hex color at point")))))

(defun laluxx/smart-decrement-at-point (&optional n)
  "Decrement number or adjust hex color at point by N (default 1)."
  (interactive "p")
  (laluxx/smart-increment-at-point (- (or n 1))))

;; Key bindings
(global-set-key (kbd "<XF86AudioRaiseVolume>") 'laluxx/smart-increment-at-point)

1 Like

super interessante … spiegami un po l’utilizzo delle C-a e C-e diverso dalle funzioni standard di spostamento a inizio fine riga.

Dovremmo fare anche una sezione funzioni utili, ho visto che ne hai delle interessanti !!!

A questo proposito stavo sbirciando tra le tue funzioni e ho visto quella che usi per cancellare le line vuote che non ho compreso a pieno, nel senso ho visto che la funzione standar delete-blank-lines, se usata a fine buffer, cancella tutte le righe costringendoti a crearne una nuova ogni volta … ma provando la tua fun ho notato che se ti trovi inmezzo al testo il risultato non e’ quello atteso come mostro in questi screen

Prima di lanciare la cancellazione della linea

Dopo aver cancellato la linea ?!?!?!

Nel senso che invece di eliminare aggiunge ed in oltre se lo lanci inmezzo ad un testo fa danni !!!

Per quello che e’ il mio pensiero la modificherei cosi:

(defun laluxx/delete-blank-lines ()
     (interactive)
     (delete-blank-lines)
     (if (eobp)
         (open-line 1)
       nil))

l’ho pensata cosi eobp ritorna t se sei a fine buffer e nel caso aggiunge una linea altrimenti usa il comportamento standard di delete-blank-line

Ovviamente e’ una mia visione della cosa :smile:

Comportamento di C-a e C-e

example_trimmed

Quando il cursore si trova all'interno di una stringa:

  • C-a prima si sposta all'inizio della stringa, se chiamato ancora all'inizio della riga
  • C-e prima si sposta alla fine della stringa, se chiamato ancora alla fine della riga

Comunque hai ragione ‘laluxx/delete-blank-lines’ la avevo scritta veloce

1 Like

Ha ecco cosi eviti l’uso di M-f / M-b ed usi direttamente solo C-a / C-e … ottima idea !!!

E per curiosita come hai implementato la funzione laluxx/mwim--in-string-p