emacs-humanities/config.org

27 KiB
Raw Blame History

Emacs Humanities

Sobre esta configuração

O Emacs Humanities é uma configuração para o GNU Emacs preparada para a produção de documentos acadêmicos das Ciências Humanas, usando o Emacs por ser um dos editores de LaTeX mais poderosos e por seu org-mode.

A documentação inclusa aqui ainda está em elaboração.

TODO Coisas a fazer

TODO Adicionar melhor suporte para escrita de LaTeX pelo AucTeX

Atualmente o Emacs Humanities não possui configuração específica para a produção de documentos LaTeX diretamente. Por enquanto recomendo que façam tais documentos pelo org-mode com inserção de blocos LaTeX. É perfeitamente possível escrever LaTeX na configuração atual; só não há nenhum aprimoramento em relação à experiência padrão. De qualquer maneira, o Emacs é completamente extensível e programável, e esta configuração é software livre: você tem a liberdade e a possibilidade de modificá-la como quiser e adicionar o que quiser.

TODO Adicionar suporte para pacotes de Estatística, mais especificamente o ESS

  • O ESS pode ser usado para programação em R, Julia e outras linguagens
  • Código em R pode ser incluído em documentos org e exportado para PDFs pela compilação de LaTeX

Licensa

;;; ------------------------------------------------------------------
;; LICENSE
;; Copyright © 2020 Aabm <aabm@disroot.org>
;; Author: Aabm <aabm@disroot.org>
;; URL: <https://git.snopyta.org/aabm/emacs-humanities/>

