<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Euber Alexandre Barbosa</title>
    <description>The latest articles on DEV Community by Euber Alexandre Barbosa (@easbarbosa).</description>
    <link>https://dev.to/easbarbosa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F772350%2Fd0d4c87b-d079-4c93-8746-cfcdc4db1925.jpeg</url>
      <title>DEV Community: Euber Alexandre Barbosa</title>
      <link>https://dev.to/easbarbosa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/easbarbosa"/>
    <language>en</language>
    <item>
      <title>Wes, apenas outro gerenciador de dotfiles</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Sun, 16 Aug 2026 15:58:06 +0000</pubDate>
      <link>https://dev.to/easbarbosa/wes-apenas-outro-gerenciador-de-dotfiles-4hn</link>
      <guid>https://dev.to/easbarbosa/wes-apenas-outro-gerenciador-de-dotfiles-4hn</guid>
      <description>&lt;h3&gt;
  
  
  Um pouco de cultura
&lt;/h3&gt;

&lt;p&gt;Dotfiles, como implicado por seu nome, são arquivos com um pontinho anterior ao nome, que configuram o estado inicial dos programas e usualmente vivem - escondidos, nos diretórios do $HOME.&lt;/p&gt;

&lt;p&gt;Users craft their dotfiles through the years with a such a care that them can easily be the most sensible and essential files in their system, version-controlling is a must, of course.&lt;/p&gt;

&lt;p&gt;Tem até mesmo uma cultura de orgulhosamente compartilhar publicamente suas dotfiles, que por acaso é uma ótima forma de iniciar as suas e copiar boas ideias.&lt;/p&gt;

&lt;p&gt;Em comum, quem curte Linux adora ferramentas de uso simples e fácil de inferir como find, grep ou ls, então seria natural eu seguir esse bom exemplo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vamos ao que interessa
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Wes&lt;/strong&gt; creates links of all files in the target directory, perfectly mirroring them in the destination directory, &lt;code&gt;$HOME&lt;/code&gt; by default:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wes --root /data/dotfile_folder --create&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Of course you can just try it out first:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wes --root /data/dotfile_folder --pretend&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To remove all linked files, it goes as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wes -r /data/dotfile_folder --remove&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It goes as easy to set a different destination:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wes -r /data/bin --to ~/.local/bin --create&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ignorando o que não importa
&lt;/h3&gt;

&lt;p&gt;We don’t want that just every file to be linked, eg: LICENSE. For those files, you can pin out their location by feeding the &lt;em&gt;.wesignore&lt;/em&gt;, that follows docker’s &lt;em&gt;.dockerignore&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  E os arquivos originais, como ficam?
&lt;/h3&gt;

&lt;p&gt;Conflicting files found at the destination directory are moved up to &lt;code&gt;$HOME/.backup&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And that is it.&lt;/p&gt;

&lt;p&gt;For more information, check the README.md in the main repository, or the &lt;code&gt;--help&lt;/code&gt; option.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bacana mas qual versão uso?
&lt;/h3&gt;

&lt;p&gt;Em caso de você estar imaginando qual é essa de várias &lt;code&gt;main.*&lt;/code&gt;, quando vou brincar com uma nova linguagem, Wes é uma ótima mesa de laboratório com bons desafios para aprender essas.&lt;/p&gt;

&lt;p&gt;Mas eu reconheço que apenas as versões em Python, Guile, e Go estão parcialmente funcionais.&lt;/p&gt;

&lt;p&gt;Com isso tudo dito, escolha seu veneno! :)&lt;/p&gt;

&lt;h3&gt;
  
  
  E esse nome?
&lt;/h3&gt;

