porfirio's blog - debianhttps://porfiriopaiz.github.io/site/2023-09-11T04:39:00-06:00vim2023-09-11T04:39:00-06:002023-09-11T04:39:00-06:00Porfirio Páiztag:porfiriopaiz.github.io,2023-09-11:/site/posts/2023/09/11/vim.html<p class="first last">The Vim text editor</p>
<div class="section" id="understanding-vim-on-debian">
<h2>Understanding <tt class="docutils literal">vim</tt> on Debian</h2>
<p>Now that I understand how Debian manages <tt class="docutils literal">vi</tt> and <tt class="docutils literal">vim</tt> and I've grasped the
purpose of the vim-tiny package, it's time to determine the requirements for
obtaining a more advanced <tt class="docutils literal">vim</tt> binary with enhanced features or support for
additional functionalities.</p>
<p>A brief search for additional information on <tt class="docutils literal"><span class="pre">vim-tiny</span></tt> suggests various
alternatives for a more comprehensive <tt class="docutils literal">vim</tt> experience:</p>
<div class="highlight"><pre><span></span><span class="gp">pionen@lilit:~$ </span>apt-cache<span class="w"> </span>show<span class="w"> </span>vim-tiny
<span class="go">Package: vim-tiny</span>
<span class="go">Source: vim</span>
<span class="go">Version: 2:8.2.2434-3+deb11u1</span>
<span class="go">Installed-Size: 1574</span>
<span class="go">Maintainer: Debian Vim Maintainers <team+vim@tracker.debian.org></span>
<span class="go">Architecture: amd64</span>
<span class="go">Provides: editor</span>
<span class="go">Depends: vim-common (= 2:8.2.2434-3+deb11u1), libacl1 (>= 2.2.23), libc6 (>= 2.15), libselinux1 (>= 3.1~), libtinfo6 (>= 6)</span>
<span class="go">Suggests: indent</span>
<span class="go">Description-en: Vi IMproved - enhanced vi editor - compact version</span>
<span class="go"> Vim is an almost compatible version of the UNIX editor Vi.</span>
<span class="go"> .</span>
<span class="go"> This package contains a minimal version of Vim compiled with no GUI and</span>
<span class="go"> a small subset of features. This package's sole purpose is to provide</span>
<span class="go"> the vi binary for base installations.</span>
<span class="go"> .</span>
<span class="go"> If a vim binary is wanted, try one of the following more featureful</span>
<span class="go"> packages: vim, vim-nox, vim-athena, or vim-gtk3.</span>
<span class="go">Description-md5: 85f2dbef1339af3dcf83d9ee00fd5e22</span>
<span class="go">Homepage: https://www.vim.org/</span>
<span class="go">Tag: devel::editor, implemented-in::c, interface::text-mode, role::program,</span>
<span class="go"> uitoolkit::ncurses, use::editing, works-with::text, works-with::unicode</span>
<span class="go">Section: editors</span>
<span class="go">Priority: important</span>
<span class="go">Filename: pool/main/v/vim/vim-tiny_8.2.2434-3+deb11u1_amd64.deb</span>
<span class="go">Size: 744284</span>
<span class="go">MD5sum: 3b101104ccb4e8367298e4ea9dc33d27</span>
<span class="go">SHA256: 0cfc3ce179181f9c08f8460360a8bcba05c214d75ba51d78ecf021e42c9a4261</span>
</pre></div>
<p>Running both <tt class="docutils literal"><span class="pre">apt-cache</span> show <span class="pre">vim-athena</span></tt> and <tt class="docutils literal"><span class="pre">apt-cache</span> show <span class="pre">vim-gtk3</span></tt> reveals
that both packages offer a graphical user interface, which I neither desire nor
require.</p>
<p><tt class="docutils literal"><span class="pre">apt-cache</span> show vim</tt> displays information that suggests this could be the
solution I've been searching for:</p>
<div class="highlight"><pre><span></span><span class="gp">pionen@lilit:~$ </span>apt-cache<span class="w"> </span>show<span class="w"> </span>vim
<span class="go">Package: vim</span>
<span class="go">Version: 2:8.2.2434-3+deb11u1</span>
<span class="go">Installed-Size: 3286</span>
<span class="go">Maintainer: Debian Vim Maintainers <team+vim@tracker.debian.org></span>
<span class="go">Architecture: amd64</span>
<span class="go">Provides: editor</span>
<span class="go">Depends: vim-common (= 2:8.2.2434-3+deb11u1), vim-runtime (= 2:8.2.2434-3+deb11u1), libacl1 (>= 2.2.23), libc6 (>= 2.29), libgpm2 (>= 1.20.7), libselinux1 (>= 3.1~), libtinfo6 (>= 6)</span>
<span class="go">Suggests: ctags, vim-doc, vim-scripts</span>
<span class="go">Description-en: Vi IMproved - enhanced vi editor</span>
<span class="go"> Vim is an almost compatible version of the UNIX editor Vi.</span>
<span class="go"> .</span>
<span class="go"> Many new features have been added: multi level undo, syntax</span>
<span class="go"> highlighting, command line history, on-line help, filename</span>
<span class="go"> completion, block operations, folding, Unicode support, etc.</span>
<span class="go"> .</span>
<span class="go"> This package contains a version of vim compiled with a rather</span>
<span class="go"> standard set of features. This package does not provide a GUI</span>
<span class="go"> version of Vim. See the other vim-* packages if you need more</span>
<span class="go"> (or less).</span>
<span class="go">Description-md5: 59e8b8f7757db8b53566d5d119872de8</span>
<span class="go">Homepage: https://www.vim.org/</span>
<span class="go">Tag: devel::editor, implemented-in::c, interface::commandline,</span>
<span class="go"> interface::text-mode, role::program, scope::application,</span>
<span class="go"> uitoolkit::ncurses, use::editing, works-with::text, works-with::unicode</span>
<span class="go">Section: editors</span>
<span class="go">Priority: optional</span>
<span class="go">Filename: pool/main/v/vim/vim_8.2.2434-3+deb11u1_amd64.deb</span>
<span class="go">Size: 1494176</span>
<span class="go">MD5sum: f74e7886b6610f74d06c789eeb144b9c</span>
<span class="go">SHA256: b06d11fdee525b919deb4778f7af352ebf3d6ce2591c8fb8e02e52f1ae90ef7d</span>
</pre></div>
<p>And <tt class="docutils literal"><span class="pre">apt-cache</span> show <span class="pre">vim-nox</span></tt> shows me that <tt class="docutils literal"><span class="pre">vim-nox</span></tt> provides support for
scripting languages, Python among them, which is missing from the bare minimum
option provided by the <tt class="docutils literal">vim</tt> package.</p>
<p>So I installed it:</p>
<div class="highlight"><pre><span></span><span class="go">su -c “apt-get install vim-nox”</span>
</pre></div>
<p>The first thing I noticed after installing <tt class="docutils literal"><span class="pre">vim-nox</span></tt> is that now <tt class="docutils literal">vi</tt>
points to <tt class="docutils literal">vim.nox</tt>, meaning that when running <tt class="docutils literal">vi</tt> it will be actually
running <tt class="docutils literal">vim.nox</tt>, which is not what I was expecting.</p>
<div class="highlight"><pre><span></span><span class="gp">pionen@lilit:~$ </span>whereis<span class="w"> </span>vi
<span class="go">vi: /usr/bin/vi /usr/share/man/man1/vi.1.gz</span>
<span class="gp">pionen@lilit:~$ </span>ls<span class="w"> </span>-la<span class="w"> </span>/usr/bin/vi
<span class="go">lrwxrwxrwx 1 root root 20 May 28 2021 /usr/bin/vi -> /etc/alternatives/vi</span>
<span class="gp">pionen@lilit:~$ </span>ls<span class="w"> </span>-la<span class="w"> </span>/etc/alternatives/vi
<span class="go">lrwxrwxrwx 1 root root 16 Oct 12 2022 /etc/alternatives/vi -> /usr/bin/vim.nox</span>
</pre></div>
<p>I really struggled to find a fix for this, it took me a while to get to the
answer, but I found it:</p>
<p><a class="reference external" href="https://superuser.com/questions/852177/why-does-the-vi-command-open-vim-editor/852219#852219">https://superuser.com/questions/852177/why-does-the-vi-command-open-vim-editor/852219#852219</a></p>
<p>I just need to run <tt class="docutils literal">vim</tt> and addition pass some parameters next to it:</p>
<div class="highlight"><pre><span></span><span class="go">vim -u NONE</span>
</pre></div>
<p>Later I found the same suggestion on the <tt class="docutils literal">/usr/share/vim/vim82/defaults.vim</tt>
file:</p>
<div class="highlight"><pre><span></span><span class="go">" This is loaded if no vimrc file was found.</span>
<span class="go">" Except when Vim is run with "-u NONE" or "-C".</span>
<span class="go">" Individual settings can be reverted with ":set option&".</span>
<span class="go">" Other commands can be reverted as mentioned below.</span>
</pre></div>
<p>It's quite convenient to have the ability to run <tt class="docutils literal">vi</tt> without loading any
additional features from <tt class="docutils literal"><span class="pre">vim-nox</span></tt> when you simply need to make a minor edit,
without relying on plugins and such. To simplify this, I added the following
line to my <tt class="docutils literal"><span class="pre">~/.bash_aliases</span></tt> file. This ensures that when I run <tt class="docutils literal">vi</tt> it loads
<tt class="docutils literal"><span class="pre">vim-nox</span></tt> without any settings or features from configuration files such as
<tt class="docutils literal">/etc/vim/vimrc</tt> <tt class="docutils literal">/usr/share/vim/vim82/debian.vim</tt> or
<tt class="docutils literal">/usr/share/vim/vim82/defaults.vim</tt>:</p>
<p>Here's the code snippet I added to my <tt class="docutils literal"><span class="pre">~/.bash_aliases</span></tt> file to ensure <tt class="docutils literal">vi</tt>
runs <tt class="docutils literal"><span class="pre">vim-nox</span></tt> without any additional settings:</p>
<div class="highlight"><pre><span></span><span class="gp"># </span>Alias<span class="w"> </span>to<span class="w"> </span>run<span class="w"> </span>vi<span class="w"> </span>instead<span class="w"> </span>of<span class="w"> </span>vim.nox
<span class="go">alias vi="vim -u NONE"</span>
</pre></div>
<p>With this configuration, I'm all set! In the future, I'll be sharing my
<tt class="docutils literal"><span class="pre">~/.vimrc</span></tt> file and its contents.</p>
</div>
vi2022-10-31T03:32:00-06:002022-10-31T03:32:00-06:00Porfirio Páiztag:porfiriopaiz.github.io,2022-10-31:/site/posts/2022/10/31/vi.html<p class="first last">The Vi text editor</p>
<div class="section" id="understanding-vi-and-vim-on-debian">
<h2>Understanding vi and vim on Debian</h2>
<p>Since 2011, I've steadfastly embraced <tt class="docutils literal">vi</tt> as my primary text editor. My
journey into the realm of mastering the command line interface and
transitioning away from the comfort of the graphical user interface began early
on. Among the foundational skills I aimed to acquire, one of the first was the
efficient editing of text files.</p>
<p>Surprisingly, the exact catalyst that initially led me to embrace <tt class="docutils literal">vi</tt> has
faded into the distant recesses of my memory. Nevertheless, over eleven years
later, my loyalty to <tt class="docutils literal">vi</tt> remains unwavering. It has been a constant
companion throughout this journey, and I've never strayed into the world of
alternative text editors. In fact, I've even employed <tt class="docutils literal">vi</tt> for basic Python
programming tasks, underscoring its versatility and enduring utility in my
daily computing endeavors.</p>
<p>In this post, I intend to delve deep into the intricacies of how Debian manages
the functionality of <tt class="docutils literal">vi</tt> and vim right from a basic, uncustomized Debian
installation.</p>
<p>My objective is to gain a profound understanding of the fundamental behaviors
exhibited by <tt class="docutils literal">vi</tt> and vim in their most minimalist configurations, as they
are presented immediately after a fresh Debian installation.</p>
<p>It's worth noting that Debian does not include vim by default in this scenario.
I opted for a network install using the minimal tasksel profile, selecting only
the <tt class="docutils literal"><span class="pre">mate-desktop-environment</span></tt> package. This illustrates one of the aspects I
greatly appreciate about Debian – its commitment to delivering essential
software components, allowing users the freedom to shape and personalize their
tools and environments according to their specific needs, without making any
presumptions about what's best for them.</p>
<div class="section" id="vi-1">
<h3><tt class="docutils literal">vi</tt></h3>
<p>A pristine Debian installation defaults to including only the <tt class="docutils literal"><span class="pre">vim-tiny</span></tt>
package. Within this package, two critical configuration files are stored in
<tt class="docutils literal">/etc/vim/</tt>: <tt class="docutils literal">vimrc</tt> and <tt class="docutils literal">vimrc.tiny</tt>.</p>
<p>This setup is intentionally minimalist, devoid of any symbolic links, aliases,
or binary files associated with <tt class="docutils literal">vim</tt>. Consequently, the sole alias present
is <tt class="docutils literal">vi</tt>, which is directly linked to <tt class="docutils literal">vim.tiny</tt>.</p>
<p>When <tt class="docutils literal">vi</tt> is invoked, it effectively calls <tt class="docutils literal">vim.tiny</tt>, which, as the
default behavior, exclusively sources the file located at
<tt class="docutils literal">/etc/vim/vimrc.tiny</tt>.</p>
<p>Now, let's explore the contents of the <tt class="docutils literal">/etc/vim/vimrc.tiny</tt> file:</p>
<div class="highlight"><pre><span></span><span class="go">" Vim configuration file, in effect when invoked as "vi". The aim of this</span>
<span class="go">" configuration file is to provide a Vim environment as compatible with the</span>
<span class="go">" original vi as possible. Note that ~/.vimrc configuration files as other</span>
<span class="go">" configuration files in the runtimepath are still sourced.</span>
<span class="go">" When Vim is invoked differently ("vim", "view", "evim", ...) this file is</span>
<span class="go">" _not_ sourced; /etc/vim/vimrc and/or /etc/vim/gvimrc are.</span>
<span class="go">" Debian system-wide default configuration Vim</span>
<span class="go">set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim82,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after</span>
<span class="go">set compatible</span>
<span class="go">" vim: set ft=vim:</span>
</pre></div>
<p>Essentially, this configuration ensures that <tt class="docutils literal">vi</tt> (which invokes
<tt class="docutils literal">vim.tiny</tt>) closely mimics the behavior of the original <tt class="docutils literal">vi</tt>. Furthermore,
it automatically loads configuration files found under the <tt class="docutils literal">$VIMRUNTIME</tt>
directory, which includes both <tt class="docutils literal"><span class="pre">~/.vimrc</span></tt> and any configuration files
specified in the <tt class="docutils literal">runtimepath</tt> variable.</p>
<p>In this specific case, it prioritizes the inclusion of
<tt class="docutils literal">/usr/share/vim/vim82/debian.vim</tt> and then
<tt class="docutils literal">/usr/share/vim/vim82/defaults.vim.</tt></p>
<p>As a final touch, it enforces compatibility with the original <tt class="docutils literal">vi</tt>, even if
other configuration files in the <tt class="docutils literal">runtimepath</tt> attempt to disable it, by
appending the <tt class="docutils literal">set compatible</tt> directive to the end of the configuration
file.</p>
<p>In the absence of any other <tt class="docutils literal">vim</tt> versions installed on the system, <tt class="docutils literal">vi</tt>
will naturally point to <tt class="docutils literal">vim.tiny</tt> by default.</p>
<div class="highlight"><pre><span></span><span class="gp">pionen@lilit:~$ </span>ls<span class="w"> </span>-la<span class="w"> </span>/etc/alternatives/vi
<span class="go">lrwxrwxrwx 1 root root 16 Oct 12 2022 /etc/alternatives/vi -> /usr/bin/vim.tiny</span>
</pre></div>
<p>Conversely, if <tt class="docutils literal">vim</tt> is explicitly installed and invoked as <tt class="docutils literal">vim</tt>, or via
aliases such as <tt class="docutils literal">view</tt> or <tt class="docutils literal">evim</tt> (note that none of these aliases are
available in this minimal setup), the configuration files <tt class="docutils literal">/etc/vim/vimrc</tt>
and <tt class="docutils literal">/etc/gvimrc</tt> are activated and sourced.</p>
<div class="highlight"><pre><span></span><span class="go">" All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by</span>
<span class="go">" the call to :runtime you can find below. If you wish to change any of those</span>
<span class="go">" settings, you should do it in this file (/etc/vim/vimrc), since debian.vim</span>
<span class="go">" will be overwritten everytime an upgrade of the vim packages is performed.</span>
<span class="go">" It is recommended to make changes after sourcing debian.vim since it alters</span>
<span class="go">" the value of the 'compatible' option.</span>
<span class="go">runtime! debian.vim</span>
<span class="go">" Vim will load $VIMRUNTIME/defaults.vim if the user does not have a vimrc.</span>
<span class="go">" This happens after /etc/vim/vimrc(.local) are loaded, so it will override</span>
<span class="go">" any settings in these files.</span>
<span class="go">" If you don't want that to happen, uncomment the below line to prevent</span>
<span class="go">" defaults.vim from being loaded.</span>
<span class="go">" let g:skip_defaults_vim = 1</span>
<span class="go">" Uncomment the next line to make Vim more Vi-compatible</span>
<span class="go">" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous</span>
<span class="go">" options, so any other options should be set AFTER setting 'compatible'.</span>
<span class="go">"set compatible</span>
<span class="go">" Vim5 and later versions support syntax highlighting. Uncommenting the next</span>
<span class="go">" line enables syntax highlighting by default.</span>
<span class="go">"syntax on</span>
<span class="go">" If using a dark background within the editing area and syntax highlighting</span>
<span class="go">" turn on this option as well</span>
<span class="go">"set background=dark</span>
<span class="go">" Uncomment the following to have Vim jump to the last position when</span>
<span class="go">" reopening a file</span>
<span class="go">"au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif</span>
<span class="go">" Uncomment the following to have Vim load indentation rules and plugins</span>
<span class="go">" according to the detected filetype.</span>
<span class="go">"filetype plugin indent on</span>
<span class="go">" The following are commented out as they cause vim to behave a lot</span>
<span class="go">" differently from regular Vi. They are highly recommended though.</span>
<span class="go">"set showcmd " Show (partial) command in status line.</span>
<span class="go">"set showmatch " Show matching brackets.</span>
<span class="go">"set ignorecase " Do case insensitive matching</span>
<span class="go">"set smartcase " Do smart case matching</span>
<span class="go">"set incsearch " Incremental search</span>
<span class="go">"set autowrite " Automatically save before commands like :next and :make</span>
<span class="go">"set hidden " Hide buffers when they are abandoned</span>
<span class="go">"set mouse=a " Enable mouse usage (all modes)</span>
<span class="go">" Source a global configuration file if available</span>
<span class="go">if filereadable("/etc/vim/vimrc.local")</span>
<span class="go"> source /etc/vim/vimrc.local</span>
<span class="go">endif</span>
</pre></div>
<p>When we execute <tt class="docutils literal">vim</tt> in the command line, and subsequently issue the <tt class="docutils literal">vim</tt>
command:</p>
<div class="highlight"><pre><span></span><span class="go">:echo $VIMRUNTIME</span>
</pre></div>
<p>The following output will be displayed:</p>
<div class="highlight"><pre><span></span><span class="go">/usr/share/vim/vim82</span>
</pre></div>
<p>Inside <tt class="docutils literal">vim</tt>, when we execute the command:</p>
<div class="highlight"><pre><span></span><span class="go">:scriptnames</span>
</pre></div>
<p>It will display a list of all the script files that are loaded based on the
<tt class="docutils literal">/etc/vim/vimrc</tt> configuration file:</p>
<div class="highlight"><pre><span></span><span class="go"> 1: /usr/share/vim/vimrc</span>
<span class="go"> 2: /usr/share/vim/vim82/debian.vim</span>
<span class="go"> 3: /usr/share/vim/vim82/defaults.vim</span>
<span class="go"> 4: /usr/share/vim/vim82/filetype.vim</span>
<span class="go"> 5: /usr/share/vim/vim82/ftplugin.vim</span>
<span class="go"> 6: /usr/share/vim/vim82/indent.vim</span>
<span class="go"> 7: /usr/share/vim/vim82/syntax/syntax.vim</span>
<span class="go"> 8: /usr/share/vim/vim82/syntax/synload.vim</span>
<span class="go"> 9: /usr/share/vim/vim82/syntax/syncolor.vim</span>
<span class="go"> 10: /usr/share/vim/vim82/plugin/getscriptPlugin.vim</span>
<span class="go"> 11: /usr/share/vim/vim82/plugin/gzip.vim</span>
<span class="go"> 12: /usr/share/vim/vim82/plugin/logiPat.vim</span>
<span class="go"> 13: /usr/share/vim/vim82/plugin/manpager.vim</span>
<span class="go"> 14: /usr/share/vim/vim82/plugin/matchparen.vim</span>
<span class="go"> 15: /usr/share/vim/vim82/plugin/netrwPlugin.vim</span>
<span class="go"> 16: /usr/share/vim/vim82/plugin/rrhelper.vim</span>
<span class="go"> 17: /usr/share/vim/vim82/plugin/spellfile.vim</span>
<span class="go"> 18: /usr/share/vim/vim82/plugin/tarPlugin.vim</span>
<span class="go"> 19: /usr/share/vim/vim82/plugin/tohtml.vim</span>
<span class="go"> 20: /usr/share/vim/vim82/plugin/vimballPlugin.vim</span>
<span class="go"> 21: /usr/share/vim/vim82/plugin/zipPlugin.vim</span>
<span class="go">Press ENTER or type command to continue</span>
</pre></div>
<p>If, for any reason, we have already created a <tt class="docutils literal"><span class="pre">~/.vimrc</span></tt> file, the inclusion
of <tt class="docutils literal">/usr/share/vim/vim82/defaults.vim</tt> will be skipped:</p>
<p>Inside <tt class="docutils literal">vim</tt>, upon executing the command:</p>
<div class="highlight"><pre><span></span><span class="go">:scriptnames</span>
</pre></div>
<p>You'll observe that instead, <tt class="docutils literal"><span class="pre">~/.vimrc</span></tt> takes precedence and gets sourced:</p>
<div class="highlight"><pre><span></span><span class="go"> 1: /usr/share/vim/vimrc</span>
<span class="go"> 2: /usr/share/vim/vim82/debian.vim</span>
<span class="go"> 3: ~/.vimrc</span>
<span class="go"> 4: /usr/share/vim/vim82/syntax/syntax.vim</span>
<span class="go"> 5: /usr/share/vim/vim82/syntax/synload.vim</span>
<span class="go"> 6: /usr/share/vim/vim82/syntax/syncolor.vim</span>
<span class="go"> 7: /usr/share/vim/vim82/filetype.vim</span>
<span class="go"> 8: /usr/share/vim/vim82/ftplugin.vim</span>
<span class="go"> 9: /usr/share/vim/vim82/indent.vim</span>
<span class="go"> 10: /usr/share/vim/vim82/syntax/nosyntax.vim</span>
<span class="go"> 11: /usr/share/vim/vim82/plugin/getscriptPlugin.vim</span>
<span class="go"> 12: /usr/share/vim/vim82/plugin/gzip.vim</span>
<span class="go"> 13: /usr/share/vim/vim82/plugin/logiPat.vim</span>
<span class="go"> 14: /usr/share/vim/vim82/plugin/manpager.vim</span>
<span class="go"> 15: /usr/share/vim/vim82/plugin/matchparen.vim</span>
<span class="go"> 16: /usr/share/vim/vim82/plugin/netrwPlugin.vim</span>
<span class="go"> 17: /usr/share/vim/vim82/plugin/rrhelper.vim</span>
<span class="go"> 18: /usr/share/vim/vim82/plugin/spellfile.vim</span>
<span class="go"> 19: /usr/share/vim/vim82/plugin/tarPlugin.vim</span>
<span class="go"> 20: /usr/share/vim/vim82/plugin/tohtml.vim</span>
<span class="go"> 21: /usr/share/vim/vim82/plugin/vimballPlugin.vim</span>
<span class="go"> 22: /usr/share/vim/vim82/plugin/zipPlugin.vim</span>
<span class="go">Press ENTER or type command to continue</span>
</pre></div>
<p>This implies that if we require specific settings from the
<tt class="docutils literal">/usr/share/vim/vim82/defaults.vim</tt> file, we should incorporate them into the
<tt class="docutils literal"><span class="pre">~/.vimrc</span></tt> configuration file.</p>
<p>It's important to note that any configurations from <tt class="docutils literal">/usr/share/vim/vimrc</tt>
and <tt class="docutils literal">/usr/share/vim/vim82/debian.vim</tt> will be overridden by settings in
<tt class="docutils literal"><span class="pre">~/.vimrc.</span></tt></p>
<p>Having this understanding, I now have clarity on what to adopt from
<tt class="docutils literal">/usr/share/vim/vim82/defaults.vim</tt> if the need arises.</p>
<p>In the upcoming post, I will explain my choice of <tt class="docutils literal">vim</tt> versions available in
the Debian repository and the rationale behind my selection.</p>
</div>
</div>
JOSM2021-07-22T20:46:00-06:002021-07-22T20:46:00-06:00Porfirio Páiztag:porfiriopaiz.github.io,2021-07-22:/site/posts/2021/07/22/josm.html<p class="first last">The Java OpenStreetMap editor</p>
<p>JOSM is in my opinion the best editor for OpenStreetMap I have ever used and it
is also the best Java software I have ever used too.</p>
<p>In this post, I will cover how to get it installed on Debian and how to
properly configure it for mapping on OSM and what plugins to install and use.</p>
<div class="section" id="installing-josm-on-debian">
<h2>Installing JOSM on Debian</h2>
<p>JOSM is available on the Debian official repository, so for its installation,
you just need to open a terminal and type the next command:</p>
<div class="highlight"><pre><span></span><span class="go">su -c 'apt-get install josm'</span>
</pre></div>
</div>
<div class="section" id="solving-josm-outdated-version-on-debian">
<h2>Solving JOSM outdated version on Debian</h2>
<p>Installing JOSM from the official Debian repositories solves the dependency
issue we would find if we ran the most up-to-date version from the official
.jar build.</p>
<p>To run the most up-to-date stable version we need to download it from the
official JOSM website as a JAR file, but first, we need to run at least once
the version is installed from the Debian repository.</p>
<div class="highlight"><pre><span></span><span class="go">josm</span>
</pre></div>
<p>This is going to create the next directory structure associated with it:</p>
<div class="highlight"><pre><span></span><span class="go">~/.config/JOSM</span>
<span class="go">~/.cache/JOSM</span>
<span class="go">~/.local/share/JOSM</span>
</pre></div>
<p>Under <tt class="docutils literal"><span class="pre">~/.cache/JOSM/</span></tt> will create a directory named <tt class="docutils literal">jar</tt>:</p>
<div class="highlight"><pre><span></span><span class="go">mkdir -p ~/.cache/JOSM/jar</span>
</pre></div>
<p>Now let us move to that directory:</p>
<div class="highlight"><pre><span></span><span class="go">cd ~/.cache/JOSM/jar</span>
</pre></div>
<p>Now let's download the most up to date version of the JOSM editor using wget:</p>
<div class="highlight"><pre><span></span><span class="go">wget -N -t 0 -c https://josm.openstreetmap.de/josm-tested.jar</span>
</pre></div>
<p>Now, to run the new version up to date version, we download:</p>
<div class="highlight"><pre><span></span><span class="go">java -jar ~/.cache/JOSM/jar/josm-tested.jar</span>
</pre></div>
</div>
<div class="section" id="script-launcher">
<h2>Script launcher</h2>
<p>To launch the JAR file, we can add the last command to a file with executable
permissions:</p>
<div class="highlight"><pre><span></span><span class="go">touch ~/.local/bin/tested-josm.sh</span>
</pre></div>
<p>Then add the following to it:</p>
<div class="highlight"><pre><span></span><span class="gp">#</span>!<span class="w"> </span>/bin/bash
<span class="go">java -jar ~/.cache/JOSM/jar/josm-tested.jar</span>
</pre></div>
</div>
<div class="section" id="adding-a-launcher">
<h2>Adding a launcher</h2>
<p>To make this easier, let's create a launcher for the manually downloaded JOSM
JAR file and previously created script:</p>
<div class="highlight"><pre><span></span><span class="go">touch ~/.local/share/applications/org.openstreetmap.josm.desktop</span>
</pre></div>
<p>And add the following:</p>
<div class="highlight"><pre><span></span><span class="go">[Desktop Entry]</span>
<span class="go">Type=Application</span>
<span class="go">Version=1.0</span>
<span class="go">Name=JOSM Tested</span>
<span class="go">GenericName=Java OpenStreetMap Editor</span>
<span class="go">Comment=Extensible off-line editor for OpenStreetMap (OSM)</span>
<span class="go">Icon=org.openstreetmap.josm</span>
<span class="go">Exec=/home/pionen/.local/bin/tested-josm.sh</span>
<span class="go">Terminal=false</span>
<span class="go">MimeType=application/x-osm+xml;application/x-gpx+xml;application/geo+json;application/x-josm-session+xml;application/x-josm-session+zip;x-scheme-handler/geo;</span>
<span class="go">StartupNotify=true</span>
<span class="go">Categories=Education;Geoscience;Maps;</span>
<span class="go">StartupWMClass=org-openstreetmap-josm-MainApplication</span>
<span class="go">Keywords=OpenStreetMap;OSM;</span>
</pre></div>
<p>The next time you restart your computer, you will find the new launcher, and by
just clicking on it, you will start the most up-to-date version of JOSM on
Debian.</p>
</div>
Mate Desktop on Debian2021-07-22T19:11:00-06:002021-07-22T19:11:00-06:00Porfirio Páiztag:porfiriopaiz.github.io,2021-07-22:/site/posts/2021/07/22/mate-desktop-on-debian.html<p class="first last">Mate Desktop config on my Debian setup</p>
<div class="section" id="mate-desktop-tips-and-tricks">
<h2>Mate Desktop Tips and Tricks</h2>
<p>Notify discharging of the battery:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.power-manager notify-discharging true</span>
</pre></div>
<p>Enable windows composing:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.Marco.general compositing-manager true</span>
</pre></div>
<p>Enable new window centering:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.Marco.general center-new-windows true</span>
</pre></div>
<p>Enable window snapping:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.Marco.general allow-tiling true</span>
</pre></div>
<p>Hide all desktop icons:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.background show-desktop-icons false</span>
</pre></div>
<p>Change window decoration button order:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.Marco.general button-layout 'close,maximize,minimize:menu'</span>
</pre></div>
<p>Disable automount-open:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.media-handling automount-open false</span>
</pre></div>
<p>Disable automounting:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.media-handling automount false</span>
</pre></div>
<p>Caja default prefereces for sorting order:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.caja.preferences default-sort-order 'type'</span>
</pre></div>
<p>Caja sort directories first:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.caja.preferences sort-directories-first true</span>
</pre></div>
<p>Set icon theme:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.interface icon-theme 'gnome'</span>
</pre></div>
<p>Set GTK theme:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.interface gtk-theme 'Arc-Dark'</span>
</pre></div>
<p>Set GTK windows border theme:</p>
<div class="highlight"><pre><span></span><span class="go">gsettings set org.mate.Marco.general theme 'Arc-Dark'</span>
</pre></div>
</div>
UTC2021-07-15T20:53:00-06:002021-07-15T20:53:00-06:00Porfirio Páiztag:porfiriopaiz.github.io,2021-07-15:/site/posts/2021/07/15/utc.html<p class="first last">Set Local time, RTC time and Time zone to UTC</p>
<p>When I was installing Debian on my Lenovo ThinkPad T440p I could not find the
option to setup the local time, RTC time and the Time zone to UTC as the
default configuration.</p>
<p>To fix this I need to run the next commands:</p>
<div class="highlight"><pre><span></span><span class="go">timedatectl</span>
</pre></div>
<p>This lists the current configuration:</p>
<div class="highlight"><pre><span></span><span class="gp">pionen@lilit:~$ </span>timedatectl
<span class="go"> Local time: Thu 2021-07-15 14:45:28 CST</span>
<span class="go"> Universal time: Thu 2021-07-15 20:45:28 UTC</span>
<span class="go"> RTC time: Thu 2021-07-15 20:44:47</span>
<span class="go"> Time zone: America/Managua (CST, -0600)</span>
<span class="go">System clock synchronized: yes</span>
<span class="go"> NTP service: active</span>
<span class="go"> RTC in local TZ: yes</span>
<span class="go">Warning: The system is configured to read the RTC time in the local time zone.</span>
<span class="go"> This mode cannot be fully supported. It will create various problems</span>
<span class="go"> with time zone changes and daylight saving time adjustments. The RTC</span>
<span class="go"> time is never updated, it relies on external facilities to maintain it.</span>
<span class="go"> If at all possible, use RTC in UTC by calling</span>
<span class="go"> 'timedatectl set-local-rtc 0'.</span>
</pre></div>
<p>First of all let's update the RTC in UTC:</p>
<div class="highlight"><pre><span></span><span class="go">timedatectl set-local-rtc 0</span>
</pre></div>
<p>Then let's set the time zone and the local time zone to UTC:</p>
<div class="highlight"><pre><span></span><span class="go">timedatectl set-timezone UTC</span>
</pre></div>
<p>Now our system will be set entirely to be in sync with UTC:</p>
<div class="highlight"><pre><span></span><span class="gp">pionen@lilit:~$ </span>timedatectl
<span class="go"> Local time: Thu 2021-07-15 21:31:52 UTC</span>
<span class="go"> Universal time: Thu 2021-07-15 21:31:52 UTC</span>
<span class="go"> RTC time: Thu 2021-07-15 21:31:52</span>
<span class="go"> Time zone: UTC (UTC, +0000)</span>
<span class="go">System clock synchronized: yes</span>
<span class="go"> NTP service: active</span>
<span class="go"> RTC in local TZ: no</span>
</pre></div>
K82021-07-14T17:37:00-06:002021-07-14T17:37:00-06:00Porfirio Páiztag:porfiriopaiz.github.io,2021-07-14:/site/posts/2021/07/14/k8.html<p class="first last">Swap from multimedia keys to function keys as the primary option</p>
<p>Back in February Guido van Rossum posted on Twitter a picture of his desk with
a large mouse pad.</p>
<p><a class="reference external" href="https://twitter.com/gvanrossum/status/1365796969617104897/">https://twitter.com/gvanrossum/status/1365796969617104897/</a></p>
<p>What got my attention from this picture was the keyboard, down on the comment
section I found the manufacturer and model of this keyboard.</p>
<p><a class="reference external" href="https://www.keychron.com/products/keychron-k8-tenkeyless-wireless-mechanical-keyboard?variant=32018253021273">https://www.keychron.com/products/keychron-k8-tenkeyless-wireless-mechanical-keyboard?variant=32018253021273</a></p>
<p>I have always wanted to give a try to mechanical keyboards, but never knew
exactly which one to get or try. Seeing that this is the preferred one from a
respectable developer I decided to go for this same model.</p>
<p>The very specific configuration I wanted was not available at the time I was
ordering it, so I subscribed myself to get a notification via email when the
same configuration became available again.</p>
<p>I ordered mine in June 3rd, the keyboard was shipped from Hong Kong to Miami
and arrived in the next 5 days. And the keyboard arrived to Nicaragua 25 days
after.</p>
<p>The first thing I tried to do was to setup the keyboard with my T440p running
Debian 11 Bullseye via Bluetooth, for this I installed Blueman, which provides
a Mate applet:</p>
<div class="highlight"><pre><span></span><span class="go">su -c 'apt-get install blueman'</span>
</pre></div>
<p>With the switches from the keyboard as Windows and Bluetooth, the Blueman
applet running and following the instructions booklet included on the box, I
was able to pair my Keychron K8 via Bluetooth with my T440p running Debian.</p>
<p>I had to manually add my keyboard as a new device with the applet and then pair
both devices.</p>
<p>Over Bluetooth and on Windows mode the swap from multimedia keys to function
keys did work, but on wired mode this did not work.</p>
<p>I found some hints on how to fix this on the official Facebook support group
for Linux users of Keychron, that led me to this very specific command that has
to be run on every start up so that the primary option for the F1 to F12 keys
to become functions keys instead of multimedia keys.</p>
<div class="highlight"><pre><span></span><span class="go">echo 0 | sudo tee /sys/module/hid_apple/parameters/fnmode</span>
</pre></div>
<p>Later I found this documentation that provides at least 3 different ways to
make sure this command is executed on every start up:</p>
<p><a class="reference external" href="https://help.ubuntu.com/community/AppleKeyboard#Change_Function_Key_behavior">https://help.ubuntu.com/community/AppleKeyboard#Change_Function_Key_behavior</a></p>
<p>From the 3 options listed there I decided to go for the one that makes use of
the sysfs.conf file. So I installed <tt class="docutils literal">sysfsutils</tt>:</p>
<div class="highlight"><pre><span></span><span class="go">su -c 'apt-get install sysfsutils'</span>
</pre></div>
<p>And added this line at the end of the file <strong>/etc/sysfs.conf</strong>:</p>
<div class="highlight"><pre><span></span><span class="go">module/hid_apple/parameters/fnmode = 0</span>
</pre></div>
<p>Restarted the computer and then while in cable and Windows mode I pressed the
key combination:</p>
<p>Fn + x + l</p>
<p>After doing this the primary option for the F1 to F12 key will be the functions
keys instead of the multimedia keys.</p>
<p>To modify the screen brightness, to turn on and off the keyboard backlight,
mute and unmute the audio you must press the Fn key plus the function key (Fn +
F1 or Fn + F2) and that should allows you to continue using your K8 on Linux
with the switches in Windows/Android mode, in wired or Bluetooth mode with the
Functions key as the primary option instead of the multimedia keys.</p>
Setup Debian keyboard layout and distribution2021-07-14T16:38:00-06:002021-07-14T16:38:00-06:00Porfirio Páiztag:porfiriopaiz.github.io,2021-07-14:/site/posts/2021/07/14/kb-layout-and-distribution.html<p class="first last">How to setup English International with AltGr dead keys</p>
<p>During the Debian installation process we are offered to setup our keyboard
layout and distribution; sadly my favorite one is not listed as one the
possible options.</p>
<p>I would like to be able to set it up as English International with AltGr dead
keys.</p>
<p>This is something I have to do as a post-install setting by running the next
command:</p>
<div class="highlight"><pre><span></span><span class="go">su -c 'localectl set-x11-keymap us thinkpad altgr-intl'</span>
</pre></div>
<p>This sets the layout as English US; the model compatible with my Lenovo
ThinkPad T440p; the variant as Dead keys via AltGr, which means I can input
characters as á or ñ by just pressing: AltGr + a or AltGr + n respectively.</p>
<div class="highlight"><pre><span></span><span class="gp">pionen@lilit:~$ </span>localectl
<span class="go">System Locale: LANG=en_US.UTF-8</span>
<span class="go"> LANGUAGE=en_US:en</span>
<span class="go"> VC Keymap: n/a</span>
<span class="go"> X11 Layout: us</span>
<span class="go"> X11 Model: thinkpad</span>
<span class="go"> X11 Variant: altgr-intl</span>
</pre></div>
<p>This way I can continue using the English US keyboard layout when writing in
either English or Spanish without having to change the variant or physical
layout.</p>
KeePassXC, the password manager2017-11-17T19:10:00-06:002017-11-17T19:10:00-06:00Porfirio Páiztag:porfiriopaiz.github.io,2017-11-17:/site/posts/2017/11/17/keepassxc-password-manager.html<p class="first last">A password manager Free and secure.</p>
<p>KeePassXC is one of the first programs that I install after the first boot of
any fresh install.</p>
<p>In the next post I will show how to install KeePassXC on Fedora and Debian, its
use and how it makes easier the management of hundreds of accounts and the
associated passwords, and how to generate secure passwords with the highest
levels of entropy.</p>
<div class="section" id="installation">
<h2>Installation</h2>
<div class="section" id="fedora">
<h3>Fedora</h3>
<div class="highlight"><pre><span></span><span class="go">su -c 'dnf install keepassxc'</span>
</pre></div>
</div>
<div class="section" id="debian">
<h3>Debian</h3>
<div class="highlight"><pre><span></span><span class="go">su -c 'apt-get install keepassx'</span>
</pre></div>
</div>
</div>
<div class="section" id="create-a-password-database">
<h2>Create a password database</h2>
<p>The first thing we must do is create our first database in which we will keep
all the passwords that we generate for each account.</p>
<ul class="simple">
<li>Execute KeePassXC:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-18_21-38-49.png" />
<ul class="simple">
<li>Create a new database:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-18_21-31-18.png" />
<ul class="simple">
<li>Assign a name to the <cite>*.kdbx</cite> file, our database:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-18_22-02-29.png" />
<ul class="simple">
<li>It is time to assign a password, this will be the master password that We
will use to decrypt the file <cite>Passwords.kdbx</cite>, we click on <cite>OK</cite>:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-18_22-09-07.png" />
<ul class="simple">
<li>To add a new account and its respective password, click on the icon of the
<cite>Key</cite> with a green arrow:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-20_16-37-51.png" />
<ul class="simple">
<li>Add a title to identify what this password corresponds to, add the username
to which the password We are going to create will belong:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-19_22-15-14.png" />
<ul>
<li><p class="first">Then click on the black dots icon, notice how a new menu with options is
displayed:</p>
<blockquote>
<ul>
<li><p class="first">Click on the password tab, increase the amount of characters desired for
our password, the more characters the higher the entropy level.</p>
</li>
<li><p class="first">In the <strong>Characters Types</strong> section, We can select the different groups of
characters We want to be present in our password:</p>
<blockquote>
<ul class="simple">
<li>Characters from <cite>A</cite> to <cite>Z</cite>, in capital letters: <cite>A-Z</cite></li>
<li>Characters from <cite>a</cite> to <cite>z</cite>, in lower case: <cite>a-z</cite></li>
<li>Numbers: <cite>0-9</cite></li>
<li>Special characters: <cite>/*_ ...</cite></li>
<li>Characters from <a class="reference external" href="https://en.wikipedia.org/wiki/Extended_ASCII">Extended ASCII</a></li>
</ul>
</blockquote>
</li>
<li><p class="first">I marked them all.</p>
<blockquote>
<ul>
<li><p class="first">With the mouse scroll go down and mark with a check:</p>
<blockquote>
<ul class="simple">
<li><strong>Exclude look alike characters</strong></li>
<li><strong>Pick characters from every group</strong></li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
</li>
<li><p class="first">Finally click <tt class="docutils literal">Generate</tt> to generate the password with the combination
of selected characters and then <tt class="docutils literal">Copy</tt> to copy the password to the
clipboard.</p>
</li>
</ul>
</blockquote>
</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-19_22-17-30.png" />
<ul class="simple">
<li>Now pressing <cite>Ctrl-v</cite> paste the password in the <strong>Password</strong> field and
<cite>Ctrl-V</cite> in <strong>Repeat</strong>:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-19_22-18-18.png" />
<ul class="simple">
<li>By clicking on the <cite>eye</cite> icon we can reveal the password we have generated,
copied and pasted in the <strong>Password</strong> and <strong>Repeat</strong> fields, click <cite>Apply</cite>
and then <cite>OK</cite>:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-19_22-18-31.png" />
<ul class="simple">
<li>Note the asterisk in the upper border of the window at the end of
<cite>Passwords.kdbx</cite>, this means that the changes have not been saved in the
database:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-19_22-18-58.png" />
<ul class="simple">
<li>Click on the icon of the blue file to save the changes in the database:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-22_16-21-04.png" />
<ul class="simple">
<li>Note that the asterisk at the top edge of the screen at the end of
<cite>Passwords.kdbx</cite> has disappeared, this means that the changes have already
been saved in the database:</li>
</ul>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-19_22-19-03.png" />
</div>
<div class="section" id="useful-keyboard-shortcuts">
<h2>Useful keyboard shortcuts</h2>
<p><strong>Ctrl</strong> - <strong>b</strong> Copy the user to the clipboard.</p>
<p><strong>Ctrl</strong> - <strong>c</strong> Copy the user's password to the clipboard.</p>
<p><strong>Ctrl</strong> - <strong>e</strong> Open the menu to make modifications to the different accounts
that we have in our database.</p>
<p><strong>Ctrl</strong> - <strong>n</strong> Allows you to add a new account to the database.</p>
</div>
<div class="section" id="self-writing-shortcut">
<h2>Self-writing shortcut</h2>
<p>This keyboard shortcut is my favorite. It allows you to write the user and
password of an entry in our database directly to the page where that user and
password is used, so it is not necessary to use three shortcuts to achieve the
same result.</p>
<p><strong>Ctrl</strong> - <strong>v</strong></p>
<p>In order for it to work as it should, both KeePassXC and the field where the
user and password are introduced, must be a shot away from <strong>Alt</strong> - <strong>Tab</strong>.</p>
<p>By this I mean that if you press <strong>Alt</strong> - <strong>Tab</strong> you should move from the
<tt class="docutils literal">KeePassXC</tt> window to the browser window, for example:</p>
<p>Note that the account has a URL linked:</p>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-22_15-56-04.png" />
<p>Go to our <tt class="docutils literal">KeePassXC</tt>, we select the entry of our database that corresponds
to the account in which we want to log in.</p>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-22_15-55-41.png" />
<p>Press:</p>
<p><strong>Ctrl</strong> - <strong>u</strong> to open the tab in which you will log in, this will open the
browser that we have configured as our default Web Browser, this page is
configured to locate the keyboard entry in the user field.</p>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-22_16-35-24.png" />
<p>Press:</p>
<p><strong>Atl</strong> - <strong>Tab</strong> to select the <tt class="docutils literal">KeePassXC</tt> window back:</p>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-22_15-55-41.png" />
<p>And then, making sure We still have selected the same entry in the database,
press:</p>
<p><strong>Ctrl</strong> - <strong>v</strong></p>
<img alt="" class="align-center" src="https://porfiriopaiz.github.io/site/images/keepassxc/screenshot_from_2017-11-22_17-01-06.png" />
<p>The final result should make <tt class="docutils literal">KeePassXC</tt> return to the browser, insert the
user, jump to the next field, insert the password, to finally and automatically
"press" <tt class="docutils literal">Log In</tt> and log in.</p>
<p>I hope this post is useful for you.</p>
</div>