This commit is contained in:
dan 2020-01-03 09:13:53 +01:00
parent 5da9115765
commit 8d47a2026e

582
emacs Normal file
View File

@ -0,0 +1,582 @@
;;;;;;;;;;;;;;;;;;;;;;
;; Customs Iniziali ;;
;;;;;;;;;;;;;;;;;;;;;;
(custom-set-variables
'(case-fold-search t)
'(current-language-environment "English")
'(uniquify-buffer-name-style (quote forward) nil (uniquify)))
(custom-set-faces
)
;; No splash screen, thank you kindly
(setq inhibit-startup-message t)
;; No beep
(setq visible-bell t)
;; y e n invece che yes e no
(fset 'yes-or-no-p 'y-or-n-p)
;; Dont ask me if i want to use those commands
;; disabilitati di default
(put 'downcase-region 'disabled nil)
(put 'upcase-region 'disabled nil)
;; Carica Lisp path
(setq load-path (cons "~/.emacs.d/lisp/" load-path))
;; Carica themes path
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/")
;; Debug errors
;(setq debug-on-error t)
;; Set default mode (anche no)
;(setq default-major-mode 'write-mode)
;;;;;;;;;;;;;;;;;;
;; Backup Files ;;
;;;;;;;;;;;;;;;;;;
;; Non creare files di backup
;(setq make-backup-files nil)
;; Disattiva l'autosave
(setq auto-save-default nil)
;; Intervallo dell'autosave
;(setq-default auto-save-interval 0)
;; Delete unnecessary autosave files
(setq delete-auto-save-files t)
;; Delete oldversion files
;(setq delete-old-versions t)
;; Setta la directory di backup
(setq backup-directory-alist `(("." . "~/.saves")))
;; Backup tramite hardcopy
(setq backup-by-copying t)
;; Quante copie? 2 antiche e 6 nuove per totale di 8
(setq delete-old-versions t
kept-new-versions 6
kept-old-versions 2
version-control t)
;; Non backuppare i *.gpg
(defvar my-backup-ignore-regexps (list "\\.gpg$")
"*List of filename regexps to not backup")
(defun my-backup-enable-p (name)
"Filter certain file backups"
(when (normal-backup-enable-predicate name)
(let ((backup t))
(mapc (lambda (re)
(setq backup (and backup (not (string-match re name)))))
my-backup-ignore-regexps)
backup)))
(setq backup-enable-predicate 'my-backup-enable-p)
;;;;;;;;;;;;;;;;;;;;;;
;; Saving sessions ;;;
;;;;;;;;;;;;;;;;;;;;;;
;; open automaticamente that particular file
; (find-file "/home/dan/foo.md")
;; Remember last session
;(desktop-save-mode 1)
;; Per disattivare: M-x desktop-clear
;;;;;;;;;;;;;;;;;
;; Emacs Screen:
;;
;; | title bar of terminal window
;; | menu bar
;; |
;; | buffer
;; |
;; | mode line
;; | minibuffer
;;;;;;;;;;;;;;;;;
;; Show buffer name in title-bar per xterm
;(setq frame-title-format "emacs - %b")
;; No menubar
(menu-bar-mode -1)
;; Se menubar is on (default) la usi con il mouse in xemacs
;; e con F10 e le frecce in terminale.
;; usa la menubar via keys
;(setq tty-menu-open-use-tmm t)
;; Add a new menubar element
;(define-key-after (lookup-key global-map [menu-bar edit])
; [startup] '("Toggle Truncate Lines" . (lambda () (interactive)
; (setq-default truncate-lines (not truncate-lines)))) [calendar])
;; Buffer: quanto e' una tab
(setq-default tab-width 4)
;; usa spazi invece che tabs
(setq-default indent-tabs-mode nil)
;; attiva il wrap. il default e' 70 chars
(add-hook 'text-mode-hook 'turn-on-auto-fill)
;; Quanto wrap? facciamo 80
;; C-u 60 C-x f, ma anche C-x f 60
(add-hook 'text-mode-hook '(lambda () (setq fill-column 80)))
;; Scroll just one line
(setq scroll-step 1)
;; Down arrow wont insert newline
(setq-default next-line-add-newlines nil)
;; Large margins when writing prose
(defun my-set-margins ()
"Set margins in current buffer."
(setq left-margin-width 3)
(setq right-margin-width 2))
(add-hook 'markdown-mode-hook 'my-set-margins)
;(add-hook 'text-mode-hook 'my-set-margins)
;; Niente scrollbar per xterm
;(tool-bar-mode nil)
;(toggle-scroll-bar -1)
;;;;;;;;;;;;;;;
;; Mode line ;;
;;;;;;;;;;;;;;;
;; Column number highlighting on
(column-number-mode t)
;; Show line number
(setq-default line-number-mode t)
;; Show buffer and region size indication
(size-indication-mode 1)
;; Show auto numero di caratteri in region
(require 'modeline-posn)
;; Show file path in mode line con C-c z
(defun show-file-name ()
"Show the full path file name in the minibuffer."
(interactive)
(message (buffer-file-name))
(kill-new (file-truename buffer-file-name))
)
(global-set-key "\C-cz" 'show-file-name)
; Show time
(display-time-mode 1)
;(defface egoge-display-time
; '((((type x w32 mac))
; ;; #060525 is the background colour of my default face.
; (:foreground "#060525" :inherit bold))
; (((type tty))
; (:foreground "blue")))
; "Face used to display the time in the mode line.")
(defface pretty-display-time
'((((type tty))
(:foreground "blue")))
"Face used to display the time in the mode line.")
;; Time in the modeline to be displayed in `pretty-display-time-face'
(setq display-time-string-forms
'((propertize (concat " " 24-hours ":" minutes " ")
'face 'pretty-display-time)))
; Show battery indicator
(display-battery-mode 1)
;; Show chars/words in region/buffer
;; count-words-region/buffer e count-char-region/buffer
(defun count-words-buffer ()
(interactive)
(save-excursion
(let ((count 0))
(goto-char (point-min))
(while (< (point) (point-max))
(forward-word 1)
(setq count (1+ count)))
(message "il buffer contiene %d words." count))))
(defun count-words-region (start end)
(interactive "r")
(save-excursion
(let ((count 0))
(goto-char start)
(while (< (point) end )
(forward-word 1)
(setq count (1+ count)))
(message "la regione contiene %d words." count))))
(defun count-char-buffer ()
(interactive)
(save-excursion
(let ((count 0))
(goto-char (point-min))
(while (< (point) (point-max))
(forward-char 1)
(setq count (1+ count)))
(message "il buffer contiene %d characters." count))))
(global-set-key "\e\e\c" 'count-char-buffer)
(defun count-char-region (start end)
(interactive "r")
(save-excursion
(let ((count 0))
(goto-char start)
(while (< (point) end )
(forward-char 1)
(setq count (1+ count)))
(message "la regione contiene %d characters." count))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Colori ed Evidenziatori ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ZenBurn Theme
(load-theme 'zenburn t)
;; Highlight search and replace
(setq query-replace-highlight t)
(setq search-highlight t)
;; Highlight marked region
(transient-mark-mode t)
;; Highlight current line
;(set-face-attribute hl-line-face nil :underline t)
;; Highlight matching parenthesis
;(require 'paren)
;(show-paren-mode t)
;; Highlight l'ultima linea prima di scrollare via
(require 'highlight-context-line)
;;;;;;;;;;;;;;
;; MARKDOWN ;;
;;;;;;;;;;;;;;
(autoload 'markdown-mode "markdown-mode" "Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
;; Usa pandoc per la conversione in html: C-c C-c c
(defun convert-markdown-to (newtype)
(interactive "sOutput[html|html5|rtf|slidy|mediawiki|revealjs|latex|..]: ")
(let ((current-document (buffer-file-name))
(temp-filename (concat "./output." newtype)))
(with-temp-file temp-filename
(call-process-shell-command (concat "pandoc -s -f markdown -t " newtype)
nil t nil current-document))
(browse-url temp-filename)))
(eval-after-load "markdown-mode"
'(define-key markdown-mode-map (kbd "C-c C-c c") 'convert-markdown-to))
;;;;;;;;;;;;;;
;; ORG MODE ;;
;;;;;;;;;;;;;;
(require 'org)
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
(define-key global-map "\C-cl" 'org-store-link)
(define-key global-map "\C-ca" 'org-agenda)
(setq org-log-done t)
;(add-hook 'org-mode-hook 'turn-on-font-lock) ; not needed when global-font-lock-mode is on
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
;; Startup folding mode
(setq org-startup-folded "showall")
;; si può definire per-file
;; #+STARTUP: fold
;; #+STARTUP: nofold
;; #+STARTUP: content
;; #+STARTUP: showeverything
;; Segui i link con tasto RET
(setq org-return-follows-link t)
; Quali sono i file che Agenda deve considerare quando cerca i TODO
(setq org-agenda-files (list "~/org/inbox.org"
"~/org/memo.org"
"~/org/work.org"
"~/org/gatta.org"
"~/org/moto.org"
"~/org/idee.org"
"~/org/spesa.org"
"~/org/someday.org"))
;(setq org-agenda-custom-commands
; '(("w" todo "WAIT" nil)
; ("n" todo "NEXT" nil)
; ("d" "Agenda + Next Actions" ((agenda) (todo "NEXT"))))
; )
;; Colora i TODO
;(setq org-todo-keywords
; (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
; (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING"))))
; (setq org-todo-keyword-faces
; (quote (("TODO" :foreground "red" :weight bold)
; ("NEXT" :foreground "forest green" :weight bold)
; ("DONE" :foreground "forest green" :weight bold))))
; ("WAIT" :foreground "blue" :weight bold)
; ("HOLD" :foreground "magenta" :weight bold)
; ("CANCELLED" :foreground "forest green" :weight bold)
; ("MEETING" :foreground "forest green" :weight bold)
; ("PHONE" :foreground "forest green" :weight bold))))
;; avail: orange, magenta, red, forest green, blue,
;;;;;;;;;;;;;;;
;; POST MODE ;;
;;;;;;;;;;;;;;;
;; carica il modulo post
(require 'post)
;; Usenet RFC 1855 stipulates we limit email 72 char per line
(add-hook 'post-mode-hook '(lambda () (setq fill-column 72)))
;; post.el removes the signatures that are cited by default
;; but certain people write their prose below the '--' line.
(setq post-kill-quoted-sig nil)
;; una chiave, visto che lo devo lanciare manualmente ogni volta
;(global-set-key "\e\e\p" 'post-mode)
;;;;;;;;;;;;;;;
;; Bookmarks ;;
;;;;;;;;;;;;;;;
;; shortcut: C-x a e (expand-abbrev) and RET
;(defun bookmark-to-abbrevs ()
; "Create abbrevs based on `bookmark-alist'."
; (dolist (bookmark bookmark-alist)
; (let* ((name (car bookmark))
; (file (bookmark-get-filename name)))
; (define-abbrev global-abbrev-table name file))))
;;;;;;;;;;;;;;;;;;
;;; Easy PG mode ;;
;;;;;;;;;;;;;;;;;;;
;; Easy PG is enabled by default
;; uso: emacs file.gpg
;(require 'epa-file)
;(epa-file-enable)
;; No GTK popup ma chiedi la password in cline
;; potresti anche settarlo globalmente in gpg conf
;(setenv (concat "GPG_AGENT_INFO" nil))
;;;;;;;;;;;;;;
;; ALTRI EL ;;
;;;;;;;;;;;;;;
;; alcuni sono byte-compiled .elc
;; altri vengono chiamati con load o autoload
;; Boxes (boxes -l per listare tutti i tipi)
(require 'boxes)
(autoload 'boxes-command-on-region "boxes" nil t)
(autoload 'boxes-remove "boxes" nil t)
(autoload 'boxes-create "boxes" nil t)
(global-set-key "\C-cq" 'boxes-create)
(global-set-key "\C-cr" 'boxes-remove)
(global-set-key "\C-cp" 'boxes-command-on-region)
;; figlet
(load "figlet.el")
;; Screenplay mode
;; scene headings; action blocks; dialog blocks
;; TAB RET - TAB TAB RET - TAB TAB TAB RET
(require 'screenplay)
(add-to-list 'auto-mode-alist '("\\.sp\\'" . screenplay-mode))
(add-to-list 'auto-mode-alist '("\\.screenplay\\'" . screenplay-mode))
;; Fountain
(require 'fountain-mode)
(add-to-list 'auto-mode-alist '("\\.fountain\\'" . screenplay-mode))
(require 'olivetti)
(require 'imenu-list)
; (require 'imenu)
; (require 'cl-lib)
;; Chordpro-mode
(setq auto-mode-alist (cons '("\\.crd$" . chordpro-mode) auto-mode-alist))
(autoload 'chordpro-mode "chordpro-mode")
;; Esportare pagine html
;(require 'htmlize)
;; le bolle col pensierino
;(require 'thinks)
;; u-mandelbrot
;(autoload 'u-mandelbrot "u-mandelbrot" "A simple fractal browser" t)
;; dei bellissimi elenchi
;(require 'gse-number-rect)
;; la sua chiave privata
;(global-set-key "\e\e\n" 'gse-number-rectangle)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Attribuire un mode a un file ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Inserendo questa riga all'inizio del file
;; #-*- mode: markdown -*-
;; o anche
;; #-*- shell-script -*-
;; o anche Nominandolo da qui
(add-to-list 'auto-mode-alist '("\\.screenrc\\'" . shell-script-mode))
(add-to-list 'auto-mode-alist '("\\.nanorc\\'" . shell-script-mode))
(add-to-list 'auto-mode-alist '("\\.bash_alias\\'" . shell-script-mode))
;;;;;;;;;;;;;;;;;;;;;;;
;; SPELLING - ISPELL ;;
;;;;;;;;;;;;;;;;;;;;;;;
;(global-set-key "\C-cb" 'ispell-buffer)
;(global-set-key "\C-cr" 'ispell-region) no che la usa orgmode
;(global-set-key "\C-cw" 'ispell-word)
;(setq ispell-dictionary "italian")
;(setq sgml-mode-hook
;'(lambda () "Defaut per SGML mode."
;(setq ispell-personal-dictionary "/.ispell_mine")
;(ispell-change-dictionary "italian")
;))
;(autoload 'ispell-word "ispell"
; "Check the spelling of word in buffer." t)
; (global-set-key "\e$" 'ispell-word)
; (autoload 'ispell-region "ispell"
; "Check the spelling of region." t)
; (autoload 'ispell-buffer "ispell"
; "Check the spelling of buffer." t)
; (autoload 'ispell-complete-word "ispell"
; "Look up current word in dictionary and try to complete it." t)
; (autoload 'ispell-change-dictionary "ispell"
; "Change ispell dictionary." t)
; (autoload 'ispell-message "ispell"
; "Check spelling of mail message or news post.")
; (autoload 'ispell-minor-mode "ispell"
; "Toggle mode to automatically spell check words as they are typed in.")
;; Aggiungi queste righe alla fine di un documento
;; per definire la lingua del dizionario
;; <!-- Local IspellDict: english -->
;; <!-- Local IspellPersDict:/emacs/.ispell-english -->
;;;;;;;;;;;;;;;;;;
;; INSERT STUFF ;;
;;;;;;;;;;;;;;;;;;
;; Time-Stamps: If a "Time-stamp: <>" exist in the first 10 lines of the file
;; emacs will write time-stamp information there when saving the file.
(setq
time-stamp-active t ; do enable time-stamps
time-stamp-line-limit 10 ; check the first 10 lines
time-stamp-format "%04y-%02m-%02d %02H:%02M:%02S (%u)")
(add-hook 'write-file-hooks 'time-stamp)
(setq user-full-name "dan")
(setq user-mail-address "dan[at]autistici[dot]org")
;(setq current-language-environment "English")
(defun insert-name-and-email()
(interactive)
(insert (concat user-full-name " <" user-mail-address ">")))
;; F9 inserisce nome e email
(global-set-key [f9] 'insert-name-and-email)
;; F5 chiama il bookmark file
(global-set-key [f5] 'bookmark-bmenu-list)
;; Insert euro symbol € con M-x euro
(fset 'euro
(lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([24 56 return 35 120 50 48 65 67 return] 0 "%d")) arg)))
;; Inserisci una rosa
(setq rosa-header
"@}-,--- ")
(defun insert-rosa-header ()
"Insert rosa at point."
(interactive)
(let ((mark (point)))
(insert rosa-header)
(comment-region mark (+ mark (length rosa-header)))))
;; Inserisci il kudos
(setq kudos-header
"
Commenti? Kudos? Consigli? Vaffa? Grazie!
")
(defun insert-kudos-header ()
"Insert kudos at point."
(interactive)
(let ((mark (point)))
(insert kudos-header)
(comment-region mark (+ mark (length kudos-header)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; KeyBindings personali ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; disattiva una chiave, nell'es: ESC e C-u
;(global-unset-key "\e\C-u")
;; set-justification-full: justifica a destra con spaziatura regolare
;; ESC-ESC-j set-justification-full (right, left, center, none)
(global-set-key "\e\e\j" 'set-justification-full)
;; string-insert-rectangle: add a prefix char all'inizio di ogni riga in region C-x r t
(global-set-key "\e\e\i" 'string-insert-rectangle)
;; close-rectangle: deleta spazi a inizio riga in region
(global-set-key "\e\e\d" 'close-rectangle)
;; kill-rectangle (deleta n char a inizio riga in regione)
;; (evidenzia regione, poi mettiti al n char che vuoi cancellare) C-x r k
(global-set-key "\e\e\k" 'kill-rectangle)
;;;;;;;;;;;;;
;; ACCENTI ;;
;;;;;;;;;;;;;
;; per le accentate
;(standard-display-european 1)
;; attivazione all'avvio del mode-accentate. not.
;(add-hook 'text-mode-hook 'iso-accents-mode)
;; toggle accents mode in emacs
;(global-set-key "\e\e\w" 'iso-accents-mode)
;(iso-accents-mode non-nil)
;(iso-accents-mode t)
;(add-hook 'iso-acc 'iso-accents-mode)