&lt;p&gt;Nomeado ao grandioso Wes Montgomery.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>dotfiles</category>
      <category>linux</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Sun, 16 Aug 2026 15:20:18 +0000</pubDate>
      <link>https://dev.to/easbarbosa/-1336</link>
      <guid>https://dev.to/easbarbosa/-1336</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/apsis-cc/docker-compose-orquestrando-multiplos-containers-27hd" class="crayons-story__hidden-navigation-link"&gt;Docker Compose - orquestrando múltiplos containers&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/apsis-cc"&gt;
            &lt;img alt="apsis-cc logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14122%2F536c6bfe-3d3a-4372-9fb1-7d8c6d80ccfd.webp" class="crayons-logo__image" width="180" height="180"&gt;
          &lt;/a&gt;

          &lt;a href="/raffaeldutra" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4044671%2F7b08d7a0-6321-48ee-9a3b-4782fc00eacd.jpg" alt="raffaeldutra profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/raffaeldutra" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Rafael Dutra
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Rafael Dutra
                
                
              
              &lt;div id="story-author-preview-content-4222383" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/raffaeldutra" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4044671%2F7b08d7a0-6321-48ee-9a3b-4782fc00eacd.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Rafael Dutra&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/apsis-cc" class="crayons-story__secondary fw-medium"&gt;apsis-cc&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/apsis-cc/docker-compose-orquestrando-multiplos-containers-27hd" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 16&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/apsis-cc/docker-compose-orquestrando-multiplos-containers-27hd" id="article-link-4222383"&gt;
          Docker Compose - orquestrando múltiplos containers
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/docker"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;docker&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/containers"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;containers&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cicd"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cicd&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/apsis-cc/docker-compose-orquestrando-multiplos-containers-27hd" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/apsis-cc/docker-compose-orquestrando-multiplos-containers-27hd#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Debian netinst: Como conectar a Wi-Fi pela TTY</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Sun, 23 Feb 2025 01:14:59 +0000</pubDate>
      <link>https://dev.to/easbarbosa/debian-netinst-conectar-ao-wi-fi-pelo-tty-pp0</link>
      <guid>https://dev.to/easbarbosa/debian-netinst-conectar-ao-wi-fi-pelo-tty-pp0</guid>
      <description>&lt;p&gt;Então você baixou a ISO da Debian na página inicial, para depois descobrir que o sistema não está conectado? Calma não priemos canico!&lt;/p&gt;

&lt;p&gt;Uma vez terminada a instalação com ISO mínima da Debian e o sistema subir vai apenas aparecer uma tela preta, TTY, pedindo usuário e senha.&lt;/p&gt;

&lt;p&gt;Uma vez entrado com seu usuário, você vai perceber que não está conectado a Wi-Fi, inesperado, né?!&lt;/p&gt;

&lt;p&gt;Como você proveu o instalador da Debian com a senha do Wi-Fi, este salva uma configuração, simples, que vai estar presente no &lt;code&gt;/etc/network/interfaces&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Então você apenas precisa achar qual interface do Wi-Fi foi usada, usualmente &lt;code&gt;wlan0&lt;/code&gt; ou &lt;code&gt;wlp2s0&lt;/code&gt; e conectar com a &lt;code&gt;ifup&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ip link&lt;/code&gt; me disse que a minha interface Wi-Fi é, sim, &lt;code&gt;wlp2s0&lt;/code&gt; - a usual.&lt;/p&gt;

&lt;p&gt;Agora precisamos ativar essa interface sem fio em:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ip link set wlp2s0 up&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Até o Debian 13 o wpa_supplicant é usado para configurar os paranues todo e, talvez, conectar - é antigo mas funciona.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ifup wlan0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Prontinho, confirme com &lt;code&gt;ping&lt;/code&gt; se você ja esta conectado:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ping globo.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Se não, então sua configuração de instalação foi como a minha, bem simples, então precisamos ainda usar o dhcp para obter um ip:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dhclient wlp2s0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Prontinho, vai pingar até a ultima gota, e agora é só instalar as delicinhas disponiveis no repo principal do debian.&lt;/p&gt;

&lt;p&gt;Eu prefiro um combo de &lt;code&gt;iwd&lt;/code&gt; + &lt;code&gt;nmcli&lt;/code&gt;, do que &lt;code&gt;wpa_supplicant&lt;/code&gt;, apesar, mas tem outras alternativas ainda mais legais.&lt;/p&gt;