;; This file is not part of GNU Emacs.
;;
;; This program is free software: you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation, either version 3 of the
;; License, or (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;; General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program, see the file LICENSE. If not, see
;; <http://www.gnu.org/licenses/>
;;; ------------------------------------------------------------------

Uma tradução não oficial para português brasileiro da licensa acima pode ser encontrada em: http://licencas.softwarelivre.org/gpl-3.0.pt-br.html

Credenciais do usuário

Esta seção carrega um arquivo de credenciais pessoais, que podem ser utilizadas em diversas situações.

  ;;; Carrega o arquivo de credenciais se possível
  (when (file-readable-p (concat user-emacs-directory "creds.el"))
    (load-file (concat user-emacs-directory "creds.el")))

Se você quiser utilizar suas credenciais, basta criar um arquivo chamado "creds.el" no mesmo diretório desta configuração com conteúdo similar ao exemplo, menos os comentários:

  ;;; Exemplo de configuração de credenciais pessoais:
  ;; (setq user-full-name "Seu Nome Aqui"
  ;;       user-mail-address "seu@email.aqui"
  ;;       calendar-location-name "Cidade, Estado")

Estas credenciais podem ser utilizadas automaticamente por algumas funções, como a inserção automática de nome de autor em arquivos org exportados para PDF pelo LaTeX.

Configurações gerais

Habilitando teclas de atalho "avançadas"

Por padrão, o Emacs considera algumas funções como "avançadas", e portanto não recomendadas para usuários inexperientes. Quando acessadas, um prompt aparece perguntando se o usuário deseja seguir em frente. Essas funções são raramente usadas pela maior parte dos usuários, mas reabilitamos elas para evitarmos o aviso.

  (put 'dired-find-alternate-file 'disabled nil)
  (put 'upcase-region 'disabled nil)
  (put 'downcase-region 'disabled nil)
  (put 'narrow-to-region 'disabled nil)
  (setq disabled-command-function nil)

Formatação de texto

Aqui garantimos que toda a codificação de texto seja feita sob o padrão UTF-8, que é universal. Também configuramos indentação de código, para programação ocasional.

  ;;; Usar UTF-8 por padrão
  (prefer-coding-system 'utf-8)
  (set-terminal-coding-system 'utf-8) 
  (set-keyboard-coding-system 'utf-8) 
  (set-selection-coding-system 'utf-8) 
  (set-language-environment 'utf-8)
  (set-default-coding-systems 'utf-8)
  (setq locale-coding-system 'utf-8) 
  (setq org-export-coding-system 'utf-8) 

  ;;; Configurações de indentação
  (setq-default tab-width 4) 

  ;;; Carregar pacote para caracteres não ingleses
  (require 'iso-transl)

Exibição de texto

As configurações encontradas aqui são um pouco mais variadas, mas em geral se tratam da maneira que texto e informações textuais são exibidas ao usuário; Coisas como números de linha, realce de sintaxe, etc.

  ;;; Exibir números de linha em modos de programação
  (add-hook 'prog-mode-hook 'display-line-numbers-mode)

  ;;; Realçar linha do cursorn
  (add-hook 'prog-mode-hook 'hl-line-mode)
  (add-hook 'text-mode-hook 'hl-line-mode)
  (add-hook 'org-mode-hook 'hl-line-mode)

  ;;; Desabilitar a continuação de linhas extensas
  (setq truncate-lines nil)
  (setq org-startup-truncated nil)

  ;;; Realçar parênteses
  (show-paren-mode 1)

  ;;; Melhor navegação de linhas dobradas
  (global-visual-line-mode t)

  ;;; Embelezar símbolos. 
  (global-prettify-symbols-mode t)

Opções da interface gráfica

Estas são configurações básicas relacionadas à interface gráfica.

  ;; Desabilitar tela e mensagem de início padrão
  (setq inhibit-startup-message t)
  (setq inhibit-startup-echo-area-message t)

  ;; Desabilitar mensagem do scratch buffer 
  (setq initial-scratch-message nil)

  ;; org-mode como modo padrão do scratch buffer
  (setq initial-major-mode 'org-mode)

  ;; Melhores nomes para buffers de arquivos com mesmos nomes
  (require 'uniquify)
  (setq uniquify-buffer-name-style 'forward)

  ;; Exibir números de linha e coluna na modeline
  (line-number-mode t)
  (column-number-mode t)

Changing defaults

Aqui alteramos ou desabilitamos alguns comportamentos indesejáveis que são padrão no Emacs. Mais notáveis são o chamado "scroll não-conservador", em que todo o buffer rola quando o cursor muda para uma linha fora da tela, e o não uso da área de transferência do sistema.

  ;;; Habilitar o scroll conservador. Difícil viver sem essa opção.
  (setq scroll-conservatively 100)

  ;;; Desabilitar o sinal auditivo de aviso
  (setq ring-bell-function 'ignore)

  ;;; Usar área de transferência do Xorg
  (setq x-select-enable-clipboard t)

  ;;; Nada de backups ou autosaves.
  (setq make-backup-files nil) 
  (setq auto-save-default nil) 

  ;;; Substituir todos os prompts de "yes or no" por "y or n".
  (defalias 'yes-or-no-p 'y-or-n-p)

  ;;; Recarregar buffers automaticamente quando eles forem alterados no disco.
  (global-auto-revert-mode t)

Configuring other basic features

Electric pairs

Os electric pairs servem para completar caracteres de abertura como parênteses com seus respectivos caracteres de fechamento. Útil para uso com parênteses e aspas.

  (setq electric-pair-pairs '(
                             (?\{ . ?\})
                             (?\( . ?\))
                             (?\[ . ?\])
                             (?\" . ?\")
                             ))

  (electric-pair-mode t)

Pacotes básicos

Async

Uma biblioteca para processamento assíncrono. Utilizamos ela para facilitar algumas operações, como cópia e movimento de arquivos.

  (use-package async
			   :ensure t
			   :init
			   (dired-async-mode t)
			   (async-bytecomp-package-mode t))

Which-key

O which-key é um pacote muito utilizado em configurações prontas do Emacs. Serve para exibir um "menu guia" das teclas de atalho ao usuário. É ele que aparece quando se aperta alguma tecla de atalho incompleta, como C-x. Permite ao usuário descobrir tanto sobre atalhos de teclas padrão quanto customizados, de maneira intuitiva.

  (use-package which-key
	:ensure t
	:init
	(which-key-mode))

General

O General.el é um pacote feito para simplificar as declarações de teclas de atalho customizadas.

  (use-package general
    :ensure t)

Swiper/Ivy/Counsel

O Ivy é um pacote leve porém poderoso para autocompleção de prompts e pesquisa fuzzy matching. Aqui é utilizado para substituir ações como find-file ou switch-buffer. Também o combinamos com o Counsel, que aprimora as funções do Ivy e adiciona novas, ainda mais úteis. O ivy-rich é uma extensão que adiciona mais informação aos menus do Ivy.

O Swiper é uma ferramenta de busca, utilizada para buscar por texto ou expressões regulares dentro de um buffer.

Todas essas ferramentas tem suas teclas de atalho definidas em outra seção desta configuração.

  (use-package ivy
    :ensure t 
    :init
    (ivy-mode)
    :custom
    (enable-recursive-minibuffers t))

  (use-package counsel
    :ensure t
    :init
    (counsel-mode))

  (use-package ivy-rich
    :ensure t
    :init
    (ivy-rich-mode))

  (use-package swiper
    :ensure t)

Magit

O Magit é uma das mais populares extensões do Emacs. É uma interface completa para o git, um dos principais sistemas de controle de versão existentes. O Magit torna o uso do git muito mais simples, e elimina a necessidade de se aprender os comandos mais esotéricos e obscuros que acabam sendo necessários para se usar o git devidamente. O git não é só um programa para programadores; é na verdade uma excelente ferramenta para produção de quaisquer projetos colaborativos com colegas. Pode ser acessado pressionando C-x g.

  (use-package magit
    :ensure t)

Edição de texto

Expand-region

O expand-region é um pacote para seleção de texto por meio de expansão de unidades semânticas. Pode ser acessado pressionando C-=.

  (use-package expand-region
    :ensure t)

Undo Tree

O undo-tree é uma extensão que permite visualizar todo as suas alterações de undo e redo (desfazer e refazer) a um buffer como uma árvore com galhos divergentes. Assim, é possível visualizar todas as iterações de um texto, e fazer decisões sobre quais versões manter ao final. Pode ser acessado pressionando C-x u.

  (use-package undo-tree
    :ensure t
    :init
    (undo-tree-mode))

Escrita, anotações e leitura

Básicos de org-mode

Configurações gerais

  ;; Diretório padrão org.
  (setq org-directory "~/docs/org/")

  ;; Impedir tarefa de ser marcada como feita se ainda tiver
  ;; dependências incompletas.
  (setq org-enforce-todo-dependencies t)
  (setq org-enforce-todo-checkbox-dependencies t)

  ;; Opções cosméticas
  (setq org-ellipsis "⬎") 
  (setq org-hide-leading-stars t)
  (add-hook 'org-mode-hook 'org-indent-mode)

  ;; Inserir estampa de data ao fechar TODOs
  (setq org-log-done 'time)
  ;; (setq org-log-done 'note)

  ;; Habilitar indentação nativa em blocos de código fonte
  (setq org-src-tab-acts-natively t)
  ;; Habilitar realce de sintaxe em blocos de código fonte
  (setq org-src-fontify-natively t)
  ;; Usar janela atual para editar blocos de código fonte
  (setq org-src-window-setup 'current-window)

Capture

  ;; Diretório padrão para anotações do org-capture
  (setq org-default-notes-file (concat org-directory "agenda.org"))

Agenda

  ;; Arquivos para serem lido pela agenda
  (setq org-archive-location (concat org-directory "agenda.org"))

Modelos estruturais

  (setq org-structure-template-alist
        '(("c" . "center\n")
          ("d" . "src text :tangle ~/.\n")
          ("e" . "src emacs-lisp\n")
          ("h" . "export html\n")
          ("l" . "export latex\n")
          ("q" . "quote\n")
          ("s" . "src")
          ("v" . "verse\n")))

Teclas de atalho

    (general-define-key
       :keymaps 'org-mode-map
       "C-M-n" 'org-metadown
       "C-M-p" 'org-metaup
       "M-n" 'org-forward-element
       "M-p" 'org-backward-element)

Mapas mentais com org-roam

O org-roam é um sistema para interligação de anotações, seguindo o método Zettelkasten. Sua principal função é possbilitar a criação de um verdadeiro mapa mental do usuário. O mapa pode então ser visualizado usando o org-roam-server, facilitando sua navegação.

  (use-package org-roam
    :ensure t
    :config
    (org-roam-mode)
    (require 'org-roam-protocol)
    :custom
    (org-roam-directory "~/docs/roam/")
    (org-roam-index-file "~/docs/roam/index.org")
    (org-roam-completion-system 'ivy)
    (org-roam-graph-executable "/usr/bin/neato")
    (org-roam-graph-extra-config '(("overlap" . "false"))))

  (use-package org-roam-server
    :ensure t
    :custom
    (org-roam-server-host "127.0.0.1")
    (org-roam-server-port 8080)
    (org-roam-server-export-inline-images t)
    (org-roam-server-authenticate nil)
    (org-roam-server-network-poll t)
    (org-roam-server-network-arrows nil)
    (org-roam-server-network-label-truncate t)
    (org-roam-server-network-label-truncate-length 60)
    (org-roam-server-network-label-wrap-length 20))

  (use-package org-roam-bibtex
    :ensure t)

  ;; Deft is useful for searching through notes
  (use-package deft
    :ensure t
    :bind
    :custom
    (deft-recursive t)
    (deft-use-filter-string-for-filename t)
    (deft-default-extension "org")
    (deft-directory "~/docs/roam/"))

  ;; Templates for creating new notes
    (setq org-roam-capture-templates
            '(("t" "tagged" plain (function org-roam--capture-get-point)
             "#+date:%T\n#+startup: overview\n#+roam_tags: %?\n#+roam_alias:"
             :file-name "%<%Y%m%d%H%M%S>-${slug}"
             :head "#+title: ${title}\n"
             :unnarrowed t)))

Visualização de texto com olivetti-mode

O olivetti-mode serve para centralizar texto na tela para melhor concentração durante a escrita ou leitura.

  (use-package olivetti
    :ensure t)

Leitura de PDFs com pdf-tools

O pdf-tools é um leitor de PDFs dentro do Emacs, utilizando o epdfinfo e a biblioteca poppler como backend. Aqui definimos teclas de atalho e algumas funções de utilidade.

  (use-package pdf-tools
    :ensure t
    :defer nil
    :config
    (pdf-loader-install)
    :custom
    (pdf-view-resize-factor 1.1)
    (pdf-view-continuous nil)
    (pdf-view-display-size 'fit-page)
    :bind (:map pdf-view-mode-map
                ("C-s" . isearch-forward)
                ("C-r" . isearch-backward)
                ("C-c d" . pdf-view-midnight-minor-mode)
                ("C-c z" . ehum/pdf-view-open-in-zathura)
                ("C-c p" . ehum/pdf-view-show-current-page)
                ("C-c t" . ehum/pdf-view-continuous-toggle )
                ("C-a" . image-scroll-right)
                ("C-e" . image-scroll-left)))


  (defun ehum/pdf-view-continuous-toggle ()
    (interactive)
    (cond ((not pdf-view-continuous)
           (setq pdf-view-continuous t)
           (message "Page scrolling: Continous"))
          (t
           (setq pdf-view-continuous nil)
           (message "Page scrolling: Constrained"))))

  (defun ehum/pdf-view-open-in-zathura ()
    "Open the current PDF with zathura."
    (interactive)
    (save-window-excursion
      (let ((current-file (buffer-file-name))
            (current-page (number-to-string (pdf-view-current-page))))
        (async-shell-command
         (format "zathura -P %s \"%s\"" current-page current-file))))
    (message "Sent to Zathura"))

  (defun ehum/pdf-view-show-current-page ()
    "Show the current page."
    (interactive)
    (message "Page: %s" (pdf-view-current-page)))

Leitura de epubs com nov.el

O nov.el é um leitor de livros digitais em formato epub. Aqui garantimos que ele seja sempre usado junto com o Olivetti-mode para uma melhor experiência.

  (use-package nov
    :ensure t
    :init
    (add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
    :custom
    (olivetti-body-width 104)
    :hook
    (nov-mode . olivetti-mode))

Gerenciamento de referências bibliográficas com BibTeX

O ivy-bibtex é uma ferramenta para inserção de referências bibliográficas no formato BibTeX, usando o Ivy.

  ;; Ivy-bibtex is a 
  (use-package ivy-bibtex
    :ensure t
    :bind*
    ("C-x C-r" . ivy-bibtex)
    :custom
    (bibtex-completion-bibliography "~/docs/tex/refs.bib")
    ;; default is to open pdf - change that to insert citation
    (ivy-bibtex-default-action #'ivy-bibtex-insert-citation))
  (defalias 'helm-bibtex 'ivy-bibtex)

Edição de LaTeX com AUCTeX

  (use-package auctex
    :ensure t
    :custom
    ;; Sempre compilar TeX para PDFs
    (TeX-PDF-mode t)
    ;; Utilizar o pdf-tools para visualizar PDFs
    (TeX-view-program-selection '((output-pdf "PDF Tools")))
    (TeX-source-correlate-start-server t)
    :hook
    ;; Automaticamente atualizar o PDF visualizado após compilação
    (TeX-after-compilation-finished-functions . TeX-revert-document-buffer))

Verificação ortográfica com Flyspell

  (use-package flyspell
    :ensure t
    :custom
    (ispell-program-name "aspell")
    :hook
    (text-mode . flyspell-mode)
    (org-mode . flyspell-mode)
    (prog-mode . flyspell-prog-mode))

Funções customizadas

Atualizar o Emacs Humanities

  (defun ehum/atualizar-configuração ()
        "Atualiza o Emacs Humanities para sua versão mais recente. Requer git instalado no sistema."
        (interactive)
        (let ((dir (expand-file-name user-emacs-directory)))
          (if (file-exists-p dir)
              (progn
                (message "Atualizando configuração")
                (cd dir)
                (shell-command "git pull")
                (message "Atualização finalizada com sucesso. Reinicie o Emacs para que quaisquer mudanças tomem efeito."))
            (message "\"%s\" arquivo não encontrado." dir))))

Gerar scratch buffers

  (defun ehum/generate-org-buffer ()
    "Cria um sratch buffer em org-mode. Útil para fazer anotações descartáveis rapidamente."
    (interactive)
    (switch-to-buffer (make-temp-name "org-"))
    (org-mode))

Eliminar buffer e janela

  (defun ehum/kill-buffer-and-window ()
	"Elimina o buffer e a janela atuais"
	(interactive)
	(progn
	  (kill-buffer)
	  (delete-window)))

Melhor divisão de janelas

  (defun ehum/split-follow-window-below ()
	"Cria uma janela abaixo e muda o foco para ela. Substitui a função padrão split-window-below"
	(interactive)
	(split-window-below)
	(balance-windows)
	(other-window 1))

  (defun ehum/split-follow-window-right ()
	"Cria uma janela à direita e muda o foco para ela. Substitui a função padrão split-window-right"
	(interactive)
	(split-window-right)
	(balance-windows)
	(other-window 1))

Encontrar arquivo de agenda

  (defun ehum/find-org-agenda-file ()
    "Abre o arquivo de agenda"
    (interactive)
    (find-file (car (org-agenda-files))))

Teclas de atalho globais

Definindo teclas de prefixo

  ;; Configura as teclas começando com C-z.
  (global-unset-key "\C-z")
  (defalias 'C-z-keymap (make-sparse-keymap))
  (defvar C-z-map (symbol-function 'C-z-keymap)
    "Global keymap for characters following C-z.")
  (define-key global-map "\C-z" 'C-z-keymap)

Definindo teclas de atalho

  (general-define-key
     ;; Teclas C-z
     ;; Gerenciando buffers
     "C-z b o" 'ehum/generate-org-buffer

     ;; Teclas com prefixos comuns
     ;; Gerenciamento de janelas
     "C-x 2" 'ehum/split-follow-window-below
     "C-x 3" 'ehum/split-follow-window-right

     ;; Gerenciando buffers
     "C-x k" 'kill-this-buffer
     "C-x C-k" 'ehum/kill-buffer-and-window
     "C-x C-b" 'ibuffer

     ;; Ivy/Counsel/Swiper
     "C-s" 'swiper
     "C-r" 'swiper-backward
     "C-x C-f" 'counsel-find-file
     "C-x b" 'counsel-switch-buffer
     "C-x r b" 'counsel-bookmark
     "M-x" 'counsel-M-x
     "C-h f" 'counsel-describe-function
     "C-h v" 'counsel-describe-variable
     "C-h o" 'counsel-describe-symbol

     ;; Org-mode
     "C-x a" 'org-agenda
     "C-x C-a" 'ehum/find-org-agenda-file	
     "C-x c" 'org-capture
     "C-c l" 'org-store-link

     ;; Org-roam
     "C-z C-f" 'org-roam-find-file
     "C-z C-l" 'org-roam-insert
     "C-z C-x" 'org-roam-graph
     "C-z C-c" 'org-roam-server-mode
     "C-z C-s" 'deft

     ;; Outras utilidades
     "C-x g" 'magit
     "C-x u" 'undo-tree
     "M-/" 'hippie-expand
     "C-=" 'er/expand-region
  )

Tema e aparência

Beacon

O beacon é um pacote bem simples. Ele simplesmente faz seu cursor piscar levemente quando você muda pra outra janela ou buffer ou faz um movimento grande, tornando mais fácil localizar o cursor depois de se mover.

  (use-package beacon
	:ensure t
	:init
	(beacon-mode))

Dashboard

O dashboard é o pacote utilizado pelo Emacs Humanities para criar a tela de início customizada que você vê quando abre o Emacs. Aqui estão todas as configurações dele, sinta-se livre para alterá-las como quiser. Uma modificação simples seria mudar a logo exibida no Dashboard alterando o valor da variável dashboard-startup-banner.

  (use-package all-the-icons
    :ensure t
    :defer nil)

  (use-package dashboard
    :ensure t
    :defer nil
    :config
    (dashboard-setup-startup-hook)
    :custom
    (dashboard-set-heading-icons t)
    (dashboard-set-file-icons t)
    (dashboard-items
     '((recents . 5)
       (agenda . 10)))
    (dashboard-banner-logo-title "Bem-vindo ao Emacs Humanities!")
    (dashboard-startup-banner 'logo)
    (dashboard-center-content t)
    (dashboard-show-shortcuts t)
    (dashboard-set-init-info t)
    (dashboard-set-footer nil)
    (dashboard-set-navigator t)
    (dashboard-navigator-buttons
          `(;; line1
            ((,nil
              "Sobre"
              "Abrir a documentação local do Emacs Humanities"
              (lambda (&rest _) (find-file "~/.emacs.d/README.org"))
              'default)
             (nil
              "Gitea"
              "Abra a página do gitea desta configuração"
              (lambda (&rest _) (browse-url "https://git.snopyta.org/aabm/emacs-humanities"))
              'default)
             (nil
              "Tutorial"
              "Abrir o tutorial do Emacs no idioma desejado"
              (lambda (&rest _) (help-with-tutorial-spec-language))
              'default)		   
             )
              ;; segunda linha
              ((,nil
                "Configuração"
                "Abrir o arquivo de configuração"
                (lambda (&rest _) (find-file "~/.emacs.d/config.org"))
                'default)
             (nil
              "Referência"
              "Abrir a referência rápida do Emacs Humanities"
              (lambda (&rest _) (find-file "~/.emacs.d/referencia.org"))
              'default)			 
               ))))

  (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))

Doom modeline

A Doom Modeline é a barra de status customizada na parte inferior da sua tela. Aqui estão todas as configurações que usamos para ela.

  (use-package doom-modeline
    :ensure t
    :init
    (doom-modeline-mode)
    :custom
    (doom-modeline-height 25)
    (doom-modeline-bar-width 5)
    (doom-modeline-project-detection 'project)
    (doom-modeline-icon (display-graphic-p))
    (doom-modeline-major-mode-icon t)
    (doom-modeline-major-mode-color-icon t)
    (doom-modeline-buffer-state-icon t)
    (doom-modeline-buffer-modification-icon nil)
    (doom-modeline-minor-modes nil)
    (doom-modeline-enable-word-count t)
    (doom-modeline-buffer-encoding nil)
    (doom-modeline-persp-name nil))

Org Superstar

  (use-package org-superstar
    :ensure t
    :hook
    (org-mode . org-superstar-mode))

Elegance

Seção ainda em fase de testes e modificações.

  ;; (when (file-readable-p (concat user-emacs-directory "elegance.el"))
  ;;   (load-file (concat user-emacs-directory "elegance.el")))

  ;; (when (file-readable-p (concat user-emacs-directory "Welcome.org"))
  ;;   (find-file-read-only (concat user-emacs-directory "Welcome.org")))

Tema

Aqui instalamos os temas de cores Modus Operandi e Modus Vivendi. Estes temas são feitos com acessibilidade visual em mente, e seguindo especificações oficiais contraste e mais. O Modus Operandi é o tema padrão do Emacs Humanities, por ter aparência simples e profissional. Mais informações na página dos temas Modus.

Também instalamos o pacote de temas do Doom Emacs, que inclui temas mais coloridos, assim como reimplementações de esquemas de cores populares como Solarized, Gruvbox e Dracula.

Para mudar o tema utilizado pelo Emacs, altere a declaração de load-theme abaixo para utilizar o nome do seu tema preferido, depois reinicie o Emacs. Você pode ver e testar os temas disponíveis utilizando M-x load-theme

  (use-package modus-operandi-theme
    :ensure t)
  (use-package modus-vivendi-theme
    :ensure t)

  (use-package doom-themes
    :ensure t
    :custom
    (doom-themes-enable-bold t)
    (doom-themes-enable-italic t)
    :config
    (doom-themes-org-config))

  (load-theme 'modus-operandi t)

Opções do frame

Aqui definimos opções do frame (janela) do Emacs, como título, tamanho inicial e fonte padrão. Encorajamos você a mudar a fonte de acordo com sua preferência pessoal. O ideal é usar uma fonte monospace, ou de espaçamento único, como a Source Code Pro aqui usada. Algumas recomendações de fontes monospace: Iosevka, Inconsolata, Roboto Mono e Terminus.

  ;; Título do frame
  (setq frame-title-format "%b")

  ;; Tamanho padrão do frame
  (add-to-list 'default-frame-alist '(width  . 90))
  (add-to-list 'default-frame-alist '(height . 35))

  ;; Fontes.
  (set-frame-font "Source Code Pro 13" nil t)
  (add-to-list 'default-frame-alist '(font . "Source Code Pro 13"))