Files

1766 lines
80 KiB
Org Mode
Raw Permalink Normal View History

-*- coding: utf-8 -*-
#+TITLE: la mia configurazione di emacs Vrs 0.9
#+AUTHOR: CSiCoAlm
#+DESCRIPTION: File in formato org con la configurazione di emacs
#+SETUPFILE: ~/.MyCfg/emacs/templates/norang/norang_local.org
* Intro:
Fino ad ora (2020/04) utilizzavo direttamente il file ~/.emacs da cui caricavo i veri e
propi file di configurazione dal reposity GIT "~/.dotemacs" su cui avevo tutti i singoli
file con le varie personalizzazioni. Vedendo in internet vari esempi, voglio cambiare
per portare il tutto su un file org che mi permetta non solo di configurare emacs
secondo i miei desideri, ma anche che mi permetta di inserire ulteriori informazioni in
modo che posso esplicitare le varie scelte fatte per poterle ricordare in futuro senza
perdere tempo e sopratutto per potermi ricordare cosa intendevo ottenere. In questo
file racchiuderò tutta la configurazione e la personalizzazione di emacs, descrivendo il
più possibile tutti i vari passaggi per renderlo il più utile ed interessante possibile.
Cercherò quindi di espicitare il più possibile le scelte fatte, non solo descrivendo le
singole funzionalità, ma cercando anche di esplicitare cosa si voleva ottenere e come si
è fatto, in modo che in futuro rileggendo posso ricordare tutto senza perdere tempo.
I punti che non sono chiari o che devo rivedere li evidenzio tramite l'abbreviazione
{???} oppure tramite il tag ToReview.
Vedere di utilizzare anche tag o altre cose di org per chiarire meglio il tutto. Magari
utilizzare i link per connettere la parte in cui ad esempio setto il gestore dei
packages con le parti in cui utilizzo un package.
* References:
La configurazione partirà da quanto fatto finora (Configurazione Vrs. 3.3 del
04/10/2018) ripartendo da zero con le considerazioni ricavate dalle varie sorgenti
analizzate:
- [[http://doc.norang.ca/org-mode.html][Org Mode - Organize Your Life In Plain Text!]] :: Bel esempio di come utilizzare in
particolar modo org-mode nella produttività.
- [[https://cestlaz.github.io/stories/emacs/][Using Emacs Series]] :: serie di video su emacs di Mike Zamansky che hanno anche il
relativo [[https://github.com/zamansky/using-emacs][GitHub repo]]
- [[https://www.youtube.com/watch?v=9pkuBijrMD4&list=PLNJWazvift25KnHDwYlhwrrgr60wtpQOB][Lukewh]] :: Playlist di video su emacs. Ne parla anche su [[https://lbry.tv/@lukewh:3][LBRY]]
- [[http://pages.sachachua.com/.emacs.d/Sacha.html][http://pages.sachachua.com/.emacs.d/Sacha.html]]
- [[https://sachachua.com/blog/][Sacha Blog]]
- [[http://ergoemacs.org/emacs/emacs_encoding_decoding_faq.html][Emacs File Encoding FAQ]]
- [[https://egli.dev/posts/using-org-mode-for-meeting-minutes/][Using org-mode for meeting minutes]]
- [[https://www.youtube.com/watch?v=2-0OwGTt0dI][Emacs: introduction to MAGIT]]
- Blog molto carino: [[https://irreal.org/blog/][irreal]]
* Esigenze: :ToReview:
- mettere comandi semplici per esportare tutto su html
- mettere a punto esportazione su pdf
- mettere a punto espansione dei testi abbreviati soprattutto per:
- i blocchi codice
- form di introduzione di dati ripetitivi tipo un resum di un lavoro.
- mettere comandi veloci per:
- evidenziare un capitolo nascondendo gli altri e viceversa.
- far partire timer e fermarli
- registrare ed eseguire delle macro
Per le macro vi sono questi reference:
- [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macros.html#Keyboard-Macros][Manual]]
- [[https://www.emacswiki.org/emacs/KeyboardMacros][Wiki]]
- Using emacs series [[https://cestlaz.github.io/posts/using-emacs-15-macros/][video 15]]
- sfruttare nuova struttura:
- file unico (Inbox) con i lavori attuali e indici a file di riferimento per ciascun
cliente.
- file di reference dei vari clienti magari vedendo se può essere uno solo e sfruttare
aggenda per estrarre i dati tramite tag o altro
- file con le nozioni e i CFG dell'ufficio e della casa
- file con i riferimenti money report per capire come investo e quanto ho nei vari
investimenti
- sistemare con le nuove caratteristiche i capture in modo che fuzionino bene per:
- link utili da rivedere o per bibbliografia
- telefonate
- ToDo
- Note
- appuntamenti
- Idee future
- sistemare i tag per:
- classificare i vari reference per il TGD
- classificare le cose per future ricerche
- Pensare come legarsi con keep per sincronizarsi con cellulare
- Esempi di emacs:
- come configurare emacs: https://github.com/abrochard/emacs-config (dal video
https://meet.jit.si/FAR_HJ9Bzjs0tmF0DlA9qHIE)
- Tutorial molto bello in vari video: https://cestlaz.github.io/stories/emacs/
- Indagare sui bookmark di emacs per capire come sfruttarli (vedi [[https://www.youtube.com/watch?v=ajiEBK2swKo][Lukewh video 12]]) [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html][emacs manual]]
- Informarsi su 'Company mode' package che crea una specie di intellisense per suggerire come
completare le parole in base a quanto editato prima (come in notepad++). Per
riferimenti: [[https://www.youtube.com/watch?v=q-9Z2eR7cTE][Lukewh video 16]] o [[http://company-mode.github.io/][Company mode on GitHub]]
- vedere per la correzione ortografica (Flycheck, flymake o altro)
- [[https://www.flycheck.org/en/latest/][flycheck]] anche da [[https://www.youtube.com/watch?v=EGR9CwM1ksQ][Lukewh video 17]]
- ORG PUBBLISH: Sul sito [[https://opensource.com/article/20/3/blog-emacs][blog-emacs]] c'è un tutorial sulla pubblicazione tramite org che è
molto bello, inoltre mostra anche come cambiare il file autogenerato mapindex in un
generico index.html con css e tutto per renderlo più bello.
- Impostare l'utilizzo di org anche dal cellulare. Per farlo vedere come utilizzare
orgmobile o [[https://f-droid.org/en/packages/com.orgzly/][orgzly]] o l'interfaccia web ecc.... Un esempio molto interessante che
utilizza anche GIT per mettere sul clud i file è quello in dal portale opensource.com:
[[https://opensource.com/article/19/4/calendar-git][Manage your daily schedule with Git]]
- rivedere il gestore di calendari in modo testuale [[https://lostpackets.de/khal/index.html][khal]] perchè sempbra molto carino.
** TODO [[https://katherine.cox-buday.com/blog/2015/03/14/writing-specs-with-org-mode/][Writing Specs with Org-mode]] :ToReview:
esempio di come produrre documentazione tecnica con
org-mode, LaTeX, PlantUML per ottenere pdf. Mostra anche il relativo file di
configurazione.
** TODO Created a new HTML export back-end that uses Tailwind.css classes :ToReview:
- Link [[https://www.reddit.com/r/emacs/comments/fw6onf/created_a_new_html_export_backend_that_uses/][articolo]]
- Link [[https://github.com/vascoferreira25/ox-tailwind][GitHub]]
: (load "~/.MyTools/private-packages/ox-tailwind/ox-tailwind.el")
** TODO Socially isolating my Emacs with Docker! :ToReview:
- Link [[https://www.youtube.com/watch?v=D2E1Eh9Hxdg&feature=youtu.be][video]]
** TODO riconfigurare l'esportazione in html:
- tenere conto delle info dal sito [[https://opensource.com/article/20/3/blog-emacs][blog-emacs]] per personalizzare il file mapindex
- rivedere l'esportazione partendo tutto in ~/Pub e in esso mantenere anche i reference
e styli.
* Set home path
Essendo nato in linux, emacs utilizza molto la directory home e perciò ho trovato utile
crearne un riferimento in windows. In particolare imposto la cartella C:\_Home come
cartella home.
Per inserire _Home come path predefinito, non serve definirlo sulla variabile di sistema
PATH, ma basta definire una variabile utente home:
- in windows aprire il form delle variabili utente: 'Edit enviroment variables for
account'
- inserire una nuova variabile con i seguenti valori:
- Variable name: home
- Variable value: C:\_Home
Come emacs, utilizzo direttamente quello scaricabile dal progetto [[https://www.gnu.org/software/emacs/][GNU Emacs]]
(Emacs 28.2 al 2022/12) disarchiviando lo zip, sulla cartella:
: C:/MyTools/emacs
e lo eseguo lanciando:
: C:/MyTools/emacs/bin/runemacs.exe
* init.el o .emacs
Questa parte, descrive cosa inserire nel file iniziale che viene automaticamente letto
all'avvio di emacs (~/.emacs o ~/.emacs.d/init.el). In esso occorre impostare le
funzioni base che sono "obbligatorie", mentre tutto il resto viene delegato ad un file
ottenuto compilando questo file org.
Preferisco evitare che il file org venga compilato ad ogni avvio di
emacs perchè perdo tempo, ed inoltre cambierei sempre il file sul
reposity e quindi non è utile per la gestione con GIT.
Quindi sul file di inizializzazione non metterò il codice di
compilazione, ma caricherò direttamente il file compilato.
Per compilare il file a mano, basta eseguire lo stesso codice:
: (org-babel-load-file (expand-file-name "~/.MyCfg/emacs/dotEmacs/MyInit.org"))
copiandolo sul buffer scrach ed eseguendolo, oppure più
semplicemente, basta dare il comando:
: M-x org-babel-load-file "~/.MyCfg/emacs/dotEmacs/MyInit.org RET
#+BEGIN_SRC emacs-lisp
;; Emacs is unable to open this file properly: -*- coding: utf-8 -*-
;; ;;
;; ;;
;; ;;
;; ;; Imposto la gestione dei Packages
;; ;;
;; (require 'package)
;; (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
;; ;;(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
;; (package-initialize)
;; ;;
;; ;;
;; ;; ;; Carico come configurazione direttamente il file compilato a mano (tramite ...)
;; ;; (load "~/.MyCfg/emacs/dotEmacs/MyInit.el")
;; ;;
;; ;; Compilo il file in formato org e lo carico:
;; (org-babel-load-file (expand-file-name "~/.MyCfg/emacs/dotEmacs/MyInit.org"))
;; ;;
;; ;;
;; ;;
;; ;;
;; ;;
;; ;;
;; ;; Altre configurazioni gestite in automatico da emacs
;; ;;
#+END_SRC
* Impostazioni generali
** Imposto modalità server
Per evitare di aprire più istanze di emacs, abilito la modalità server.
#+BEGIN_SRC emacs-lisp
;; ---> ;; Abilito il server emacs
;; ---> (server-start)
#+END_SRC
Dal sito [[https://qastack.it/emacs/146/set-up-emacs-on-windows-to-start-a-single-instance-and-open-files-in-the-existin][Configura Emacs su Windows per avviare una singola istanza]] ricavo che per
avviare il server di emacs in automatico si utilizza:
#+BEGIN_SRC emacs-lisp
;; Abilito il server emacs e lo avvio se non già in run
(require 'server)
(unless (server-running-p) (server-start))
#+END_SRC
Quindi avvia emacs semplicemente eseguendo l' runemacs.exe eseguibile fornito con la
build.
La build di Windows di Emacs include un emacsclientw.exe eseguibile nella
bin/directory. Usa il percorso completo di tale eseguibile come editor di tua scelta su
tutti gli strumenti di terze parti che devi configurare per editare il file utilizzando
il server già aperto.
** Imposto formato UTF-8
Imposto come formato di default dei file: UTF8
#+BEGIN_SRC emacs-lisp
;; Imposto come formato di default l'UTF8
(set-language-environment "UTF-8")
(set-default-coding-systems 'utf-8-unix)
;; (set-terminal-coding-system 'utf-8)
;; (prefer-coding-system 'utf-8)
;; (set-charset-priority 'unicode)
#+END_SRC
** Carico i file lisp aggiuntivi
:PROPERTIES:
:CUSTOM_ID: Add-AddOn
:END:
Per abilitare delle funzionalità particolari, si deve caricare dei file lisp
particolari che nella mia configurazione metterò nel path:
: ~/.MyCfg/emacs/AddOn
e li caricherò sempre tutti:
#+BEGIN_SRC emacs-lisp
;; Carico il path dei file lisp che aggiungo:
(add-to-list 'load-path (expand-file-name "~/.MyCfg/emacs/AddOn/elisp"))
#+END_SRC
** Nascondo la schermata di benvenuto
#+BEGIN_SRC emacs-lisp
;; Don't show startup message
(setq inhibit-startup-message t)
#+END_SRC
** Blinking del cursore
#+BEGIN_SRC emacs-lisp
;; Stop al blinking del cursore
(blink-cursor-mode -1) ;; (setq blink-cursor-delay 2 blink-cursor-interval 0.5)
#+END_SRC
** menu bar
#+BEGIN_SRC emacs-lisp
;; menu bar (1=enable, -1=disable)
(menu-bar-mode 1)
#+END_SRC
** scroll bar
#+BEGIN_SRC emacs-lisp
;; scroll bar (1=enable, -1=disable)
(toggle-scroll-bar 1)
#+END_SRC
** tools bar
#+BEGIN_SRC emacs-lisp
;; tool bar (1=enable, -1=disable)
(tool-bar-mode -1)
#+END_SRC
** Highlight line
#+BEGIN_SRC emacs-lisp
;; Higlight line (1=enable, -1=disable)
(global-hl-line-mode 1)
#+END_SRC
** Edit selected text
Se si edita del testo selezionato, emacs di default non lo sostituisce, ma si limita ad
inserire il nuovo testo prima di quello selezionato. Per fare in modo che si comporti
come sono abituato in windows, occorre abilitare la cancellazione del testo
selezionato.
#+BEGIN_SRC emacs-lisp
;; delete selection when edited (1=enable, -1=disable)
(delete-selection-mode 1)
#+END_SRC
** Gestione Autosave e Autobackup dei file
Gestione dei file di salvataggio automatico (quelli con # all'inizio e alla fine). Il
file di salvataggio automatico di un determinato buffer viene cancellato quando si
salva esplicitamente il file. Per impedire ciò è necessario impostare a nil la
variabile delete-auto-save-files.
Se si modifica il nome del file aperto tramite C-x C-w o set-visited-file-name, il nome
del file di salvataggio automatico viene modificato di conseguenza.
Alla modifica di un file, emacs fa un backup automatico del file (stesso nome con la
tilde finale). Per abilitare o no il backup automatico, si deve agire sull'apposita
variabile.
#+BEGIN_SRC emacs-lisp
;; disable autosave
(setq delete-auto-save-files t)
;; disable autobackup
(setq make-backup-files nil)
#+END_SRC
** Calendario in Italiano :ToCheck:
Personalizzazione del calendario per visualizzarlo in Italiano ed inserire le
festività italiane:
#+BEGIN_SRC emacs-lisp
;; Calendario in italiano
(setq calendar-christian-all-holidays-flag t)
(setq calendar-date-style (quote iso))
(setq calendar-day-name-array ["Domenica" "Lunedi'" "Martedi'" "Mercoledi'" "Giovedi'" "Venerdi'" "Sabato"])
(setq calendar-latitude [45 40 north])
(setq calendar-longitude [12 22 east])
(setq calendar-mark-holidays-flag t)
(setq calendar-month-name-array ["Gennaio" "Febbraio" "Marzo" "Aprile" "Maggio" "Giugno" "Luglio" "Agosto" "Settembre" "Ottobre" "Novembre" "Dicembre"])
(setq calendar-time-display-form (quote (24-hours ":" minutes (if time-zone " (") time-zone (if time-zone ")"))))
(setq calendar-view-holidays-initially-flag t)
(setq calendar-week-start-day 1)
(setq column-number-mode t)
(setq display-time-mode t)
(setq show-paren-mode t)
#+END_SRC
** Mostro il numero delle righe durante la programmazione
#+BEGIN_SRC emacs-lisp
;; Show line numbers on programming mode
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
#+END_SRC
** Colum number
#+BEGIN_SRC emacs-lisp
;; Show the column number
(column-number-mode 1)
#+END_SRC
** Abbrevio Yes or No
#+BEGIN_SRC emacs-lisp
;; Make all "yes or no" prompts be "y or n" instead
(fset 'yes-or-no-p 'y-or-n-p)
#+END_SRC
** Matching delle parentesi
Abilito l'evidenziazione delle coppie di parentesi e riduco al minimo il tempo di
attesa
#+BEGIN_SRC emacs-lisp
;; Show the matching parenthesis and do it immediately, we are in a hurry
(show-paren-mode t)
(setq show-paren-delay 0)
#+END_SRC
** Mostro Ora nella modeline
Visualizzo l'ora attuale nella barra di sistema nel formato 24 ore.
#+BEGIN_SRC emacs-lisp
;; Time in the modeline
(display-time)
(setq display-time-24hr-format t)
#+END_SRC
** Completamento dinamico sul minibuffer:
Facilita l'inserimento sul minibuffer. Un esempio è quando
introduco un tag su un file org, con questo abilitato, emcas mi
sugerisce tutti i tag già inseriti.
#+BEGIN_SRC emacs-lisp
;; Activate the dynamic completion in the mini-buffer
(icomplete-mode 1)
;; This should actually turn on auto-fill-mode by default in all major
;; modes. The other way to do this is to turn on the fill for specific modes
;; via hooks.
(setq auto-fill-mode 1)
#+END_SRC
** Directory iniziale
Imposto la directory iniziale che è quella da cui partire per ricercare o inserire file
#+BEGIN_SRC emacs-lisp
;; Directory iniziale
(setq default-directory "~/Doc/Org/")
#+END_SRC
** Kill buffer automatico :Disable:KeyBinding:
Per default il comando di chiusura di un buffer (C-x k) chiede il nome del buffer da
chiudere suggerendo inizialmente quello in cui si è. Tramite il comando
kill-this-buffer si può chiudere direttamente il buffer in cui si è senza avere la
richiesta di conferma. Se si vuole accelerare, si può quindi bindare il comando
generale a quello veloce:
#+BEGIN_SRC emacs-lisp
;; ---> (global-set-key (kbd "C-x k") 'kill-this-buffer)
#+END_SRC
** Correttore ortografico: :ToReview:Disable:
Dal sito [[https://github.com/nobiot/Zero-to-Emacs-and-Org-roam][nobiot/Zero-to-Emacs-and-Org-roam]] ho preso spunto per installare il correttore
ortografico Hunspell e in particolare ho scaricato la versione 1.7.0 e messa sulla
cartella "~/.MyCfg/emacs/AddOn/hunspell-1.7.0". Qui ho inoltre messo anche i dizionari
presi da quelli di libreoffice. Infine ho impostato emacs in questo modo:
#+BEGIN_SRC emacs-lisp
;; Imposto l'italiano come lingua predefinita
(setenv "LANG" "it_IT")
;; Indico dove trovare Hunspell
(setq ispell-program-name "~/.MyCfg/emacs/AddOn/hunspell-1.7.0/Bin/hunspell.exe")
;; Indico che dizionario utilizzare.
;; Se voglio cambiarlo devo ridare il comando con il dizionario che voglio utilizzare.
(setq ispell-local-dictionary "it_IT")
;; Imposto il path dei dizionari
(setq ispell-hunspell-dict-paths-alist
'(("it_IT" "~/.MyCfg/emacs/AddOn/hunspell-1.7.0/Dictionaries/it_IT.aff")
("en_US" "~/.MyCfg/emacs/AddOn/hunspell-1.7.0/Dictionaries/en_US.aff")
("en_GB" "~/.MyCfg/emacs/AddOn/hunspell-1.7.0/Dictionaries/en_GB.aff")
("default" "~/.MyCfg/emacs/AddOn/hunspell-1.7.0/Dictionaries/it_IT.aff")
)
)
#+END_SRC
Ora posso avviare il correttore sul file aperto tramite il comando:
: M-x ispell
Come reference ho utilizzato anche i seguenti siti:
- [[http://blog.binchen.org/posts/what-s-the-best-spell-check-set-up-in-emacs/][What's the best spell check setup in emacs]]
- [[https://www.reddit.com/r/emacs/comments/dgj0ae/tutorial_spellchecking_with_hunspell_170_for/][Tutorial: spellchecking with hunspell (1.7.0) for emacs (26.2) on Windows (10)]]
* UI
** emacs Custom Themes:
Per ora disativo i temi e quindi scelgo uno fra quelli di default di emacs.
Come reference per i theme ci sono i seguenti siti:
- [[https://pawelbx.github.io/emacs-theme-gallery/][emacs theme gallery]]
- [[https://emacsthemes.com/][emacs Themes]]
#+BEGIN_SRC emacs-lisp
;; dichromacy -- Face colors suitable for red/green color-blind users.
(load-theme 'dichromacy t)
;; ---> ;; tsdh-dark -- A dark theme used and created by Tassilo Horn.
;; ---> (load-theme 'tsdh-dark t)
;; ---> ;; tsdh-light -- A light Emacs theme.
;; ---> (load-theme 'tsdh-light t)
;; ---> ;; whiteboard -- Face colors similar to markers on a whiteboard.
;; ---> (load-theme 'whiteboard t)
;; ---> ;; wombat -- Med
;; ---> (load-theme 'wombat t)
#+END_SRC
** Dimensioni font
Per ridimensionare il testo, c'è il comando:
: C-x C-0
Dopo il quale si hanno i seguenti comandi:
: + incrementa il size
: - decrementa il size
: 0 ritorna al default
I comandi si possono ripetere a piacere fino a quando si è raggiunta
la dimensione desiderata e poi chiude con
: ESC
Imposto la dimensione di default del testo per facilitare la lettura:
#+BEGIN_SRC emacs-lisp
;; Imposto la dimensione del testo:
(set-face-attribute 'default nil :height 110)
#+END_SRC
** Dimensione finestra
Ridimensiono la finestra di emacs in base a quanto visto nella pagina della
[[https://www.emacswiki.org/emacs/FrameSize][wiki]].
#+BEGIN_SRC emacs-lisp
;; Imposto dimensioni finestra
;; (when window-system (set-frame-size (selected-frame) 92 46))
(add-to-list 'default-frame-alist '(width . 100))
(add-to-list 'default-frame-alist '(height . 48))
#+END_SRC
** Wordwrap
Inoltre imposto il wordwrap a 90 caratteri in modo da sfruttare opportunamente le
righe.
#+BEGIN_SRC emacs-lisp
;; Imposto wordwrap
(setq-default fill-column 90)
#+END_SRC
** Colorization :ToReview:Disable:
#+BEGIN_SRC emacs-lisp
;; ---> ;; use colorization for all modes
;; ---> (global-font-lock-mode t)
#+END_SRC
** Reload file nel buffer :Disable:ToReview:KeyBinding:
Per ricaricare il file sul buffer ed anullare tutte le modifiche fatte, si usa il
comando
: revert-buffer
Per comodità è utile bindarlo ad un tasto:
#+BEGIN_SRC emacs-lisp
;; ---> (global-set-key (kbd "<f5>") 'revert-buffer)
#+END_SRC
** Buzzer visibile
Dal sito [[http://pragmaticemacs.com/emacs/using-a-visible-bell-in-emacs/][Pragmatic emacs]] ho trovato come visualizzare un lampeggio in emacs al posto
del beep (per errori o allarmi) di emacs.
#+BEGIN_SRC emacs-lisp
;; Buzzer visibile
(setq visible-bell t)
#+END_SRC
* Modes :Minor_Mode:
** IDO :ToReview:Disable:
Mode per avere i suggerimenti e l'autocompletazione nei menu e dei comandi.
Diverso materiale ed informazioni si possono trovare in:
- [[https://www.emacswiki.org/emacs/InteractivelyDoThings][Ido from emacs wiki]]
- [[https://www.gnu.org/software/emacs/manual/html_mono/ido.html][Ido from gnu.org]]
#+BEGIN_SRC emacs-lisp
;; ---> ;; Set ido (https://www.gnu.org/software/emacs/manual/html_mono/ido.html)
;; ---> (setq ido-everywhere t)
;; ---> (setq ido-enable-flex-matching t)
;; ---> (ido-mode 1)
#+END_SRC
** Visual Basic Mode
Dal sito [[http://www.emacswiki.org/emacs/visual-basic-mode.el][Wiki]], si ricava come installare il "visual-basic-mode" che permette di editare
il visual basic in modo agevole e con l'evidenziazione sintattica.
Per farlo occorre caricare il file [[file:~/.MyCfg/emacs/AddOn/visu][visual-basic-mode.el]] e per farlo lo metto sul path
che carico di default all'avvio (vedi relativo [[#Add-AddOn][paragrafo]]); per velocizzare si può anche
compilare il file ma per ora non lo faccio.
Configuro quindi il load del modo e gli associo i relativi file (in automatico i file
li associo a "visual basic .net" e non a "visual basic 6").
#+BEGIN_SRC emacs-lisp
;; Carico il modo Visual Basic
;(autoload 'visual-basic-mode "visual-basic-mode" "Visual Basic mode." t)
(require 'visual-basic-mode)
;;
;; Associo il modo VB automaticamente ai file *.frm, *.bas, *.cls, *.vb
;(setq auto-mode-alist (append '(("\\.\\(frm\\|bas\\|cls\\|vb\\)$" . visual-basic-mode)) auto-mode-alist))
(require 'vbnet-mode)
#+END_SRC
** Visual Basic .NET mode
Dal sito [[http://www.emacswiki.org/emacs/VbDotNetMode][Wiki]], si ricava come installare il "vbnet-mode" che permette di editare il
visual basic in modo agevole e con l'evidenziazione sintattica.
Per farlo occorre caricare il file [[file:~/.MyCfg/emacs/AddOn/vbnet-mode.el][vbnet-mode.cs]] e per farlo lo metto sul path che
carico di default all'avvio (vedi relativo [[#Add-AddOn][paragrafo]]); per velocizzare si può anche
compilare il file ma per ora non lo faccio.
Configuro quindi il load del modo e gli associo i relativi file.
#+BEGIN_SRC emacs-lisp
;; Carico il modo Visual Basic .Net
(autoload 'vbnet-mode "vbnet-mode" "Mode for editing VB.NET code." t)
;;
;; Associo il modo VBNet automaticamente ai file *.frm, *.bas, *.cls, *.vb
;(setq auto-mode-alist (append '(("\\.\\(frm\\|bas\\|cls\\|vb\\)$" . vbnet-mode)) auto-mode-alist))
#+END_SRC
** C#: csharp-mode
Da Stack Overflow: [[https://stackoverflow.com/questions/3954607/c-sharp-emacs-mode-questions-indentation-and-build][C# Emacs mode questions - indentation and build]] e successivamente dal
sito [[https://github.com/emacs-csharp/csharp-mode][GitHub csharp-mode]] ricavato i file [[file:~/.MyCfg/emacs/AddOn/elisp/csharp-mode.el][csharp-mode.el]] e [[file:~/.MyCfg/emacs/AddOn/elisp/csharp-compilation.el][csharp-compilation.el]] che
permettono di definire il csharp-mode utilizzabile direttamente nei blocchi org per avere
il codice con la colorazione sintattica.
Da quanto visto, non serve linkare il linguaggio con babel, ma basta inserire i file negli
AddOn e caricare i rispettivi modi:
#+begin_src emacs-lisp
;; ---> ;; ---> ;; Carico il path dei file lisp che definiscono il modo C#:
;; ---> ;; ---> (add-to-list 'load-path (expand-file-name "~/.MyCfg/emacs/AddOn/elisp"))
;; ---> ;; Attivo il modo per C#
;; ---> (require 'csharp-mode)
;; ---> ;; Vi assicio, di default, i file *.cs
;; ---> (setq auto-mode-alist
;; ---> (append '(("\\.cs$" . csharp-mode)) auto-mode-alist))
;; ---> ;; Volendo posso definire la funzione di hook per impostarci una
;; ---> ;; tabulazione predefinita valida in tutti i modi derivanti dal C:
;; ---> (defun my-c-mode-common-hook ()
;; ---> (setq c-basic-offset 4)
;; ---> (c-set-offset 'substatement-open 0)
;; ---> )
;; ---> ;; Infine assegnare la funzione appena definita, all'hook:
;; ---> (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
#+end_src
*** Obsoleto:
Dal sito [[https://code.google.com/p/csharpmode/][code.google]] e successivamente dal sito [[https://github.com/josteink/csharp-mode][GitHub]] ricavo il file [[file:~/.MyCfg/emacs/AddOn/csharp-mode.el][csharp-mode.el]]
che permette di avere il csharp-mode per visualizzare il codice C# correttamente
colorato.
Il file lo ho copiato nella directory che carico allo startup (vedi relativo
[[#Add-AddOn][paragrafo]]); per velocizzare si può anche compilare il file ma per ora non lo faccio.
Configuro quindi il load del modo e gli associo i relativi file:
#+BEGIN_SRC emacs-lisp
;; ---> ;; Carico il modo C#
;; ---> (autoload 'csharp-mode "csharp-mode" "Major mode for editing C# code." t)
;; ---> ;;
;; ---> ;; Associo il modo C# automaticamente ai file *.cs
;; ---> (setq auto-mode-alist (append '(("\\.cs$" . csharp-mode)) auto-mode-alist))
#+END_SRC
** Power Shell mode :Disable:Obsolete:
Ricercando info per il vbnet-mode ho trovato il sito [[https://www.emacswiki.org/emacs/PowerShell][Wiki]] da cui si ricava il file
[[file:~/.MyTools/_MyUp/Lisp/PowerShell-Mode.el][PowerShell-Mode.el]] per gestire il vpowershell-mode
Il file lo ho messo sulla cartella da cui carico, all'avvio, i file lisp esterni,
Configuro quindi il load del modo e gli associo i relativi file:
#+BEGIN_SRC emacs-lisp
;; ---> ;; Carico il modo PowerShell
;; ---> (autoload 'powershell-mode "vpowershell-mode" "PowerShell Mode" t)
;; ---> ;; Associo il modo automaticamente ai file *.?1?, *.?2?
;; ---> ;(setq auto-mode-alist (append '(("\\.\\(?1?\\|?2?\\)$" . vpowershell-mode)) auto-mode-alist))
#+END_SRC
[2022-12-08 Thu] Nella revisione, si è visto che ora la modalità è compresa nel package
di emacs e quindi si può installare direttamente con i comandi:
: M-x package-install RET powershell RET
* Packages :Package:
Emacs ha una gestione dei packages che mi permette di installare ed utilizzare
differenti pacchetti o funzionalità in modo semplice.
Qui inserisco tutte le configurazioni sui package inserendo le
descrizioni varie ed eventuali esempi di utilizzo, in modo che anche
fra qualche tempo se vado a vedere, ritrovo tutte le informazioni
base ed importanti.
Vi sono diversi reposity, ma i principali, non chè ufficiali, sono:
- [[https://melpa.org/][MELPA]] o [[https://github.com/melpa/melpa][MELPA GitHub]]
- [[https://github.com/melpa/melpa][MELPA Stable]]
- gnu
- org
- ????
Di seguito inserisco la configurazione del gestore dei package ed a seguire tutte le
configurazioni sui package che installo inserendo le descrizioni varie ed eventuali
esempi di utilizzo, in modo che anche fra qualche tempo se vado a vedere, ritrovo tutte
le informazioni base ed importanti.
Spunti inizialmente presi da https://orgmode.org/elpa.html e
http://pages.sachachua.com/.emacs.d/Sacha.html. Nel 2020/04 rivisto il tutto
in base alla serie [[https://cestlaz.github.io/stories/emacs/][Using emacs]]
** Note sull'utilizzo e sui comandi:
Per vedere la lista dei package:
: M-x list-packages
Per aggiornare la lista dei package si usa:
: M-x package-refresh-contents
Per installare l'ultimo package di org:
: M-x package-install RET org RET
Per avere informazioni su un package si può usare il comando
: M-x describe-package
che visualizza una finestra con le informazioni del pacchetto.
Per aggiornare l'installazione di un package, occorre che non sia in uso, poi si
richiama l'elenco dei packages con
: M-x list-packages
Ora si seleziona i pacchetti da aggiornare con
: U
(mark Upgradable packages) e si avvia l'aggiornamento con
: x
(eXecute the installs and deletions). Alla fine dell'aggiornamento chiede eventualmente
se si vuole cancellare i pacchetti obsoleti e basta rispondere con Yes.
If you run into a problem installing or upgrading, you may need to go into your
~/.emacs.d/elpa/ directory and delete packages that are installed multiple times. This
can happen when the install times out.
** Setup generale:
Per utilizzare i reposity, occorre inizializzarli. Il relativo codice è già stato
inserito nel file init.el perchè deve essere una delle prime cose da fare.
#+BEGIN_SRC emacs-lisp
;; Codice già resente in init.el:
;; (require 'package)
;; (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
;; ;;(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
;; (package-initialize)
;;
;; Codice per rinfrescare i package solo quando serve prima di utilizzarli:
(unless package-archive-contents (package-refresh-contents)) ;; Refresh the packages descriptions
(setq package-load-list '(all)) ;; List of packages to load
;;
;; Carico Org se non già caricato:
(unless (package-installed-p 'org) (package-install 'org)) ;; Make sure the Org package is installed, install it if not
;;
;; Codice per rinfrescare i package solo quando serve prima di utilizzarli:
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
#+END_SRC
** Package: Try
Permette di provare i vari pacchetti senza installarli. Quindi riavviando emacs si
ritorna alla situazione iniziale.
Quando installato, si può provare un pacchetto direttamente installandolo
temporaneamente con try. Per esempio e voglio installare il pacchetto del gioco 2048:
: M-x try RET 2048-game
e quindi lanciare il gioco temporaneamente installato:
: M-X 2048-game RET
Si può utilizzare anche per provare un file dal web. Per esempio per caricare il file,
file.el, in modo temporaneo:
: M-x try RET https://url.com/to/some/file.el
Dai siti di rifererimento [[https://melpa.org/#/tryhttps://melpa.org/#/try][Melpa]], [[https://github.com/larstvei/Try][GitHub]]
#+BEGIN_SRC emacs-lisp
(use-package try
:ensure t)
#+END_SRC
** Package: Which-key
Visualizza sul minibuffer tutti i comandi possibili per completare quello iniziato.
Quindi permette di iniziare un comando, per esempio C-x, attendere qualche secondo, e
mostra sul minibuffer tutti i possibili suggerimenti
E' simile ad IDO, ma è riferito esclusivamente ai comandi.
Sui siti di riferimento [[https://melpa.org/#/which-key][Melpa]], [[https://github.com/justbur/emacs-which-key][GitHub]], ci sono molte opzioni (visualizzare i
suggerimenti sotto, a destra, tempo di attesa prima di visualizzarli, ecc..) ma per ora
utilizzo la configurazione base e poi sperimentando vedo se variarla.
#+BEGIN_SRC emacs-lisp
(use-package which-key
:ensure t
:config
(which-key-mode))
#+END_SRC
** Package: Org-bullet :Disable:Obsolete:
Questo pacchetto permette di sostituire gli asterichi nelle header con dei bullet più
carini. Dai siti di riferimento [[https://melpa.org/#/org-bullets][Melpa]], [[https://github.com/sabof/org-bullets][GitHub]] si indica che non sarà più aggiornato e
che viene sostituito da org-superstart, quindi anchio lo disattivo ed utilizzo
superstar. Il codice di configurazione era:
#+BEGIN_SRC emacs-lisp
;;(use-package org-bullets
;; :ensure t
;; :config
;; (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))
#+END_SRC
** Package: Org-superstar
Questo pacchetto permette di sostituire gli asterichi nelle header con dei bullet più
carini. Dai siti di riferimento [[https://melpa.org/#/org-superstar][Melpa]] [[https://github.com/integral-dw/org-superstar-mode][GitHub]] viene indicato come il successore di
org-bullet.
#+BEGIN_SRC emacs-lisp
(use-package org-superstar
:ensure t
:config
(add-hook 'org-mode-hook (lambda () (org-superstar-mode 1))))
;; Per velocizzare la gestione del font
(setq inhibit-compacting-font-caches t)
#+END_SRC
** Package: Swiper / Ivy / Counsel :ToReview:Disable:
Questo serve per estendere la funzione di search ed inoltre estende IDO, ma è da usare
in modo esclusivo (occorre disattivare IDO). Per ora non lo uso, ma merita di darci
un'occhiata. Si combina bene con HEM
Permette di editare in contemporanea su più punti, autocompleta i comandi. ecc...
Visto in Using Emacs Series [[https://www.youtube.com/watch?v=0mwwN0S1dnQ][Video 6]] e i siti di riferimento sono: [[https://melpa.org/#/swiper][Melpa]], [[https://github.com/abo-abo/swiper][GitHub]]
#+BEGIN_SRC emacs-lisp
;; ---> ;; it looks like counsel is a requirement for swiper
;; ---> (use-package counsel
;; ---> :ensure t
;; ---> )
;; ---> ;;
;; ---> (use-package swiper
;; ---> :ensure try
;; ---> :config
;; ---> (progn
;; ---> (ivy-mode 1)
;; ---> (setq ivy-use-virtual-buffers t)
;; ---> (global-set-key "\C-s" 'swiper)
;; ---> (global-set-key (kbd "C-c C-r") 'ivy-resume)
;; ---> (global-set-key (kbd "<f6>") 'ivy-resume)
;; ---> (global-set-key (kbd "M-x") 'counsel-M-x)
;; ---> (global-set-key (kbd "C-x C-f") 'counsel-find-file)
;; ---> (global-set-key (kbd "<f1> f") 'counsel-describe-function)
;; ---> (global-set-key (kbd "<f1> v") 'counsel-describe-variable)
;; ---> (global-set-key (kbd "<f1> l") 'counsel-load-library)
;; ---> (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
;; ---> (global-set-key (kbd "<f2> u") 'counsel-unicode-char)
;; ---> (global-set-key (kbd "C-c g") 'counsel-git)
;; ---> (global-set-key (kbd "C-c j") 'counsel-git-grep)
;; ---> (global-set-key (kbd "C-c k") 'counsel-ag)
;; ---> (global-set-key (kbd "C-x l") 'counsel-locate)
;; ---> (global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
;; ---> (define-key read-expression-map (kbd "C-r") 'counsel-expression-history)
;; ---> ))
#+END_SRC
** Package: Auto-complete
Simile alla funzione di autocompletamento nativa di emacs (M-/) questa visualizza i
suggerimenti tipo intellisense e quindi è carina da vedere. per ora provo ad usarla e
poi vedo se tenerla o no.
I siti di riferimento sono: [[https://melpa.org/#/auto-complete][Melpa]], [[https://github.com/auto-complete/auto-complete][GitHub]]
#+BEGIN_SRC emacs-lisp
(use-package auto-complete
:ensure t
:init
(progn
(ac-config-default)
(global-auto-complete-mode t)
))
#+END_SRC
** Package: Htmlize
Per convertire il testo ed i blocchi in testo html con associati i vari colori.
Siti di riferimento: [[https://melpa.org/#/htmlize][Melpa]], [[https://github.com/hniksic/emacs-htmlize][GitHub]] da cui si vede che è possibile personalizzare lo
stile dell'esportazione in tre modi in base ai valori assegnato alla variabile:
: htmlize-output-type
: css
: inline-css
: font
#+BEGIN_SRC emacs-lisp
(use-package htmlize
:ensure t)
#+END_SRC
** Package: Theme Zenburn :Disable:
Permette di gestire comodamente il thema ZenBurn
I siti di riferimento sono: [[https://melpa.org/#/zenburn-theme][Melpa]], [[https://github.com/bbatsov/zenburn-emacs][GitHub]] da cui ricavo anche che il thema gestisce
dimensioni diverse per le headline.
Si possono ridefinire i colori andando a ridefinire la variabile
zenburn-override-colors-alist come in questo esempio.
#+BEGIN_SRC emacs-lisp
;; ---> ;; ;; Sample redefine colors:
;; ---> ;; (setq zenburn-override-colors-alist
;; ---> ;; '(("zenburn-bg+05" . "#282828")
;; ---> ;; ("zenburn-bg+1" . "#2F2F2F")
;; ---> ;; ("zenburn-bg+2" . "#3F3F3F")
;; ---> ;; ("zenburn-bg+3" . "#4F4F4F")))
;; ---> ;; (load-theme 'zenburn t)
;; ---> ;;
;; ---> ;; use variable-pitch fonts for some headings and titles
;; ---> (setq zenburn-use-variable-pitch t)
;; ---> ;;
;; ---> ;; scale headings in org-mode
;; ---> (setq zenburn-scale-org-headlines t)
;; ---> ;;
;; ---> ;; scale headings in outline-mode
;; ---> (setq zenburn-scale-outline-headlines t)
;; ---> ;;
;; ---> ;; Load theme
;; ---> (use-package zenburn-theme
;; ---> :ensure t
;; ---> :config
;; ---> (load-theme 'zenburn t))
#+END_SRC
** Package: Theme Spacemacs :Disable:
Permette di gestire comodamente il thema Spacemacs. Spacemacs è
una configurazione particolare di emacs completa di configuratore e
altro. Per informazioni il sito di riferimento è: [[https://www.spacemacs.org/][Spacemacs]] o [[https://www.youtube.com/watch?v=hCNOB5jjtmc][Video]]
I siti di riferimento sono: [[https://melpa.org/#/spacemacs-theme][Melpa]], [[https://github.com/nashamri/spacemacs-theme][GitHub]] da cui ricavo anche che il thema gestisce
dimensioni diverse per le headline e anche il grassetto.
Si possono ridefinire i colori andando a ridefinire la variabile
zenburn-override-colors-alist come in questo esempio.
#+BEGIN_SRC emacs-lisp
;; ---> ;;
;; ---> ;; Load theme
;; ---> (use-package spacemacs-theme
;; ---> :ensure t
;; ---> :config (load-theme 'spacemacs-light t))
#+END_SRC
** Package: ox-Reveal :ToReview:Disable:
Permette di generare da org delle presentazioni web tramite lo script [[https://github.com/hakimel/reveal.js/][reveal.js]]
Siti di riferimento: [[https://melpa.org/#/ox-reveal][Melpa]], [[https://github.com/yjwen/org-reveal][GitHub]] si capisce che:
- tramite la variabile org-reveal-root si indica quale [[https://github.com/hakimel/reveal.js/][reveal.js]] utilizzare (locale o
web)
- org-reveal-mathjax permette di abilitare equazioni LaTex
Per il tutto ho preso spunto da Using emacs series [[https://www.youtube.com/watch?v=psDpCpcIVYs][Video 11]]
#+BEGIN_SRC emacs-lisp
;; ---> (use-package ox-reveal
;; ---> :ensure ox-reveal)
;; ---> (setq org-reveal-root "http://cdn.jsdelivr.net/reveal.js/3.0.0/")
;; ---> (setq org-reveal-mathjax t)
#+END_SRC
Il tutto sembra non funzionare, se confronto la pagina html generata da me con quella
dell'esempio dal [[https://www.youtube.com/watch?v=psDpCpcIVYs][sito]] si vede che io inserisco la linea:
: <script src="http://cdn.jsdelivr.net/reveal.js/3.0.0/js/reveal.js"></script>
mentre nell'esempio si ha:
: <script src="http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/js/head.min.js"></script>
: <script src="http://cdn.jsdelivr.net/reveal.js/3.0.0/js/reveal.js"></script>
Quindi sulla mia esportazione manca il codice:
: <script src="http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/js/head.min.js"></script>
Alcune informazioni utili su come utilizzarlo anche in locale sono presenti
sull'articolo sul portale opensource:
[[https://opensource.com/article/18/2/how-create-slides-emacs-org-mode-and-revealjs][How to create slides with Emacs Org mode and Reveal.js]]
** Package: Yasnippet
Permette di inserire testi tramite abbreviazioni e poi tab, estende quindi le
funzionalità base di emacs. I vari sniptes si possono personalizzare a piacere.
Siti di riferimento: [[https://melpa.org/#/yasnippet][Melpa]], [[https://github.com/joaotavora/yasnippet][GitHub]], [[http://joaotavora.github.io/yasnippet/][Manual]]
#+BEGIN_SRC emacs-lisp
(use-package yasnippet
:ensure t
:init
(yas-global-mode 1))
#+END_SRC
** Package: Magit :ToReview:Disable:
I siti di riferimento sono: [[https://magit.vc/][magit.vc]], [[https://github.com/magit/magit][GitHub]], [[https://www.emacswiki.org/emacs/Magit][emacswiki]]
** Package: Org-mode :MISSING:
*** Installazione e attivazione:
Dal sito di riferimento di org: [[https://orgmode.org/][orgmode.org]] ricavo l'installazione del pacchetto (per
averlo aggiornato):
#+BEGIN_SRC emacs-lisp
;; Installazione
(use-package org
:ensure t)
;;
;; Imposto OrgMode come default per i file '*.org' e '*.org_archive'
(add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\)$" . org-mode))
;; Attivazione pacchetto
(require 'org)
#+END_SRC
*** Visibilità iniziale:
Imposto la visibilità iniziale a tutto ragruppato per velocizzare la vista dall'alto.
#+BEGIN_SRC emacs-lisp
;; Visibilità iniziale: tutto ragruppato
(setq org-startup-folded t)
#+END_SRC
*** Use utf-8 as the default coding system for all of my org files.
#+BEGIN_SRC emacs-lisp
;; default coding system UTF-8
(setq org-export-coding-system 'utf-8)
(setq default-process-coding-system '(utf-8-unix . utf-8-unix))
#+END_SRC
*** Key Binding :ToReview:MISSING:
Impostiamo alcuni dei key binding di default:
#+BEGIN_SRC emacs-lisp
;;(global-set-key (kbd "C-c l") 'org-store-link)
(global-set-key (kbd "C-c a") 'org-agenda)
(global-set-key (kbd "C-c c") 'org-capture)
#+END_SRC
Analisi dei tasti funzioni disponibili:
| Key | Binding originale |
|---------+----------------------------------------------------|
| <F5> | Non Definito |
| S-<F5> | Non Definito |
| C-<F5> | Non Definito |
| M-<F5> | Non Definito |
|---------+----------------------------------------------------|
| <F6> | Non Definito |
| S-<F6> | Non Definito |
| C-<F6> | Non Definito |
| M-<F6> | Non Definito |
|---------+----------------------------------------------------|
| <F7> | Non Definito |
| S-<F7> | Non Definito |
| C-<F7> | Non Definito |
| M-<F7> | Non Definito |
|---------+----------------------------------------------------|
| <F8> | Non Definito |
| S-<F8> | Non Definito |
| C-<F8> | Non Definito |
| M-<F8> | Non Definito |
|---------+----------------------------------------------------|
| <F9> | Non Definito |
| S-<F9> | Non Definito |
| C-<F9> | Non Definito |
| M-<F9> | Non Definito |
|---------+----------------------------------------------------|
| <F10> | Passa il focus al menu |
| S-<F10> | Passa il focus al menu |
| C-<F10> | Passa il focus al sottomenu |
| M-<F10> | Passa la visualizzazione a schermo Intero/Finestra |
|---------+----------------------------------------------------|
| <F11> | Passa la visualizzazione a schermo Intero/Finestra |
| S-<F11> | Passa la visualizzazione a schermo Intero/Finestra |
| C-<F11> | Non Definito |
| M-<F11> | Non Definito |
|---------+----------------------------------------------------|
| <F12> | Non Definito |
| S-<F12> | Non Definito |
| C-<F12> | Non Definito |
| M-<F12> | Non Definito |
|---------+----------------------------------------------------|
Quindi assegnerò con questi principi i tasti:
- *F9* - /Visibilità/ - per la visibilità sul file
| Key | Origin | My Bingind |
|--------+--------------+------------------------------|
| <F9> | Non Definito | Visualizza tutto |
| S-<F9> | Non Definito | Visualizza solo ramo attuale |
| C-<F9> | Non Definito | nascondi ramo attuale |
| M-<F9> | Non Definito | ... |
#+BEGIN_SRC emacs-lisp
(global-set-key (kbd "<f9>") 'widen)
(global-set-key (kbd "C-<f9>") 'MRK/hide-other)
(global-set-key (kbd "S-<f9>") 'narrow-to-region)
;(global-set-key (kbd "M-<f9>") )
#+END_SRC
*/ToReview:/*
Verificare come posso sfruttare i segnalibri per navigare fra i file:
: C-x r m bookmark-set Imposta un segnalibro. Utile nelle ricerche
: C-x r b bookmark-jump Salta ad un segnalibro.
Come riepilogato nella [[https://www.emacswiki.org/emacs/BasicNarrowing][wiki]] i comandi base per narrowing/widen (narrow=stringere
widen=allargare) in emacs sono:
- C-x n n /narrow-to-region/ :: Visualizza solo il testo selezionato, e nasconde
tutto il resto.
- C-x n w /widen/ :: Visualizza tutto il testo del buffer
- C-x n p /narrow-to-page/ :: Visualizza solo il testo dal cursore a fine pagina.
- C-x n d /narrow-to-defun/ :: Visualizza solo il testo tramite le [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Defuns.html#Defuns][Defun]].
Naturalmente il testo nascosto non è più accessibile per le modifiche dal buffer
fino a che non si rivisualizza (widen) però rimane gestito, quindi salvando il file
lo mantiene ecc...
Org-mode ha i seguenti modi per cambiare la visibilità del testo nel buffer:
- C-c / /org-sparse-tree/ :: This prompts for an extra key to select a sparse-tree
creating command.
- *F11* - /Loggin Work/ - per la gestione del log dei tempi
| Key | Origin | My Binding |
|---------+-------------------------------------+------------|
| <F11> | Visualizza dove c'è il clock attivo | Clock Goto |
| S-<F11> | Fa partire il clock di timing | Clock In |
| C-<F11> | Termina il clock di timng | Clock Out |
| M-<F11> | Org manage per navigare fra i file | Org-Manage |
#+BEGIN_SRC emacs-lisp
(global-set-key (kbd "<f11>") 'org-clock-goto)
(global-set-key (kbd "C-<f11>") 'org-clock-in)
(global-set-key (kbd "S-<f11>") 'org-clock-out)
(global-set-key (kbd "M-<f11>") 'org-manage )
#+END_SRC
*/ToReview:/*
Impostiamo il tasto F11 per iteragire con i timer ed il log delle ore e quindi devo
pensare a come fare le seguenti cose:
- avviare il log del task: Clock in
- fermare un log del task: Clock out
- fare il report dei log: ?
- stimare il tempo di un task
- modificare la stima di un task
- mostrare stima e log di un task in forma colonne
- navigare fra i task loggati (la ring relativa)
- *F12* - /Navigazione/ - per la navigazione fra i file (e la pubblicazione per compatibilità)
| <F12> | Apre aggenda (C-c a) |
| S-<F12> | Aprire subito Trash.org |
| C-<F12> | Aprire subito InBox.org |
| M-<F12> | Aprire subito Mrk.org |
| C-S-<F12> | Pubblicazione file org |
#+BEGIN_SRC emacs-lisp
(global-set-key (kbd "<f12>") 'org-agenda)
(global-set-key (kbd "S-<f12>") (lambda() (interactive)(find-file "~/Doc/Trash/Trash.org")))
(global-set-key (kbd "C-<f12>") (lambda() (interactive)(find-file "~/Doc/Org/InBox.org")))
(global-set-key (kbd "M-<f12>") (lambda() (interactive)(find-file "~/Doc/Org/Private/MRK.org")))
(global-set-key (kbd "C-S-<f12>") 'MRK/save-then-publish)
#+END_SRC
Mentre imposto anche questi miei key binding custom:
#+BEGIN_SRC emacs-lisp
;; Vecchio binding solo per reference:
;;(global-set-key (kbd "<f12>") 'org-agenda)
;;(global-set-key (kbd "<f5>") 'bh/org-todo)
;;(global-set-key (kbd "<S-f5>") 'bh/widen)
;;(global-set-key (kbd "<f7>") 'bh/set-truncate-lines)
;;(global-set-key (kbd "<f8>") 'org-cycle-agenda-files)
;;(global-set-key (kbd "<f9> <f9>") 'bh/show-org-agenda)
;;(global-set-key (kbd "<f9> b") 'bbdb)
;;(global-set-key (kbd "<f9> c") 'calendar)
;;(global-set-key (kbd "<f9> f") 'boxquote-insert-file)
;;(global-set-key (kbd "<f9> g") 'gnus)
;;(global-set-key (kbd "<f9> h") 'bh/hide-other)
;;(global-set-key (kbd "<f9> n") 'bh/toggle-next-task-display)
;;(global-set-key (kbd "<f9> I") 'bh/punch-in)
;;(global-set-key (kbd "<f9> O") 'bh/punch-out)
;;(global-set-key (kbd "<f9> o") 'bh/make-org-scratch)
;;(global-set-key (kbd "<f9> r") 'boxquote-region)
;;(global-set-key (kbd "<f9> s") 'bh/switch-to-scratch)
;;(global-set-key (kbd "<f9> t") 'bh/insert-inactive-timestamp)
;;(global-set-key (kbd "<f9> T") 'bh/toggle-insert-inactive-timestamp)
;;(global-set-key (kbd "<f9> v") 'visible-mode)
;;(global-set-key (kbd "<f9> l") 'org-toggle-link-display)
;;(global-set-key (kbd "<f9> SPC") 'bh/clock-in-last-task)
;;(global-set-key (kbd "C-<f9>") 'previous-buffer)
;;(global-set-key (kbd "M-<f9>") 'org-toggle-inline-images)
;;(global-set-key (kbd "C-x n r") 'narrow-to-region)
;;(global-set-key (kbd "C-<f10>") 'next-buffer)
;;(global-set-key (kbd "<f11>") 'org-clock-goto)
;;(global-set-key (kbd "C-<f11>") 'org-clock-in)
;;(global-set-key (kbd "C-<f12>") 'MRK/save-then-publish)
#+END_SRC
*** Tasks and States
Imposto come parole chiavi per i ToDo i seguenti codici:
| key | Descr |
|---------+--------------------------|
| TODO | Task da fare |
| NEXT | Task in esecuzione |
| DONE | Task terminato |
| WAITING | Task in attesa |
| HOLD | Task Bloccato |
| ABORT | Task Abortito(Cancellato |
| PHONE | Telefonata |
| MEETING | Meeting |
e corrisponde al seguente schema:
#+begin_src plantuml :file ~/Pub/.Tmp/Img/MyInit.org_task_states.png :cache yes :tangle no
title Task States
[*] -> TODO
TODO -> NEXT
TODO -> DONE
NEXT -> DONE
DONE -> [*]
TODO --> WAITING
WAITING --> TODO
NEXT --> WAITING
WAITING --> NEXT
HOLD --> CANCELLED
WAITING --> CANCELLED
CANCELLED --> [*]
TODO --> HOLD
HOLD --> TODO
TODO --> CANCELLED
TODO: t
NEXT: n
DONE: d
WAITING:w
note right of WAITING: Note records\nwhat it is waiting for
HOLD:h
note right of CANCELLED: Note records\nwhy it was cancelled
CANCELLED:c
WAITING --> DONE
#+end_src
per le chiamate:
#+begin_src plantuml :file ~/Pub/.Tmp/Img/MyInit.org_phone_states.png :cache yes :tangle no
title Phone Call Task State
[*] -> PHONE
PHONE -> [*]
#+end_src
per i meeting:
#+begin_src plantuml :file ~/Pub/.Tmp/Img/MyInit.org_meeting_states.png :cache yes :tangle no
title Meeting Task State
[*] -> MEETING
MEETING -> [*]
#+end_src
Per ciacuno di essi, definisco anche la lettera di abbreviazione per l'inserimento
veloce
#+BEGIN_SRC emacs-lisp
;; Task keywords definitions:
(setq org-todo-keywords
(quote (
(sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
(sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "ABORT(a@/!)" "PHONE" "MEETING")
)
)
)
#+END_SRC
Per ciascuna keyword posso personalizzare il faceplate, ma per ora non lo faccio.
#+BEGIN_SRC emacs-lisp
;; ---> ;; Task keywords colour settings:
;; ---> (setq org-todo-keyword-faces (quote (
;; ---> ("TODO" :foreground "red" :weight bold)
;; ---> ("NEXT" :foreground "blue" :weight bold)
;; ---> ("DONE" :foreground "forest green" :weight bold)
;; ---> ("WAITING" :foreground "orange" :weight bold)
;; ---> ("HOLD" :foreground "magenta" :weight bold)
;; ---> ("ABORT" :foreground "forest green" :weight bold)
;; ---> ("MEETING" :foreground "forest green" :weight bold)
;; ---> ("PHONE" :foreground "forest green" :weight bold)
;; ---> )))
#+END_SRC
Ai tipi di ToDo, associo anche in modo automatico dei tag per facilitare filtri o
ricerche:
#+BEGIN_SRC emacs-lisp
;; Triggers that automatically assign tags to tasks based on state changes:
(setq org-todo-state-tags-triggers (quote (
("ABORT" ("ABORT" . t))
("WAITING" ("WAITING" . t))
("HOLD" ("WAITING") ("HOLD" . t))
(done ("WAITING") ("HOLD"))
("TODO" ("WAITING") ("ABORT") ("HOLD"))
("NEXT" ("WAITING") ("ABORT") ("HOLD"))
("DONE" ("WAITING") ("ABORT") ("HOLD"))
)))
#+END_SRC
Abilito la selezione veloce delle keyword tramite il comando
: C-c C-t Keyword
Inoltre abilito lo switch fra le keyword tramite i comandi
: S-left
: S-right
senza però che si attivino le annotazioni automatiche.
#+BEGIN_SRC emacs-lisp
;; Fast todo selection allows changing from any task todo state to any other state directly by selecting the appropriate key from the fast todo selection key menu.
;; The relative command is: C-c C-t KEY where KEY is the appropriate fast todo state selection key as defined in org-todo-keywords.
(setq org-use-fast-todo-selection t)
;;
;; Cycles through the todo states with S-left and S-right, but skips setting timestamps and entering notes
(setq org-treat-S-cursor-todo-selection-as-state-change nil)
#+END_SRC
*** Tags :ToReview:MISSING:
imposto i tag generali in uso
*** Capture Setup :ToReview:MISSING:
imposto i form di cattura veloce
*** Refiling Tasks: :ToReview:MISSING:
imposto il refill
*** org-protocol Setup: :ToReview:MISSING:
imposto org protocol
*** Agenda Setup :ToReview:MISSING:
Per l'aggenda in primo acchitto utilizzo i file in cui lavoro, quindi utilizzerò i file:
- Inbox.org: Per tutti i task su cui sto lavorando e che quindi avranno sicuramente
ToDo o lavori schedulati.
- Diary.org: Per tutti i task ripetitivi o prevedibili tipo compleanni o altro o
scadenze future (assicurazione, dividendi degli investimenti ecc...)
- KnowHow: Per tutti i file con le mie note, sopratutto per le ricerche in base ai tag
- Private: Per i miei lavori privati, in particolare prevedo vi saranno soprattutto
task ripetitivi, perchè gestendo i lavori correnti con il Inbox.org, sulla cartella
resteranno pochi task Todo o schedulati.
- Work: Per i miei lavori, in particolare prevedo vi saranno soprattutto task
ripetitivi, perchè gestendo i lavori correnti con il Inbox.org, sulla cartella
resteranno pochi task Todo o schedulati.
#+BEGIN_SRC emacs-lisp
;; File gestiti dall'agenda:
(if (boundp 'org-user-agenda-files)
(setq org-agenda-files org-user-agenda-files)
(setq org-agenda-files ( quote (
"~/Doc/Org/Diary.org"
"~/Doc/Org/InBox.org"
"~/Doc/Org/KnowHow"
"~/Doc/Org/Private"
"~/Doc/Org/Work"
)))
)
#+END_SRC
*** Time Clocking, Reporting, Tracking, Estimate :ToReview:MISSING:
Dal manuale, si ricavano i seguenti comandi per la retentività dei clock:
#+begin_src emacs-lisp
(setq org-clock-persist 'history)
(org-clock-persistence-insinuate)
#+end_src
Voglio che il pulsante F9 sia dedicato al clock e quindi le varie comandi:
- org-clock-goto va al clock in corso (F9)
*** GTD stuff (Project & Archiving) :ToReview:MISSING:
imposto i set per usare GTD ed eventualmente projetile e treemacs
*** Publishing and Exporting :ToReview:MISSING:
Impostazioni generali utili per l'esportazione (anche del singolo file):
#+begin_src emacs-lisp
;; Alphabetical listing options need to be set before the exporters are loaded for filling to work correctly
(setq org-alphabetical-lists t)
;;
;; Explicitly load required exporters
(require 'ox-html)
(require 'ox-latex)
(require 'ox-ascii)
(require 'ox-md)
(require 'ox-texinfo)
;;
;; Imposto dove trovare Ditaa (Corretto il setup di Ditaa in base alla discussione del forum: http://thread.gmane.org/gmane.emacs.orgmode/27859/focus=27864)
(setq org-ditaa-jar-path "~/.MyCfg/emacs/AddOn/app/ditaa0_9.jar")
;;
;; Imposto dove trovare PlantUML (http://plantuml.sourceforge.net/faq.html)
(setq org-plantuml-jar-path "~/.MyCfg/emacs/AddOn/app/plantuml-1.2023.1.jar")
#+end_src
Imposto Babel:
#+begin_src emacs-lisp
;; Org-babel Setup:
;;
;; Imposto di mostrare l'immagine:
(add-hook 'org-babel-after-execute-hook 'org-display-inline-images)
;(add-hook 'org-babel-after-execute-hook 'bh/display-inline-images 'append)
;;
;; Make babel results blocks lowercase
(setq org-babel-results-keyword "results")
;;
;; Imposto quali linguaggi caricare: Per Problema a Ditaa sto studianto: http://thread.gmane.org/gmane.emacs.orgmode/27859/focus=27864
(org-babel-do-load-languages
(quote org-babel-load-languages)
(quote (
; (asymptote . t)
; (awk . t)
; (C . t)
; (calc . t)
; (clojure . t)
; (comint . t)
; (core . t)
; (csharp . t)
; (css . t)
(ditaa . t)
(dot . t)
(emacs-lisp . t)
; (eval . t)
; (exp . t)
; (fortran . t)
; (gnuplot . t)
; (haskell . t)
; (io . t)
; (java . t)
; (js . t)
; (keys . t)
; (latex . t)
; (ledger . t)
; (lilypond . t)
; (lisp . t)
; (lob . t)
; (makefile . t)
; (matlab . t)
; (maxima . t)
; (mscgen . t)
; (ocaml . t)
; (octave . t)
(org . t)
; (perl . t)
; (picolisp . t)
(plantuml . t)
; (python . t)
; (R . t)
; (ref . t)
; (ruby . t)
; (sass . t)
; (scala . t)
; (scheme . t)
; (screen . t)
; (sh . t)
; (shell . t)
; (shen . t)
; (sql . t)
; (sqlite . t)
; (table . t)
; (tangle . t)
)))
;;
;; Do not prompt to confirm evaluation
;; This may be dangerous - make sure you understand the consequences
;; of setting this -- see the docstring for details
(setq org-confirm-babel-evaluate nil)
;;
;; Use fundamental mode when editing plantuml blocks with C-c '
(add-to-list 'org-src-lang-modes (quote ("plantuml" . fundamental)))
;;
#+end_src
Altro sull'esportazione:
#+begin_src emacs-lisp
;; Inline images in HTML instead of producting links to the image
(setq org-export-html-inline-images t)
;;; Disabilita la visualizzazione delle immagini per evitare errori nelle sessioni ssh
;(setq org-startup-with-inline-images nil)
;;
;; Inline images in HTML instead of producting links to the image
(setq org-html-inline-images t)
;;
;; Do not use sub or superscripts - I currently don't need this functionality in my documents
;(setq org-export-with-sub-superscripts nil)
;;
; ;; Usa foglio di stile locale: Preferisco caricarlo dal file template
; (setq org-html-head-extra "<link rel=\"stylesheet\" href=\"file://C:/_Home/Pub/.Styles/norang/doc.norang.ca_org.css\" type=\"text/css\" />")
; (setq org-html-head-include-default-style nil)
; ;;
; ;; Do not generate internal css formatting for HTML exports
; (setq org-export-htmlize-output-type (quote css))
;;
;; Disabilita lo stile di default:
(setq org-export-html-style-include-default nil)
;;
;; Export with LaTeX fragments
(setq org-export-with-LaTeX-fragments t)
;;
;; For export to latex I use the following setting to get fontified listings from source blocks:
(setq org-export-latex-listings t)
;;
;; Fontify Latex listings for source blocks
(setq org-latex-listings t)
;;
;; Rimuovo l'header XML per problemi di compatibilità con open office
(setq org-html-xml-declaration (quote (
("html" . "")
("was-html" . "<?xml version=\"1.0\" encoding=\"%s\"?>")
("php" . "<?php echo \"<?xml version=\\\"1.0\\\" encoding=\\\"%s\\\" ?>\"; ?>")
)))
;;
;; Permetto in automatico l'override delle variabili di personalizzazione dell'esportazione
(setq org-export-allow-BIND t)
;;
;;
#+end_src
Infine definisco il progetto di esportazione:
#+begin_src emacs-lisp
;; Progetti per l'esportazione automatica:
;; OrgData - Esportazione di tutti i file in OrgData
(setq org-publish-project-alist (quote (
;; Progetti nell'esportazione dei file Org:
;; - orgFile are the org-files that generate the content
;; - imgFile are images and css files that need to be included
;; - OrgData is the top-level project that gets published
("orgFile"
:base-directory "~/Doc/Org"
:publishing-directory "~/Pub"
:recursive t
:section_numbers nil
:table-of-contents nil
:base-extension "org"
:publishing-function org-html-publish-to-html
:auto-index t
:index-filename "Index.org"
:index-title "Indice del materiale Org-Mode"
:index-function org-publish-org-index
:author-info t
:creator-info t
:auto-sitemap t
:sitemap-filename "MySiteMap.org"
:html-head-extra "<!-- Start Favicon e style per il sitemap -->\n<link rel=\"stylesheet\" type=\"text/css\" href=\"file://C:/_Home/Pub/.Styles/solarized-css/solarized-dark.css\"/>\n<link rel=\"icon\" type=\"image/x-icon\" href=\"file://C:/_Home/Pub/.Res/Img/CSiCo_favicon.ico\">\n<!-- End Favicon e style per il sitemap -->"
:sitemap-title "Indice del materiale esportato in html")
("imgFile"
:base-directory "~/Doc/Org"
:publishing-directory "~/Pub"
:base-extension "css\\|pdf\\|png\\|jpg\\|gif\\|txt"
:publishing-function org-publish-attachment
:recursive t
:author nil)
("OrgData"
:components ("orgFile" "imgFile"))
)))
#+end_src
;; Export org-mode theme
;; * Export org-mode theme
;; In ~/.MyCfg/emacs/templates inserisco le definizioni dei themi da utilizzare con
;; l'esportazione da org; mentre in ~/Pub/.Styles inserisco le relative risorse (css, js,
;; ecc...) che sono necessarie per caricare localmente il tema. Quando possibile mantengo
;; nelle definizioni sia il setup per i riferimenti locali (per mio utilizzo locale), sia
;; il setup con i riferimenti remoti in modo che il file sia visibile da tutti (per
;; utilizzo di altri).
;;
;; In particolare al 2020/04 ho impostato due themi principali, mentre al 2020/06 ho
;; introdotto altri themi, per arrivare ai seguenti che riassumo brevemente nella forma
;; locale:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/norang/norang_local.org
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/org-html-themes/theme-bigblow-local.setup
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/org-html-themes/theme-readtheorg-local.setup
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/gongzhitaao.org/gongzhitaao_local.org
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/solarized-css/solarized-dark_local.org
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/solarized-css/solarized-light_local.org
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/thi.ng/thi.ng_local.org
;;
;; ** Norang
;; Tema che ho ricavato dal sito [[http://doc.norang.ca/org-mode.html][Org Mode - Organize Your Life In Plain Text!]]
;;
;; I file di configurazione sono in ~/.MyCfg/emacs/templates/norang, mentre le relative
;; risorse le ho messe in ~/Pub/.Styles/norang.
;;
;; Per applicarlo utilizzare il seguente metadata sul file org:
;; - Versione con risorse locali:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/norang/norang_local.org
;; - Versione con risorse remote:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/norang/norang.org
;;
;; ** Org-HTML (Bigblow, ReadTheOrg)
;;
;; ** gongzhitaao.org
;; Stile semplice preso dal sito: https://gongzhitaao.org/orgcss/ tramite il link diretto:
;; [[https://gongzhitaao.org/orgcss/org.css][org.css]] e che dispone del repository: [[https://github.com/gongzhitaao/orgcss][GitHub]]
;;
;; I file di configurazione sono in ~/.MyCfg/emacs/templates/gongzhitaao.org, mentre le relative
;; risorse le ho messe in ~/Pub/.Styles/gongzhitaao.org.
;;
;; Per applicarlo utilizzare il seguente metadata sul file org:
;; - Versione con risorse locali:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/gongzhitaao.org/gongzhitaao_local.org
;; - Versione con risorse remote:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/gongzhitaao.org/gongzhitaao.org
;;
;; ** solarized-css
;; Dal sito [[http://thomasf.github.io/solarized-css/][solarized-css]] ([[https://github.com/thomasf/solarized-css][GitHub]]) ricavo un thema chiaro ed uno scuro che sembrano
;; promettenti:
;;
;; I file di configurazione sono in ~/.MyCfg/emacs/templates/solarized-css, mentre le
;; relative risorse le ho messe in ~/Pub/.Styles/solarized-css.
;;
;; Per applicare, il thema chiaro, utilizzare il seguente metadata sul file org:
;; - Versione con risorse locali:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/solarized-css/solarized-light_local.org
;; - Versione con risorse remote:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/solarized-css/solarized-light.org
;;
;; Per applicare, il thema scuro, utilizzare il seguente metadata sul file org:
;; - Versione con risorse locali:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/solarized-css/solarized-dark_local.org
;; - Versione con risorse remote:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/solarized-css/solarized-dark.org
;;
;; ** thi.ng/org-spec
;; Dal sito https://github.com/thi-ng/org-spec ricavo un thema semplice ma con la TOC a
;; sinistra:
;;
;; I file di configurazione sono in ~/.MyCfg/emacs/templates/thi.ng, mentre le
;; relative risorse le ho messe in ~/Pub/.Styles/thi.ng.
;;
;; Per applicarlo utilizzare il seguente metadata sul file org:
;; - Versione con risorse locali:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/thi.ng/thi.ng_local.org
;; - Versione con risorse remote:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/thi.ng/thi.ng.org
;;
;; ** org-html-themes (Bigblow e ReadTheOrg)
;; Vi sono più versioni, il reposity di [[https://github.com/fniessen/org-html-themes][fniessen]] è stato forkato da [[https://github.com/paulzql/org-html-themes][paulzql]] che io avevo
;; inizialmente preso a riferimento. Però questo è fermo al 2015, mentre fniessen è più
;; attivo e quindi faccio l'upgrade sperando che così risolva i piccoli errori riscontrati
;; nella toc laterale quando ho molte headline.
;;
;; *** Repository fniessen/org-html-themes
;; Sito di riferimento: [[https://github.com/fniessen/org-html-themes][GitHub]]
;;
;; *** Repository paulzql/org-html-themes
;; Sito di riferimento: [[https://github.com/paulzql/org-html-themes][GitHub]]
;;
;; Da questo sito, ho ricavato il reposity del 2020/04, ho copiato i file di setup in
;; ~/.MyCfg/emacs/templates/org-html-themes dopo aver corretto i riferimenti locali; le
;; risorse le ho copiate nella cartella C:\_Home\Pub\.Styles\org-html-themes-master.
;;
;; **** Bigblow
;; Per applicarlo utilizzare il seguente metadata sul file org:
;; - Versione con risorse locali:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/org-html-themes/theme-bigblow-local.setup
;; - Versione con risorse remote:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/org-html-themes/theme-bigblow.setup
;;
;; Questo tema permette di utilizzare le seguenti abbreviazioni per navigare:
;; | Shortcut | What it does |
;; |----------+-----------------------------------|
;; | ? or h | Access the dashboard |
;; | n | Move to the next main heading |
;; | p | Move to the previous main heading |
;; | b | Scroll up |
;; | < | Scroll to top |
;; | > | Scroll to bottom |
;; | - | Collapse all |
;; | + | Expand all |
;; | r | Go to next task in list |
;; | R | Go to previous task in list |
;; | q | Stop reviewing the list of tasks |
;; | g | Reload the page |
;; |----------+-----------------------------------|
;;
;; **** ReadTheOrg
;; Per applicarlo utilizzare il seguente metadata sul file org:
;; - Versione con risorse locali:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/org-html-themes/theme-readtheorg-local.setup
;; - Versione con risorse remote:
;; : #+SETUPFILE: ~/.MyCfg/emacs/templates/org-html-themes/theme-readtheorg.setup
*** Reminders :ToReview:MISSING:
Imposto i remainder e come utilizzarli.
*** Funzioni in uso:
**** MRK/save-then-publish
Funzione ricavata dall'esempio in [[http://doc.norang.ca/org-mode.html][Org Mode - Organize Your Life In Plain Text!]] per:
- salvare tutti i buffer
- inserire per ciascun file la validazione dell'html
- richiamare per ciascuno l'esportazione in html
- infine richiamare la pubblicazione dell'intero progetto
#+BEGIN_SRC emacs-lisp
(defun MRK/save-then-publish (&optional force)
(interactive "P")
(save-buffer)
(org-save-all-org-buffers)
(let ((org-html-head-extra)
(org-html-validation-link "<a href=\"http://validator.w3.org/check?uri=referer\">Validate XHTML 1.0</a>"))
(org-publish-current-project force)))
#+END_SRC
**** MRK/hide-other
Funzione per aprire completamente il ramo in cui sono e ragruppare tutti gli altri.
#+BEGIN_SRC emacs-lisp
(defun bh/hide-other ()
(interactive)
(save-excursion
(org-back-to-heading 'invisible-ok)
(hide-other)
(org-cycle)
(org-cycle)
)
)
#+END_SRC
** - : org-manage: :ToReview:
Dal sito [[https://github.com/dmgerman/org-manage][github]] ricavo il file [[file:~/.MyCfg/emacs/AddOn/org-manage.el][org-manage.el]] che permette di avere un riepilogo dei
file org. Il file lo ho copiato nella directory che carico allo startup (vedi relativo
[[#Add-AddOn][paragrafo]]); per velocizzare si può anche compilare il file ma per ora non lo faccio.
Configuro quindi il load del modo e gli associo i relativi file:
#+BEGIN_SRC emacs-lisp
;; Installo il pacchetto necessario:
(require 'ctable)
;; Installo il pacchetto vero e propio:
(require 'org-manage)
;; Inizializzo org-manage indicando la cartella da scansionare per i file org:
(setq org-manage-directory-org "~/Doc/Org")
;; Ora basta richiamare la funzione:
;; M-x org-manage
;; o usare il bind 'Alt+F11'
#+END_SRC
Con la versione 28 di emacs, questo non funziona più, in particolare dà errore
#+begin_comment
... remove-duplicates ...
#+end_comment
per risolverlo, ho dovuto cambiare il comando lisp 'remove-duplicates' che non è più
supportato, con il comando 'seq-uniq'
Inoltre si ha un problema con la funzione org-manage che non definisce bene il Hook al
click e quindi quando clicco non mi porta al file corretto. Se invece copio la funzione
sul buffer scratch e la valuto con C-j o C-M-q, poi funziona correttamente.
*** TODO Trovare come bypassare/risolvere il problema al Click
Servirebbe fare un eval automatico della funzione dopo l'avvio di emacs. Guardando in
internet ho vvisto un simil hook sull'avvio di emacs che richiama del codice e quindi
sarebbe da usare per richiamare il codice che compila la funzione.
** ???? Hem ???? :ToReview:Disable:
Package per gestire autocompletamenti e abbreviazioni. Simile ma più potente di IDO,
devo approfondire. [[https://github.com/emacs-helm/helm][helm from GitHub]]
** ???? Projectile ???? :ToReview:Disable:
Package per gestire i progetti in base alle directory (tipo i project di notepad++ o di
sublimetext). Merita approfondimenti.
** ???? Dashboard ???? :ToReview:Disable:
Package per visualizzare un albero a sinistra con link ai file di una directory.
visto sul video del corso di emacs di Lukewh [[https://www.youtube.com/watch?v=Bu7nF9hPSts][Video 10]] e come sito di riferimento ha
[[https://github.com/emacs-dashboard/emacs-dashboard][dashboard]]
** ???? Treemacs ???? :ToReview:Disable:
Package per mostrare l'albero del progetto a sinistra come faccio con
notepad++. Gestisce più progetti e più cose, da approfondire.
visto sul video del corso di emacs di Lukewh [[https://www.youtube.com/watch?v=Bu7nF9hPSts][Video 10]] e come sito di riferimento ha
[[https://github.com/Alexander-Miller/treemacs][treemacs]].
* KeyBinding
Qui imposto dei key binding generali.
Per riepilogare tutti i keybinding, riporto anche quelli fatti in altri punti della
configurazione commentandoli e lincandoli al punto in cui sono definiti.
** Assegnami i caratteri non presenti:
Per facilitare l'editazione rimappo alcuni caratteri non presenti:
#+BEGIN_SRC emacs-lisp
;; Tilde
(global-set-key (kbd "C-ù") (kbd "~"))
;;
;; Riassegnamento del set mark al posto di C-SPC
(global-set-key (kbd "C-ò") 'set-mark-command)
#+END_SRC
** Org-mode
Riepilogo qui i keybinding fatti per org-mode. In realtà sono stati fatti nella
relativa sezione in package. Qui li riepilogo solo per facilitare una revisione e la
creazione di un resume.
#+BEGIN_SRC emacs-lisp
;(global-set-key "\C-cl" 'org-store-link) ;; Link all'editor dei links
;(global-set-key "\C-ca" 'org-agenda) ;; Link normale per aprire l'aggenda.
;(global-set-key "\C-cb" 'org-iswitchb) ;; Link a iswitch
;(global-set-key (kbd "C-M-r") 'org-capture) ;; Link a Capture
;; ;;(global-set-key (kbd "C-c l") 'org-store-link)
;; (global-set-key (kbd "C-c a") 'org-agenda)
;; (global-set-key (kbd "C-c c") 'org-capture)
;; (global-set-key (kbd "<f12>") 'org-agenda)
;; ;;(global-set-key (kbd "<f5>") 'bh/org-todo)
;; ;;(global-set-key (kbd "<S-f5>") 'bh/widen)
;; ;;(global-set-key (kbd "<f7>") 'bh/set-truncate-lines)
;; ;;(global-set-key (kbd "<f8>") 'org-cycle-agenda-files)
;; ;;(global-set-key (kbd "<f9> <f9>") 'bh/show-org-agenda)
;; ;;(global-set-key (kbd "<f9> b") 'bbdb)
;; ;;(global-set-key (kbd "<f9> c") 'calendar)
;; ;;(global-set-key (kbd "<f9> f") 'boxquote-insert-file)
;; ;;(global-set-key (kbd "<f9> g") 'gnus)
;; ;;(global-set-key (kbd "<f9> h") 'bh/hide-other)
;; ;;(global-set-key (kbd "<f9> n") 'bh/toggle-next-task-display)
;; ;;(global-set-key (kbd "<f9> I") 'bh/punch-in)
;; ;;(global-set-key (kbd "<f9> O") 'bh/punch-out)
;; ;;(global-set-key (kbd "<f9> o") 'bh/make-org-scratch)
;; ;;(global-set-key (kbd "<f9> r") 'boxquote-region)
;; ;;(global-set-key (kbd "<f9> s") 'bh/switch-to-scratch)
;; ;;(global-set-key (kbd "<f9> t") 'bh/insert-inactive-timestamp)
;; ;;(global-set-key (kbd "<f9> T") 'bh/toggle-insert-inactive-timestamp)
;; ;;(global-set-key (kbd "<f9> v") 'visible-mode)
;; ;;(global-set-key (kbd "<f9> l") 'org-toggle-link-display)
;; ;;(global-set-key (kbd "<f9> SPC") 'bh/clock-in-last-task)
;; ;;(global-set-key (kbd "C-<f9>") 'previous-buffer)
;; ;;(global-set-key (kbd "M-<f9>") 'org-toggle-inline-images)
;; ;;(global-set-key (kbd "C-x n r") 'narrow-to-region)
;; ;;(global-set-key (kbd "C-<f10>") 'next-buffer)
;; (global-set-key (kbd "<f11>") 'org-clock-goto)
;; (global-set-key (kbd "C-<f11>") 'org-clock-in)
;; ;;(global-set-key (kbd "C-<f12>") 'bh/save-then-publish)
#+END_SRC
* Upgrade
;; * Upgrade
;;
;; ** Correzione Refil:
;; Il refil non funziona più, non mi permette di cambiare file, per ovviare, ho visto il
;; sito [[https://blog.aaronbieber.com/2017/03/19/organizing-notes-with-refile.html][Organizing Notes With Refile]] che mi dà questa ocnfigurazione:
;; #+begin_src emacs-lisp
;; ;; I want to be able to move a node to any of my agenda files,
;; ;; and I also want to consider nodes up to three levels deep.
;; (setq org-refile-targets '((org-agenda-files :maxlevel . 3)))
;; ;; Refile to the Top Level
;; (setq org-refile-use-outline-path 'file)
;; ;; But, if you use Helm, which you really should, you will notice that as soon
;; ;; as you set this option, your target list contains only one filename. Typing
;; ;; to complete may allow you to find another filename within your agenda files,
;; ;; but you will only ever see a filename; no other headings ever appear!
;; ;; Why is that?!
;; ;; It took a bit of searching to find this solution. This is because the
;; ;; default behavior for Refile is to allow you to do a step-by-step completion
;; ;; of this path, but if you’re using Helm, Helm is overriding the completing
;; ;; read to make it into a narrowing list (that we have all come to love).
;; ;; So what you need to do is tell Org that you don’t want to complete in steps;
;; ;; you want Org to generate all of the possible completions and present them at
;; ;; once. Helm then lets you narrow to the one you want.
;; (setq org-outline-path-complete-in-steps nil)
;; ;; Creating New Parents
;; (setq org-refile-allow-creating-parent-nodes 'confirm)
;; #+end_src
;; Altro sito interessante, che ho trovato dopo: [[https://yiming.dev/blog/2018/03/02/my-org-refile-workflow/][My org-refile workflow]]
;;
;; ** Inserito ox-twbs: exporting to HTML with a Twitter Bootstrap theme
;; Da [[https://github.com/marsmining/ox-twbs][GITHub]] ricavato l'esporter per esportare i file org, come documenti HTML compatibili
;; con il [[http://getbootstrap.com/][Twitter Bootstrap]].
;; #+BEGIN_SRC emacs-lisp
;; (use-package ox-twbs
;; :ensure t)
;; #+END_SRC