&lt;p&gt;Eu curto usar o SID por ter os pacotes mais novinhos, e recomendo para quem veio do Ubuntu e Fedora. &lt;/p&gt;

&lt;p&gt;Boa diversão.&lt;/p&gt;

&lt;p&gt;Mais: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.debian.org" rel="noopener noreferrer"&gt;Debian&lt;/a&gt; &lt;br&gt;
&lt;a href="https://wiki.debian.org/WiFi/HowToUse" rel="noopener noreferrer"&gt;Debian - Wifi&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/easbarba/easily-upgrading-to-the-debian-sid-distribution-gde"&gt;Debian SID&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pt.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol" rel="noopener noreferrer"&gt;dhcp&lt;/a&gt;&lt;br&gt;
&lt;a href="https://wiki.archlinux.org/title/Wpa_supplicant" rel="noopener noreferrer"&gt;WPA Supplicant&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pt.wikipedia.org/wiki/Endere%C3%A7o_IP" rel="noopener noreferrer"&gt;ip&lt;/a&gt;&lt;/p&gt;

</description>
      <category>debian</category>
      <category>wifi</category>
      <category>network</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Meson: Usando um projeto git sem meson.build como dependência</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Tue, 28 Jan 2025 23:39:00 +0000</pubDate>
      <link>https://dev.to/easbarbosa/meson-usando-um-projeto-git-sem-mesonbuild-como-dependencia-1o1m</link>
      <guid>https://dev.to/easbarbosa/meson-usando-um-projeto-git-sem-mesonbuild-como-dependencia-1o1m</guid>
      <description>&lt;p&gt;Eventualmente você vai achar um projeto bacana que não usa &lt;a href="https://mesonbuild.com" rel="noopener noreferrer"&gt;meson.build&lt;/a&gt; e o mantenedor demora anos para aceitar PR, se algum dia for.&lt;/p&gt;

&lt;p&gt;Ou mesmo seu projeto está em contrato para sempre adicionar a &lt;code&gt;LICENSE&lt;/code&gt; em todas as builds e o mantenedor se recusa.&lt;/p&gt;

