Le principal avantage du package.el est l'automatisation de l'installation de base des paquets Emacs Lisp. Pour de nombreux paquets, tout ce que vous devez faire est d'installer le paquet . Cependant, pour certains paquets, en particulier les paquets qui doivent ajouter crochets à différents modes ou obliger l'utilisateur à sélectionner des fonctionnalités avancées ou fonctionnalités qui ont des alternatives que package.el ne peut pas prédire, en particulier choix en fonction des préférences de l'utilisateur, vous devrez Ajoutez le code init dans init.el ou .emacs.
J'ai trouvé le paquet use-package très utile pour gérer les paquets d'elisp.
Voici ce que j'ai dans mon dossier de init.el utiliser usage package
(add-to-list 'package-archives `("melpa" . "https://melpa.org/packages/"))
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
(package-initialize)
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(setq use-package-verbose nil)
(eval-when-compile
(require 'use-package))
(require 'diminish)
(require 'bind-key)
Ensuite, je bloque l'utilisation-paquet pour chacun des paquets dont j'ai besoin. Certains paquets sont très simples, par ex.
(use-package undo-tree
:ensure t
:diminish undo-tree-mode
:config (global-undo-tree-mode))
use-package swiper
:ensure t
:bind ("C-s". swiper))
Le: assurer clé indique utiliser-package pour vous assurer qu'il obtient ce paquet à partir d'un référentiel ELPA . Il existe d'autres clés pour des choses comme épinglant à un référentiel spécifique , faire l'installation avant de charger le paquet, après le chargement du paquet, ajoutant auto = mode alist, les clés de liaison, etc.
la chose vraiment intéressante est que Une fois que vous avez tous vos blocs de package d'utilisation définis dans votre fichier init.el, vous pouvez déplacer ce fichier init.el vers n'importe quelle nouvelle machine et la première fois que vous démarrez emacs, il téléchargera automatiquement tous les packages dont vous avez besoin . L'autre bonne chose à propos de use-package est qu'il va mettre les choses à automatiquement les paquets. Cela peut considérablement accélérer votre temps de démarrage emacs. Vous pouvez également utiliser use-package pour gérer la configuration des fonctionnalités intégrées ou bibliothèques elisp installées manuellement. Vraiment aide à gérer votre fichier init.el et le rend très facile à ajouter/supprimer/déboguer des problèmes, car tout le code est en un seul endroit. Il est aussi puissant que vous avez besoin. Voici ma configuration de mode d'organisation . Ce n'est pas forcément une excellente configuration organisationnelle, mais cela montre comment utiliser use-package pour des configurations plus complexes - mon mode org est fortement configuré/personnalisé pour mes besoins spécifiques.
(use-package org
:pin org
:ensure org-plus-contrib
:init
(setq org-catch-invisible-edits 'smart
org-ctrl-k-protect-subtree t
org-default-notes-file "~/Dropbox/org/notes.org"
org-directory "~/Dropbox/org"
org-ellipsis "…"
org-list-allow-alphabetical t
org-list-indent-offset 2
org-pretty-entities t
org-startup-align-all-tables t
org-startup-with-inline-images (display-graphic-p)
org-support-shift-select t)
(setq org-modules '(org-bibtex
org-crypt
org-docview
org-eww
org-info
org-irc
org-protocol))
(setq org-capture-templates
(quote
(("t" "todo" entry
(file "~/Dropbox/org/refile.org")
"* TODO %?\n\n %a"
:empty-lines-after 1 :clock-in t :clock-resume t)
("r" "respond" entry
(file "~/Dropbox/org/refile.org")
"* NEXT Respond to %:from on %:subject\n SCHEDULED: %t\n %a"
:empty-lines-after 1 :clock-in t :clock-resume t)
("n" "note" entry
(file "~/Dropbox/org/notes.org")
"* %? :NOTE:\n\n %a"
:empty-lines-after 1 :clock-in t :clock-resume t)
("j" "journal" entry
(file+datetree "~/Dropbox/org/journal.org")
"* %?\n "
:empty-lines-after 1 :clock-in t :clock-resume t)
("p" "phone" entry
(file "~/Dropbox/org/refile.org")
"* PHONE %? :PHONE:\n "
:empty-lines-after 1 :clock-in t :clock-resume t)
("m" "mail" entry
(file "~/Dropbox/org/refile.org")
"* MAIL from %:from on %:subject\n\n %a"
:empty-lines-after 1 :clock-in t :clock-resume t))))
(setq org-enforce-todo-checkbox-dependencies t
org-enforce-todo-dependencies t
org-log-done 'time
org-log-into-drawer t)
(setq org-todo-keywords
(quote
((sequence "TODO(t)"
"NEXT(n)"
"STARTED(s!)"
"DELEGATED([email protected]/!)"
"HOLD([email protected]/!)"
"|"
"CANCELLED([email protected])"
"DONE(d!)"))))
(setq org-log-refile 'time
org-refile-allow-creating-parent-nodes 'confirm
org-refile-targets (quote ((nil :maxlevel . 5)
(org-agenda-files :maxlevel . 5)))
org-refile-use-outline-path (quote file))
(setq org-clock-in-resume t
org-clock-out-remove-zero-time-clocks t
org-clock-persist 'clock
org-time-clocksum-format '(:hours "%d" :require-hours t
:minutes ":%02d" :require-minutes t))
(setq org-agenda-files '("~/Dropbox/org")
org-agenda-remove-tags t)
(setq org-agenda-custom-commands
(quote
(("n" "Agenda and all TODO's"
((agenda "" nil)
(alltodo "" nil))
nil)
("wr" "Weekly Report"
((todo "DONE|CANCELLED"
((org-agenda-overriding-header "Completed and Cancelled : Last Week")))
(todo "STARTED|NEXT"
((org-agenda-overriding-header "WIP")))
(todo "HOLD|DELEGATED"
((org-agenda-overriding-header "On Hold and Delegated Tasks")))
(todo "TODO"
((org-agenda-overriding-header "Task Backlog"))))
nil nil))))
(setq org-src-tab-acts-natively t
org-hide-block-startup t)
(setq org-confirm-babel-evaluate nil
org-babel-noweb-wrap-start "«"
org-babel-noweb-wrap-end "»")
(setq org-babel-clojure-backend 'cider
org-babel-clojure-sync-nrepl-timeout 0)
(setq org-plantuml-jar-path (expand-file-name "~/.emacs.d/jars/plantuml.jar")
org-ditaa-jar-path (expand-file-name "~/.emacs.d/jars/ditaa.jar")
org-ditaa-eps-jar-path (expand-file-name "~/.emacs.d/jars/DitaaEps.jar"))
(setq org-export-backends '(ascii beamer html
latex texinfo
md odt org)
org-export-coding-system 'utf-8)
(setq org-latex-classes
'(("beamer"
"\\documentclass[presentation]{beamer}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
("article"
"\\documentclass[12pt]{hitec}
[DEFAULT-PACKAGES]
[PACKAGES]
[NO-EXTRA]
\\settextfraction{0.95}\n"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
("report"
"\\documentclass[11pt]{report}"
("\\part{%s}" . "\\part*{%s}")
("\\chapter{%s}" . "\\chapter*{%s}")
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
("book"
"\\documentclass[11pt]{book}"
("\\part{%s}" . "\\part*{%s}")
("\\chapter{%s}" . "\\chapter*{%s}")
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
("une-article"
"\\documentclass[a4paper,12pt]{scrartcl}
[DEFAULT-PACKAGES]
[PACKAGES]
\\usepackage[margin=1.5cm]{geometry}
[EXTRA]\n"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
("une-logo"
"\\documentclass[a4paper,12pt]{scrartcl}
[DEFAULT-PACKAGES]
[PACKAGES]
\\usepackage[margin=1.5cm]{geometry}
[EXTRA]
\\definecolor{unegreen}{HTML}{7AB800}
\\definecolor{Black}{HTML}{000000}
\\definecolor{White}{HTML}{FFFFFF}
\\definecolor{dimgrey}{HTML}{696969}
\\makeatletter
\\def\\@maketitle{
\\noindent \\begin{minipage}[c][4cm][t]{\\linewidth}
\\colorbox{Black}{%
\\begin{minipage}[t][4cm][c]{4cm}
\\flushleft
\\includegraphics{~/.emacs.d/img/unelogo_medium.png}
\\end{minipage}}
\\colorbox{unegreen}{%
\\begin{minipage}[t][4cm][c]{13.5cm}
\\flushright
\\Large \\textbf{\\color{White}{\\@title}} \\\\
\\vspace{4pt}
\\small \\color{White}{\\@author} \\\\
\\small \\color{White}{\\@date}
\\end{minipage}}
\\end{minipage}}
\\makeatother\n"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
("old-article" "\\documentclass[11pt]{article}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
)
(setq org-latex-hyperref-template
"\\hypersetup{pdfauthor={%a},
pdftitle={%t},
pdfkeywords={%k},
pdfsubject={%d},
pdfcreator={%c},
pdflang={%L},
colorlinks=true,
linkcolor=blue}")
(setq org-latex-listings t
org-latex-listings-options '(("basicstyle" "\\tiny")
("frame" "single")
("stringstyle" "\\color{orange}")
("commentstyle" "\\color{cyan}")
("keywordstyle" "\\color{blue}")
("showstringspaces" "false")
("breakatwhitespace" "false")
("breaklines" "true")))
(setq org-latex-pdf-process
'("lualatex -interaction nonstopmode -output-directory %o %f"
"lualatex -interaction nonstopmode -output-directory %o %f"
"lualatex -interaction nonstopmode -output-directory %o %f"))
(setq org-latex-packages-alist
'(("" "parskip")
("" "xcolor")
("" "listings")))
(setq org-html-checkbox-type 'unicode
org-html-html5-fancy t
org-html-doctype "html5")
(setq org-ascii-charset 'utf-8
org-ascii-text-width 79)
:config
(org-element-update-syntax)
(org-clock-persistence-insinuate)
(add-to-list 'org-structure-template-alist
'("p" "#+BEGIN_SRC python\n?\n#+END_SRC"
"<src lang=\"python\">\n?\n</src>"))
(add-to-list 'org-structure-template-alist
'("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC"
"<src lang=\"emacs-lisp\">\n?\n</src>"))
(add-to-list 'org-structure-template-alist
'("cl" "#+BEGIN_SRC clojure-mode\n?\n#+END_SRC"
"<src lang=\"clojure-mode\">\n?\n</src>"))
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(clojure . t)
(css . t)
(dot . t)
(java . t)
(js . t)
(latex . t)
(ledger . t)
(makefile . t)
(org . t)
(perl . t)
(python . t)
(ruby . t)
(scheme . t)
(shell . t)
(sql . t)
(C . t)
(ditaa . t)
(plantuml . t)))
(when *is-a-mac*
(use-package org-mac-link
:ensure t
:bind (:map org-mode-map
("C-c g" . org-mac-grab-link))))
(bind-key "C-c l" 'org-store-link)
(bind-key "C-c a" 'org-agenda)
(bind-key "C-c b" 'org-switchb)
(bind-key "C-c r" 'org-capture))
Si vous faites 'Mx package-initialize' les paquets deviennent-ils disponibles? Si c'est le cas, alors vous pourriez essayer de mettre 'package-enable-at-startup' à' nil' et ajouter '(package-initialize)' dans votre fichier init ('~/.emacs.d/init.el' ou' ~/.emacs' très probablement). – Nick
Cette instruction 'eval-after-load' est quelque chose que vous devrez ajouter manuellement dans votre fichier init. En plus de mettre à jour les sections 'customize' pour les variables et les visages, Emacs ne changera généralement pas votre fichier init - c'est un fichier que vous gérez vous-même. – phils