August 7, 2019

ido-mode with eshell, shell, sql and more...

ido-mode doesn't provide completion for eshell, shell or sql-mode out of the box, and I wasn't been able to find any package with this option that is lightweight enough (Helm, I'm looking at you). So, after few attempts, here is the code for that:

(defun ido-eshell-comint-history ()
  "eshell & comint history with ido."
  (interactive)
  (if (or (member major-mode '(eshell-mode sql-interactive-mode))
          (derived-mode-p 'comint-mode))
     (let ((ring (if (eq major-mode 'eshell-mode)
                   eshell-history-ring
                   comint-input-ring)))
       (insert
        (ido-completing-read "History: "
                             (delete-dups
                              (ring-elements ring)))))
    (message "Unsupported mode")))

After evaluating the code, in eshell simply execute M-x ido-eshell-comint-history and magic will happen - you will get full eshell history managed by ido-mode. To make it more authentic, map it to C-c C-l, which is default sequence for completion in eshell.

Continue reading →

January 2, 2019

Embedding version string from Leiningen project

Frequently, inside my Clojure applications, I would put project version string picked from Leiningen project.clj file. This way, it would solve me these problems:

  1. User can easily report what application version was affected with some issue.
  2. Version number is updated only once.
  3. Leiningen lein change version leiningen.release/bump-version (automatic version number increase) works as well.

In the past, used this code:

Continue reading →

October 16, 2018

Multiple SSH host aliases

When I'm dealing with SSH connections using key pairs, usually I put this in my ~/.ssh/config:

Host <easy-to-remember-host>
Hostname <ip-address>
 User <user>
 IdentityFile ~/.ssh/id_rsa_host_key

Running:

Continue reading →