&lt;p&gt;Para resolver esse pepino você pode adicionar aos seus &lt;code&gt;subprojects/*.wrap&lt;/code&gt; &lt;a href="https://git-scm.com" rel="noopener noreferrer"&gt;git&lt;/a&gt; patches.&lt;/p&gt;

&lt;p&gt;Por exemplo, no meu projeto - &lt;a href="https://gitlab.com/easbarba/onur-c" rel="noopener noreferrer"&gt;onur&lt;/a&gt; - por ser uma pequena ferramenta CLI prefiro usar o &lt;a href="https://github.com/benhoyt/ht" rel="noopener noreferrer"&gt;ht&lt;/a&gt; do grande Hoyt ao invés do enorme &lt;a href="https://docs.gtk.org/glib" rel="noopener noreferrer"&gt;GNOME glib&lt;/a&gt;, mas este projeto git não tem uma meson.build.&lt;/p&gt;

&lt;p&gt;Uma simples &lt;code&gt;wrap-git&lt;/code&gt; para esse projeto, que sequer tem tags também, seria usando o &lt;code&gt;master&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./subprojects/ht.wrap&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[wrap-git]&lt;/span&gt;
&lt;span class="py"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;ht&lt;/span&gt;
&lt;span class="py"&gt;url&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;https://github.com/benhoyt/ht&lt;/span&gt;
&lt;span class="py"&gt;revision&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;master&lt;/span&gt;
&lt;span class="py"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Primeiro vamos pegar todos subprojetos &lt;code&gt;meson subprojects download&lt;/code&gt;, e adicionar a &lt;code&gt;meson.build&lt;/code&gt; na raiz deste:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./subprojects/ht&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; | tee -a ./subprojects/ht/meson.build
project('ht', 'c', version: '1.0')

ht_sources = [
    'ht.c',
    'ht.h',
]

ht_lib = static_library('ht', ht_sources)

ht_dep = declare_dependency(
    include_directories: include_directories('.'),
    link_with: ht_lib)
&lt;/span&gt;&lt;span class="no"&gt;EOF

&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ./subprojects/ht/meson.build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e criar o patch com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-pv&lt;/span&gt; subprojects/&lt;span class="o"&gt;{&lt;/span&gt;packagecache,packagefiles&lt;span class="o"&gt;}&lt;/span&gt;
git &lt;span class="nt"&gt;-C&lt;/span&gt; ./subprojects/ht add meson.build
git &lt;span class="nt"&gt;-C&lt;/span&gt; ./subprojects/ht diff &lt;span class="nt"&gt;--cached&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ./subprojects/packagefiles/ht-meson.patch
&lt;span class="nb"&gt;cat&lt;/span&gt; ./subprojects/packagefiles/ht-meson.patch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;uma vez com o patch devemos apontar sua presença ao &lt;code&gt;ht.wrap&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"diff_files = ht-meson.patch"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ./subprojects/ht.wrap
&lt;span class="nb"&gt;cat&lt;/span&gt; ./subprojects/ht.wrap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, vamos aplicar o patch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;meson subprojects purge &lt;span class="nt"&gt;--confirm&lt;/span&gt;
meson subprojects download
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e compilar o projeto para confirmar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gcc meson setup ./build &lt;span class="nt"&gt;--wipe&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; &lt;span class="nv"&gt;b_sanitize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;none &lt;span class="nt"&gt;-D&lt;/span&gt; &lt;span class="nv"&gt;buildtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;release
meson compile &lt;span class="nt"&gt;-C&lt;/span&gt; ./build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O executável vai aparecer em &lt;code&gt;./build&lt;/code&gt; como esperado.&lt;/p&gt;

&lt;p&gt;Valeu!&lt;/p&gt;

&lt;p&gt;Recomendação para leitura:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mesonbuild.com/Subprojects.html" rel="noopener noreferrer"&gt;https://mesonbuild.com/Subprojects.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gcc.gnu.org" rel="noopener noreferrer"&gt;https://gcc.gnu.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/home.pt-br.html" rel="noopener noreferrer"&gt;https://www.gnu.org/home.pt-br.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Informações gerais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://gcc.gnu.org" rel="noopener noreferrer"&gt;GNU GCC&lt;/a&gt; 14.2.0&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mesonbuild.com" rel="noopener noreferrer"&gt;Meson&lt;/a&gt; 1.7.0&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ninja-build.org/" rel="noopener noreferrer"&gt;Ninja&lt;/a&gt; 1.12.1&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.gnu.org/software/emacs" rel="noopener noreferrer"&gt;GNU Emacs&lt;/a&gt; 30&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.debian.org" rel="noopener noreferrer"&gt;Debian SID&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://guix.gnu.org/en" rel="noopener noreferrer"&gt;GNU Guix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/swaywm/sway" rel="noopener noreferrer"&gt;SwayWM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Alexays/Waybar" rel="noopener noreferrer"&gt;Waybar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mozilla.org/pt-BR/firefox/new" rel="noopener noreferrer"&gt;Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://languagetool.org" rel="noopener noreferrer"&gt;https://languagetool.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/easbarba"&gt;https://dev.to/easbarba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/easbarba/onur-c" rel="noopener noreferrer"&gt;https://gitlab.com/easbarba/onur-c&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>meson</category>
      <category>git</category>
      <category>c</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>GNU Emacs: O bom e velho ido-mode</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Mon, 27 Jan 2025 03:34:15 +0000</pubDate>
      <link>https://dev.to/easbarbosa/gnu-emacs-o-bom-e-velho-ido-mode-587l</link>
      <guid>https://dev.to/easbarbosa/gnu-emacs-o-bom-e-velho-ido-mode-587l</guid>
      <description>&lt;p&gt;GNU Emacs é antigo, até mais que muitas cidades do Brasil e com isso tem uma bagagem cheia de pacotes velhos para leléu.&lt;/p&gt;

&lt;p&gt;Dentre as várias funções desse velhinho, existem os &lt;code&gt;completadores&lt;/code&gt; das várias partes desse editor, uma dessas é o &lt;code&gt;Interactive do things&lt;/code&gt; ou &lt;code&gt;ido-mode&lt;/code&gt;, que vai um pouco além do modesto &lt;code&gt;completing-read&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ido&lt;/code&gt; é um pacote incluído no editor, mas não ativado por padrão, então pode ser ativado sem precisar baixar nada.&lt;/p&gt;

&lt;p&gt;Nesse ponto, eventualmente você vai perceber que o Emacs tem vários pacotes alternativos em hibernação a alguns poucos códigos para sua ativação, como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="ss"&gt;'ido&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-mode&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, &lt;code&gt;ido&lt;/code&gt; esta ativado e com isso vai consumir qualquer lista de string, mas provendo uma interface mais limpa e moderna, testa isso no &lt;em&gt;scratch&lt;/em&gt; buffer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;trapalhoes&lt;/span&gt; &lt;span class="o"&gt;'&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mussum"&lt;/span&gt; &lt;span class="s"&gt;"zacarias"&lt;/span&gt; &lt;span class="s"&gt;"didi"&lt;/span&gt; &lt;span class="s"&gt;"dede"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt; &lt;span class="s"&gt;"Qual seu trapalhão favorito: "&lt;/span&gt; &lt;span class="nv"&gt;trapalhoes&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou algo mais apropriado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;e/ido-load-theme&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="s"&gt;"Carregue um tema usando Ido."&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let*&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;themes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;mapcar&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;symbol-name&lt;/span&gt; &lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;custom-available-themes&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
       &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt; &lt;span class="s"&gt;"Choose recent file: "&lt;/span&gt; &lt;span class="nv"&gt;themes&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt; &lt;span class="nv"&gt;theme&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;load-theme&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;intern&lt;/span&gt; &lt;span class="nv"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bacana não?! haha, mas tem como realçar ainda mais o comportamento de &lt;code&gt;ido&lt;/code&gt; com alguns pacotes externos adicionais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/creichert/ido-vertical-mode.el" rel="noopener noreferrer"&gt;https://github.com/creichert/ido-vertical-mode.el&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nonsequitur/smex" rel="noopener noreferrer"&gt;https://github.com/nonsequitur/smex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/creichert/ido-vertical-mode.el" rel="noopener noreferrer"&gt;https://github.com/creichert/ido-vertical-mode.el&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lewang/flx/tree" rel="noopener noreferrer"&gt;https://github.com/lewang/flx/tree&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma ótima novidade do Emacs 30 é a opção de poder instalar pacotes de forma reproduzível via &lt;code&gt;use-package&lt;/code&gt; com a nova prop &lt;code&gt;:vc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;use-package&lt;/span&gt; &lt;span class="nv"&gt;ido-completing-read+&lt;/span&gt;
  &lt;span class="ss"&gt;:ensure&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
  &lt;span class="ss"&gt;:vc&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:url&lt;/span&gt; &lt;span class="s"&gt;"https://github.com/DarwinAwardWinner/ido-completing-read-plus"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="ss"&gt;:config&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="ss"&gt;'ido-completing-read+&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-ubiquitous-mode&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E por coerência aqui vai minha configuração final:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;use-package&lt;/span&gt; &lt;span class="nv"&gt;ido&lt;/span&gt;
  &lt;span class="ss"&gt;:init&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;ido-enable-flex-matching&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
    &lt;span class="nv"&gt;ido-everywhere&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-mode&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="ss"&gt;:custom&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-create-new-buffer&lt;/span&gt; &lt;span class="ss"&gt;'always&lt;/span&gt;
             &lt;span class="nv"&gt;ido-enable-prefix&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;
             &lt;span class="nv"&gt;ido-enable-regexp&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
             &lt;span class="nv"&gt;ido-decorations&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;quote&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\n-&amp;gt; "&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="s"&gt;"\n "&lt;/span&gt; &lt;span class="s"&gt;"\n ..."&lt;/span&gt; &lt;span class="s"&gt;"["&lt;/span&gt; &lt;span class="s"&gt;"]"&lt;/span&gt; &lt;span class="s"&gt;" [No match]"&lt;/span&gt; &lt;span class="s"&gt;" [Matched]"&lt;/span&gt; &lt;span class="s"&gt;" [Not readable]"&lt;/span&gt; &lt;span class="s"&gt;" [Too big]"&lt;/span&gt; &lt;span class="s"&gt;" [Confirm]"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
             &lt;span class="nv"&gt;ido-file-extensions-order&lt;/span&gt; &lt;span class="o"&gt;'&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;".lisp"&lt;/span&gt; &lt;span class="s"&gt;".py"&lt;/span&gt; &lt;span class="s"&gt;".org"&lt;/span&gt; &lt;span class="s"&gt;".el"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="nv"&gt;ido-max-directory-size&lt;/span&gt; &lt;span class="mi"&gt;100000&lt;/span&gt;
             &lt;span class="nv"&gt;ido-use-filename-at-point&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
             &lt;span class="nv"&gt;ido-enable-dot-prefix&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
             &lt;span class="nv"&gt;ido-use-url-at-point&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
             &lt;span class="nv"&gt;ido-use-filename-at-point&lt;/span&gt; &lt;span class="ss"&gt;'guess&lt;/span&gt;
             &lt;span class="nv"&gt;ido-use-virtual-buffers&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="ss"&gt;:config&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;e/ido-bookmark-jump&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;bname&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="s"&gt;"Switch to bookmark BNAME interactively using `ido'."&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;
     &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt; &lt;span class="s"&gt;"Bookmark: "&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;bookmark-all-names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;bookmark-jump&lt;/span&gt; &lt;span class="nv"&gt;bname&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;e/recentf-ido-find-file&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="s"&gt;"Find a recent file using Ido."&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt; &lt;span class="s"&gt;"Choose recent file: "&lt;/span&gt; &lt;span class="nv"&gt;recentf-list&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt; &lt;span class="nv"&gt;file&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;find-file&lt;/span&gt; &lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;

  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;e/ido-load-theme&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="s"&gt;"Load theme using Ido."&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let*&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;themes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;mapcar&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;symbol-name&lt;/span&gt; &lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;custom-available-themes&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
       &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt; &lt;span class="s"&gt;"Choose recent file: "&lt;/span&gt; &lt;span class="nv"&gt;themes&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt; &lt;span class="nv"&gt;theme&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;load-theme&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;intern&lt;/span&gt; &lt;span class="nv"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;

  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;e/mx-ido&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="s"&gt;"Open Mx in ido-fashioned way."&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;call-interactively&lt;/span&gt;
     &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;intern&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt;
       &lt;span class="s"&gt;"M-x "&lt;/span&gt;
       &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;all-completions&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="nv"&gt;obarray&lt;/span&gt; &lt;span class="ss"&gt;'commandp&lt;/span&gt;&lt;span class="p"&gt;)))))&lt;/span&gt;

  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;define-key&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cdr&lt;/span&gt; &lt;span class="nv"&gt;ido-minor-mode-map-entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;[remap&lt;/span&gt; &lt;span class="nv"&gt;write-file]&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="ss"&gt;:bind&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s"&gt;"C-c r"&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="ss"&gt;'e/recentf-ido-find-file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"C-x C-f"&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="ss"&gt;'ido-find-file&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recomendação para leitura:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/software/emacs/manual/html_mono/ido.html" rel="noopener noreferrer"&gt;https://www.gnu.org/software/emacs/manual/html_mono/ido.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.masteringemacs.org/article/introduction-to-ido-mode" rel="noopener noreferrer"&gt;https://www.masteringemacs.org/article/introduction-to-ido-mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Informações gerais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GNU Emacs 30&lt;/li&gt;
&lt;li&gt;GNU Guix/SwayWM/Waybar/Firefox&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/easbarba/lar" rel="noopener noreferrer"&gt;https://gitlab.com/easbarba/lar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>emacs</category>
      <category>linux</category>
      <category>webdev</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>GNU Readline: Uma experiência Shell mais agradável no seu terminal</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Wed, 22 Jan 2025 04:58:04 +0000</pubDate>
      <link>https://dev.to/easbarbosa/-gnu-readline-uma-experiencia-shell-mais-saudavel-no-seu-terminal-13hj</link>
      <guid>https://dev.to/easbarbosa/-gnu-readline-uma-experiencia-shell-mais-saudavel-no-seu-terminal-13hj</guid>
      <description>&lt;p&gt;O usual de iniciantes usando Shell em terminais, como o &lt;a href="https://www.gnu.org/software/bash/" rel="noopener noreferrer"&gt;GNU Bash&lt;/a&gt;, após errar comandos, é usar bastante o mouse para correção. &lt;/p&gt;

&lt;p&gt;Por exemplo, para editar a lista de repositórios do Debian você usaria esse comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano /etc/pat/source.list&lt;/code&gt; |&lt;/p&gt;

&lt;p&gt;Então nota que o nome do diretório era &lt;code&gt;apt&lt;/code&gt; não &lt;code&gt;pat&lt;/code&gt;, e para corrigir puxa o mouse e clica em cima do &lt;code&gt;p&lt;/code&gt;, seguido de DELETE e novamente o mouse, agora após o &lt;code&gt;a&lt;/code&gt; e escrever &lt;code&gt;p&lt;/code&gt; e voilà:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano /etc/apt/source.list&lt;/code&gt; |&lt;/p&gt;

&lt;p&gt;Mas você poderia meramente usar os atalhos do &lt;a href="https://tiswww.cwru.edu/php/chet/readline/rltop.html" rel="noopener noreferrer"&gt;GNU Readline&lt;/a&gt; para essa edição.&lt;/p&gt;

&lt;p&gt;Como usar o &lt;code&gt;alt+b&lt;/code&gt; 3 vezes para voltar o cursor até o &lt;code&gt;pat&lt;/code&gt; então usar o &lt;code&gt;ctrl-f&lt;/code&gt; para ir para o &lt;code&gt;a&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano /etc/p|at/source.list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;e então &lt;code&gt;ctrl-t&lt;/code&gt; para inverter o &lt;code&gt;a&lt;/code&gt; e &lt;code&gt;p&lt;/code&gt; de posição para finalmente:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano /etc/apt/source.list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pronto!&lt;/p&gt;

&lt;p&gt;Bem mais simples e sem usar o mouse.&lt;/p&gt;

&lt;p&gt;Não curte os atalhos &lt;a href="https://www.gnu.org/software/emacs/" rel="noopener noreferrer"&gt;GNU Emacs&lt;/a&gt;, também tem os de &lt;a href="https://www.vim.org/" rel="noopener noreferrer"&gt;vi&lt;/a&gt;. ;)&lt;/p&gt;

&lt;p&gt;Para conhecer mais atalhos, consulte a Wikipédia do GNU Readline:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/GNU_Readline" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/GNU_Readline&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E também o seu manual: &lt;a href="https://tiswww.cwru.edu/php/chet/readline/rltop.html" rel="noopener noreferrer"&gt;https://tiswww.cwru.edu/php/chet/readline/rltop.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bash</category>
      <category>terminal</category>
      <category>linux</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Debian: Easily upgrading to the SID distribution</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Tue, 28 Feb 2023 11:04:27 +0000</pubDate>
      <link>https://dev.to/easbarbosa/easily-upgrading-to-the-debian-sid-distribution-gde</link>
      <guid>https://dev.to/easbarbosa/easily-upgrading-to-the-debian-sid-distribution-gde</guid>
      <description>&lt;p&gt;Developers usually stick with the latest version of the shiniest software out there, be it editors, browsers, stream players and office tools.&lt;/p&gt;

&lt;p&gt;Some Linux Distributions are famous for its rolling-release model with all bleeding-edge/night packages in the main repo, that goes for Arch, Manjaro, Nix.&lt;/p&gt;

&lt;p&gt;Not as famous as those there is a distribution of Debian named by SID, with all unstable packages, meaning packages not as tested as those in the Stable branch.&lt;/p&gt;

&lt;p&gt;Do not be confused by its name, it has an as solid experience as Arch, but with the advantage of having all .deb packages that most companies and OSS developers always target.&lt;/p&gt;

&lt;p&gt;Upgrading from Stable, or Testing, is about changing one word, its nickname if you will - bullseye, in the /etc/apt/source.list file, from this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;deb http://deb.debian.org/debian/ bullseye main &lt;br&gt;
deb-src http://deb.debian.org/debian/ bullseye main&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;deb http://deb.debian.org/debian/ sid main&lt;br&gt;
deb-src http://deb.debian.org/debian/ sid main&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;From there on, prepare yourself for one big upgrade of all packages installed with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt dist-upgrade&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;There is only one catch on the SID distribution, as Debian changes from one big version to a new one, usually 2 years, there will be a whole month that most packages are frozen, and you may not receive any update.&lt;/p&gt;

&lt;p&gt;Usually I just go distro-hopping for the shiniest and newest Distros, and after that, I go back to my beloved Debian in its newest version.&lt;/p&gt;

&lt;p&gt;Nonetheless, do not frail from moving up to SID, it’s a rather worth effort.&lt;/p&gt;

</description>
      <category>debian</category>
      <category>linux</category>
      <category>upgrade</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Wes, apenas outro gerenciador de dotfiles</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Tue, 28 Feb 2023 11:02:02 +0000</pubDate>
      <link>https://dev.to/easbarbosa/dut-yet-another-simple-dotfile-manager-48bp</link>
      <guid>https://dev.to/easbarbosa/dut-yet-another-simple-dotfile-manager-48bp</guid>
      <description>&lt;p&gt;Dotfiles, como implicado por seu nome, são arquivos com um pontinho anterior ao nome, que configuram o estado inicial dos programas e usualmente vivem - escondidos, nos diretorios do $HOME.&lt;/p&gt;

&lt;p&gt;Users craft their dotfiles through the years with a such a care that them can easily be the most sensible and essential files in their system, version-controlling is a must, of course.&lt;/p&gt;

&lt;p&gt;There is even a culture of proudly publicly sharing dotfiles, and that’s a good way to grab some cool snippets.&lt;/p&gt;

&lt;p&gt;We all love how frugal and simple to use are the Linux tools as find, grep or ls, so I kept that in mind on cooking up &lt;a href="https://gitlab.com/easbarba/wes" rel="noopener noreferrer"&gt;Wes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wes&lt;/strong&gt; creates links of all files in the target directory, perfectly mirroring them in the destination directory, &lt;code&gt;$HOME&lt;/code&gt; by default:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wes --root /data/dotfile_folder --create&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Of course you can just try it out first:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wes --root /data/dotfile_folder --pretend&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To remove all linked files, it goes as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wes -r /data/dotfile_folder --remove&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It goes as easy to set a different destination:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wes -r /data/bin --to ~/.local/bin --create&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We don’t want that just every file to be linked, eg: LICENSE. For those files, you can pin out their location by feeding the &lt;em&gt;.wesignore&lt;/em&gt;, that follows docker’s &lt;em&gt;.dockerignore&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Conflicting files found at the destination directory are moved up to &lt;code&gt;$HOME/.backup&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And that is it.&lt;/p&gt;

&lt;p&gt;For more information, check the README.md in the main repository, or the &lt;code&gt;--help&lt;/code&gt; option.&lt;/p&gt;

&lt;p&gt;Mas eu reconheço que apenas as versões em Python, Guile, e Go estão parcialmente funcionais.&lt;/p&gt;

&lt;p&gt;Com isso tudo dito, escolha seu veneno! :)&lt;/p&gt;

&lt;p&gt;PS: Em caso você está imaginando qualé essa de varias main.&lt;em&gt;, quando vou brincar com uma nova linguagem **Wes&lt;/em&gt;* é uma otima mesa de laboratorio com bons desafios para aprender essas.&lt;/p&gt;

&lt;p&gt;Em homenagem ao grandioso Wes Montgomery.&lt;/p&gt;

</description>
      <category>dotfiles</category>
      <category>linux</category>
      <category>automation</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
