Content AND Presentation

2022-12-05 A simple function to create abbreviations

A few days ago I wanted to write to a colleague about accessibility – or, as it is often called, a11y. As you probably know, the 11 comes from the fact that there are 11 letter beteen “a” and “y” in the word “accessibility”. Of course, I didn’t want to count the letters manually – I just marked the word, pressed M-= (count-words-region) and subtracted 2 from the result. Then it occurred to me that it is Emacs who should be doing things like that, not me. Also, I wanted to know how much time I’d need to write a command to make a word into an abbreviation (or a10n;-)). And here it is, written in about 5 minutes:

(defun make-letter-count-abbreviation ()
  "Convert the word before point to an a10n."
    (let* ((begin (progn (backward-word) (point)))
           (end (progn (forward-word) (point)))
           (count (- end begin 2)))
      (delete-region (1+ begin) (1- end))
      (insert (format "%s" count)))))

And that’s pretty much it for today. Happy Elisp hacking!

CategoryEnglish, CategoryBlog, CategoryEmacs

Comments on this page

2022-11-26 Extracting Youtube subtitles in Emacs

A few days ago I read about an amazing package. Like the OP, I very much dislike watching videos with lectures – text is much, much better way to communicate. (In fact, when I was a student, I preferred to skip lectures and learn from my colleagues’ notes instead. It was much more efficient.) I decided that I really need to try out youtube-sub-extractor.el.

It turned out that it’s very easy to do so. I installed the package and immediately tried it out. It turns out that it’s fairly simple to use – just call youtube-sub-extractor-extract-subs, give it a Youtube URL, and you get a buffer with the subtitles. From that buffer you can call two functions – youtube-sub-extractor-copy-ts-link to get a link with a timestamp to that particular moment in the video (kind of like what I did a few weeks ago), bound to RET, and youtube-sub-extractor-browse-ts-link to open the video at the corresponding moment, bound to C-c C-o. What’s especially nice is that the latter function uses browse-url under the hood, so it opens mpv from my Emacs.

Now this is definitely pretty cool, but there is one thing I’d like to add here. As I mentioned before, I sometimes have a YouTube link in my buffer, and killing it only to be able to yank it after I call youtube-sub-extractor-extract-subs is a nuisance. This is Emacs, so fixing this is a matter of seconds:

(require 'thingatpt)
(defun youtube-sub-extractor-extract-subs-at-point ()
  "Extract subtitles from a YouTube link at point."
  (youtube-sub-extractor-extract-subs (thing-at-point-url-at-point)))

And that’s it for today!

CategoryEnglish, CategoryBlog, CategoryEmacs

Comments on this page

2022-11-19 Streamlining my workflow with Magit and BitBucket

We use BitBucket at our company, which is some source of frustration for us. One of the issues we have with BitBucket is that it seems to lack a decent CLI tool. This means that in order to e.g. create a pull request, you go to the website, click a few times and only then confirm that a PR is really what you want.

Well, after some time I learned that it’s not that bad. When you git push your changes, Git (on the command line) responds with the URL you need to go to create a pull request out of the branch you just pushed. (This is most probably achieved via post-receive or some other Git hook.) Nice.

Well, of course I don’t use Git from the command line – I use Magit. So naturally I wanted Emacs to extract that information for me and open the URL in the browser. It turns out that it was easier than I thought. Using the famous Emacs self-documenting capabilities, I found two commands: magit-section-backward, and, most importantly, magit-process-buffer. (Go check their docstrings to learn what they do, or perhaps confirm your guess.) So, I hacked up a pretty simple function to grab the data from the Magit process buffer and open the PR page in my browser.

(defun magit-open-pull-request-pr ()
  "Open the pull request URL if applicable."
    (set-buffer (magit-process-buffer t))
    (goto-char (point-max))
        (search-backward-regexp "remote: \\(To create a merge\\|Create pull\\) request" nil t)
      (forward-line 1)
      (re-search-forward "remote: +" (line-end-position) t)

As a bonus, I modified the first regex in the code above so that the same command works for GitLab (which we also use for a few projects).

I feel like a broken record, but once again Emacs turns out to be an extremely user-friendly environment (provided that the user is a tinkerer kind, of course).

CategoryEnglish, CategoryBlog, CategoryEmacs

Comments on this page


CategoryEnglish, CategoryBlog