Add old posts
This commit is contained in:
parent
586030d970
commit
ce6d2a4d35
9 changed files with 440 additions and 0 deletions
34
clark_010.post
Normal file
34
clark_010.post
Normal file
|
@ -0,0 +1,34 @@
|
|||
;;;;;
|
||||
title: CLark 0.1.0
|
||||
tags: projects, clark, markam, common-lisp, lisp
|
||||
date: 2013-04-03 23:04
|
||||
format: md
|
||||
;;;;;
|
||||
|
||||
A few days ago I tagged
|
||||
[CLark 0.1.0](http://code.ryuslash.org/cgit.cgi/clark/tag/?id=0.1.0).
|
||||
|
||||
CLark is a Common Lisp rewrite of my
|
||||
[Markam](http://code.ryuslash.org/cgit.cgi/junk/markam/) project,
|
||||
which in turn was a Chicken Scheme rewrite of
|
||||
[linkwave](http://code.ryuslash.org/cgit.cgi/junk/linkwave/). With
|
||||
each rewrite I come a step closer to having the program that I need.
|
||||
Linkwave could only store bookmarks, Markam could also search through
|
||||
them and had a conkeror interface which allowed adding and searching
|
||||
through bookmarks. Now CLark expands upon this by allowing users to
|
||||
edit their bookmark's information, changing the tags, removing
|
||||
bookmarks, writing their own commands, an improved command-line
|
||||
interface and bookmark status checking (bookmarked or not). It also
|
||||
adds commands to conkeror for the data manipulation commands that are
|
||||
new (edit, set-tags, remove) and a mode-line indicator of bookmarked
|
||||
status.
|
||||
|
||||
For now it only targets [SBCL](http://sbcl.org/), but I'm not averse
|
||||
to including others.
|
||||
|
||||
The next big step should be adding a mcclim-based GUI for those crazy
|
||||
people who don't like to use the command line.
|
||||
|
||||
<!-- Local Variables: -->
|
||||
<!-- mode: markdown -->
|
||||
<!-- End: -->
|
33
dispass.el-features.post
Normal file
33
dispass.el-features.post
Normal file
|
@ -0,0 +1,33 @@
|
|||
;;;;;
|
||||
title: dispass.el features
|
||||
tags: projects, dispass, dispass.el
|
||||
date: 2013-01-20 17:06
|
||||
format: md
|
||||
;;;;;
|
||||
|
||||
Today I've added 3 new features to
|
||||
[dispass.el](http://ryuslash.org/projects/dispass.el.html):
|
||||
|
||||
- Add support for different algorithms.
|
||||
- Add support for different sequence numbers.
|
||||
- Add support for different labelfiles.
|
||||
|
||||
With these changes the functionality offered in
|
||||
[dispass.el](http://ryuslash.org/projects/dispass.el.html) should be
|
||||
on-par with the ones found in [DisPass](http://dispass.babab.nl),
|
||||
which is a nice milestone.
|
||||
|
||||
There is one little bug that we're both working on at the moment, if
|
||||
you have a label that is also a substring of one of your other labels
|
||||
it won't work in
|
||||
[dispass.el](http://ryuslash.org/projects/dispass.el.html), but we're
|
||||
working on fixing this case in [DisPass](http://dispass.babab.nl).
|
||||
|
||||
Now we wait untill [DisPass](http://dispass.babab.nl) gets another
|
||||
release and as of then we will try and keep up with both the stable
|
||||
releases of [DisPass](http://dispass.babab.nl) and the development
|
||||
version.
|
||||
|
||||
<!-- Local Variables: -->
|
||||
<!-- mode: markdown -->
|
||||
<!-- End: -->
|
85
filtering-org-tasks.post
Normal file
85
filtering-org-tasks.post
Normal file
|
@ -0,0 +1,85 @@
|
|||
;;;;;
|
||||
title: Filtering org tasks
|
||||
tags: tips, emacs, org-mode
|
||||
date: 2013-08-25 00:38
|
||||
format: md
|
||||
;;;;;
|
||||
|
||||
I want to be able to easily see a list of tasks that are relevant to
|
||||
the currently loaded desktop file. As I use `desktop.el` as a kind of
|
||||
project system, this means I only want the tasks for the project I'm
|
||||
currently working on.
|
||||
|
||||
First I wrote the `tagify` function, because `org-mode` tags can't
|
||||
contain `.` or `-` characters (among others I'm sure, but these are
|
||||
the only ones that have caused me any trouble so far). It's a simple
|
||||
string replacement:
|
||||
|
||||
``` emacs-lisp
|
||||
(defun tagify (str)
|
||||
"Remove dots, replace - with _ in STR."
|
||||
(replace-regexp-in-string
|
||||
"-" "_" (replace-regexp-in-string "\\." "" (downcase str))))
|
||||
```
|
||||
|
||||
Then I wrote a function to filter the task list by not showing
|
||||
anything that wasn't tagged with the name of the currently loaded
|
||||
desktop, unless it isn't tagged at all or no desktop has been loaded.
|
||||
And set this function to be the value of
|
||||
`org-agenda-before-sorting-filter-function`.
|
||||
|
||||
``` emacs-lisp
|
||||
(defun filter-by-desktop (entry)
|
||||
"Return ENTRY if it has no tags or a tag corresponding to the desktop."
|
||||
(require 'desktop)
|
||||
(let ((label (when desktop-dirname
|
||||
(tagify (file-name-base
|
||||
(directory-file-name
|
||||
(expand-file-name desktop-dirname))))))
|
||||
(tags (get-text-property 0 'tags entry)))
|
||||
(when (or (null desktop-dirname) (null tags) (member label tags))
|
||||
entry)))
|
||||
|
||||
(setq org-agenda-before-sorting-filter-function #'filter-by-desktop)
|
||||
```
|
||||
|
||||
This works fine. I keep untagged tasks in the list as well because
|
||||
they might be important at all times and I don't want them falling
|
||||
through the cracks. I also want a complete list if no desktop has been
|
||||
loaded so I can browse through my tasks and decide what I'm going to
|
||||
do next.
|
||||
|
||||
The downside of this solution is that I have to close my current
|
||||
project in order to see the whole list.
|
||||
|
||||
Then I discovered the `/` key in the agenda buffer. I can't believe I
|
||||
didn't notice this key before. Anyway, that changed my solution.
|
||||
|
||||
Instead of setting `org-agenda-before-sorting-filter-function` I add a
|
||||
hook to the `org-agenda-finalize-hook`. The `filter-by-desktop`
|
||||
function looks a little different now:
|
||||
|
||||
``` emacs-lisp
|
||||
(defun org-init-filter-by-desktop ()
|
||||
"Filter agenda by current label."
|
||||
(when desktop-dirname
|
||||
(let ((label (tagify (file-name-base
|
||||
(directory-file-name
|
||||
(expand-file-name desktop-dirname))))))
|
||||
(org-agenda-filter-apply (cons label nil) 'tag))))
|
||||
|
||||
(add-hook 'org-agenda-finalize-hook 'org-init-filter-by-desktop)
|
||||
```
|
||||
|
||||
I don't need to compare any tags now, and if I want to see my entire
|
||||
list of tasks I can easily just press `/ /`. Since it is easier to get
|
||||
back to the overview of my tasks it also doesn't bother me so much
|
||||
that this way any untagged tasks don't show up in the filtered buffer.
|
||||
|
||||
I haven't stopped using `/` since I discovered it. Filtering in this
|
||||
way is one of the things I like about `ibuffer` as well, now for
|
||||
`org-mode` it works excellently as well.
|
||||
|
||||
<!-- Local Variables: -->
|
||||
<!-- mode: markdown -->
|
||||
<!-- End: -->
|
74
highlight-vc-diffs.post
Normal file
74
highlight-vc-diffs.post
Normal file
|
@ -0,0 +1,74 @@
|
|||
;;;;;
|
||||
title: highlight VC diffs
|
||||
tags: tips, emacs, git, vc, diff
|
||||
date: 2013-01-25 02:20
|
||||
format: md
|
||||
;;;;;
|
||||
|
||||
Sometimes you come across these gems of packages that seem to fulfill
|
||||
a wish that you didn't even realise you had.
|
||||
|
||||
Today I came across
|
||||
[git-gutter](https://github.com/syohex/emacs-git-gutter) for Emacs and
|
||||
its companion
|
||||
[git-gutter-fringe](https://github.com/syohex/emacs-git-gutter-fringe),
|
||||
which are apparently based on an extension for Sumblime Text 2. These
|
||||
show the status of changes in a special "gutter" next to the fringe or
|
||||
in the fringe itself. This is very cool stuff.
|
||||
|
||||
To enable it I added the following code to my Emacs init file:
|
||||
|
||||
``` emacs-lisp
|
||||
(eval-after-load "git-gutter" '(load "git-gutter-fringe"))
|
||||
|
||||
(defun maybe-use-git-gutter ()
|
||||
"Run `git-gutter' if the current file is being tracked by git."
|
||||
(when (eq (vc-backend (buffer-file-name)) 'Git)
|
||||
(git-gutter)))
|
||||
|
||||
(add-hook 'after-save-hook 'maybe-use-git-gutter)
|
||||
(add-hook 'after-change-major-mode-hook 'maybe-use-git-gutter)
|
||||
(add-hook 'window-configuration-change-hook 'maybe-use-git-gutter)
|
||||
```
|
||||
|
||||
`git-gutter` was easily installed through MELPA, but I had to download
|
||||
`git-gutter-fringe` separately and use `package-install-file` to
|
||||
install that.
|
||||
|
||||
I had to load `git-gutter-fringe` manually because it didn't seem to
|
||||
have any autoloads defined, and I had to run it using these three
|
||||
hooks because the information seemed to disappear if I switched
|
||||
windows and came back, didn't automatically update after saving and
|
||||
didn't automatically show anything when first loading the file. This
|
||||
was all fine, since just calling the function updates the buffer it's
|
||||
easy to use this way.
|
||||
|
||||
Later, though, I stumbled upon
|
||||
[diff-hl](https://github.com/dgutov/diff-hl) by accident. I was
|
||||
looking for anything involving the fringe, which I think, for the most
|
||||
part, is underused.
|
||||
|
||||
It does pretty much the same thing, except that it does so at least
|
||||
for git, bazaar and mercurial (according to the readme). It also
|
||||
defines some commands for working with the blocks of changes, like
|
||||
navigating between them and reverting them. It uses the fringe by
|
||||
default, and doesn't require a separate package to be installed. And
|
||||
it's much easier to set up.
|
||||
|
||||
It can also be installed through MELPA, and afterwards it's just a
|
||||
line in our init file away:
|
||||
|
||||
``` emacs-lisp
|
||||
(global-diff-hl-mode)
|
||||
```
|
||||
|
||||
Of course if you don't want it enabled globally you can call
|
||||
`diff-hl-mode` from some hooks, but this way works fine for me.
|
||||
|
||||
It's funny how I had no idea these existed, didn't even think about
|
||||
needing/wanting this feature and then finding two of them in the same
|
||||
day.
|
||||
|
||||
<!-- Local Variables: -->
|
||||
<!-- mode: markdown -->
|
||||
<!-- End: -->
|
44
markam_v020.post
Normal file
44
markam_v020.post
Normal file
|
@ -0,0 +1,44 @@
|
|||
;;;;;
|
||||
title: Markam v0.2.0
|
||||
tags: projects, markam
|
||||
date: 2013-02-16 11:37
|
||||
format: md
|
||||
;;;;;
|
||||
|
||||
I've just pushed version 0.2.0 of my project
|
||||
[Markam](http://projects.ryuslash.org/markam/). It took longer than I
|
||||
thought it would. Since storing was still all I wanted to do I had no
|
||||
rush to add anything else. Until now.
|
||||
|
||||
Changes include:
|
||||
|
||||
- Add `install`, `uninstall` and `install-strip` targets to the
|
||||
Makefile, this should make installing easier.
|
||||
|
||||
- Add simple tag/title searching. Looks through bookmarks for any that
|
||||
have been tagged with the given string, or that have it somewhere in
|
||||
their title.
|
||||
|
||||
- Add a `--script` switch, which changes output for both the default
|
||||
and search behavior. When this switch is passed to markam it outputs
|
||||
the name, description and url of each bookmark, where each bookmark
|
||||
is separated by `C-^`
|
||||
([Record separator](http://en.wikipedia.org/wiki/Record_separator#Field_separators))
|
||||
and each field by `C-_`
|
||||
([Unit separator](http://en.wikipedia.org/wiki/Unit_separator#Field_separators)).
|
||||
This should help in building tools around it by making parsing
|
||||
somewhat easier. The bundled [Conkeror](http://conkeror.org)
|
||||
interface uses it.
|
||||
|
||||
- Update the [Conkeror](http://conkeror.org) interface:
|
||||
|
||||
- Add the commands `markam-find-url` and
|
||||
`markam-find-url-new-buffer`. These call markam with a possible
|
||||
search string and add them as completion candidates, for easy
|
||||
searching and opening of your bookmarks. `markam-find-url` uses
|
||||
the current buffer and `markam-find-url-new-buffer` opens the url
|
||||
in a new buffer.
|
||||
|
||||
<!-- Local Variables: -->
|
||||
<!-- mode: markdown -->
|
||||
<!-- End: -->
|
17
new-tag-pages.post
Normal file
17
new-tag-pages.post
Normal file
|
@ -0,0 +1,17 @@
|
|||
;;;;;
|
||||
title: New tag pages
|
||||
tags: meta, tekuti, dispass.el
|
||||
date: 2013-04-03 03:33
|
||||
format: md
|
||||
;;;;;
|
||||
|
||||
I've changed my tekuti instance to have tag pages that look more like
|
||||
the index page. I did this so that I can use tag pages as news pages
|
||||
for my various projects. You may have a look at the
|
||||
[dispass.el](http://projects.ryuslash.org/dispass.el) project site to
|
||||
see the new "Read News" link, which will take you to the
|
||||
[dispass.el tag page](http://blog.ryuslash.org/tags/dispass.el).
|
||||
|
||||
<!-- Local Variables: -->
|
||||
<!-- mode: markdown -->
|
||||
<!-- End: -->
|
121
notstumpwm.post
Normal file
121
notstumpwm.post
Normal file
|
@ -0,0 +1,121 @@
|
|||
;;;;;
|
||||
title: Notstumpwm
|
||||
tags: experiments, notion, wm, lua, config, stumpwm, lisp, archlinux, exherbo
|
||||
date: 2013-05-24 00:10
|
||||
format: md
|
||||
;;;;;
|
||||
|
||||
I have just returned from an excursion into the land of
|
||||
[exherbo](http://exherbo.org/), which is an awesome source-based
|
||||
distro, and I found that while I was gone, something changed that made
|
||||
[stumpwm](http://www.nongnu.org/stumpwm/) cause a segmentation fault
|
||||
in X11 a few seconds after starting up.
|
||||
|
||||
I have tried everything I can think of to get it running again, but
|
||||
alas, to no avail. So I started looking at alternatives again. Feeling
|
||||
a little crazy I decided to give [notion](http://notion.sf.net)
|
||||
another try. And it fits strangely well.
|
||||
|
||||
It's configured/extended in lua, which I'm not particularly fond of,
|
||||
and it has a (in my opinion) crazy default configuration. **But** it
|
||||
also allows Emacs-like key combinations out-of-the-box, which is a
|
||||
very big plus in my book. So the quest to bring it closer to my
|
||||
stumpwm setup has begun.
|
||||
|
||||
## Window layout
|
||||
|
||||
One of the nicest additions to my stumpwm configuration I made in the
|
||||
last few weeks was a loaded window configuration which put my Emacs
|
||||
frames in a big chunk of my left monitor, my terminals on my left
|
||||
monitor with just enough space for 80 columns and my web browser
|
||||
filling my right screen. I had also set-up some rules to always place
|
||||
them in the correct spots.
|
||||
|
||||
I have not yet tried to automatically place the windows in the right
|
||||
spots, but I do have the proportions right. I just had to delete the
|
||||
right frames and resize the one for terminals and, by default, notion
|
||||
remembers this set-up and automatically restores it when I log in.
|
||||
|
||||
I will look at creating a special layout for this so I don't have to
|
||||
worry about (accidentally) changing things.
|
||||
|
||||
## run-or-raise
|
||||
|
||||
I found this interesting
|
||||
[page](http://www.xsteve.at/prg/ion/ion3_functions_xsteve.lua) about
|
||||
`run-or-raise`-like functionality for Ion3, which notion is a fork of.
|
||||
This is a little outdated, though, since notion has changed
|
||||
(apparently) the workings of some functions and lua 5.2 introduced the
|
||||
goto keyword, so I had to change it to this:
|
||||
|
||||
```
|
||||
function oni_match_class(class)
|
||||
local result = {}
|
||||
ioncore.clientwin_i(
|
||||
function (win)
|
||||
if class `` win:get_ident().class then
|
||||
table.insert(result, win)
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
)
|
||||
return result
|
||||
end
|
||||
|
||||
function xsteve_run_byclass(prog, class)
|
||||
local win = oni_match_class(class)[1]
|
||||
if win then
|
||||
win:goto_()
|
||||
else
|
||||
ioncore.exec(prog)
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
There is no function to get a list of all the client windows, only a
|
||||
function to iterate over them. For the moment I am only interested in
|
||||
finding the first window with class CLASS, so I return `false` when a
|
||||
match is found, this stops the iteration process. I also had to use
|
||||
the `WRegion.goto_` function, instead of `WRegion.goto` because of the
|
||||
mentioned change in lua 5.2, but they are the same.
|
||||
|
||||
I then only have to bind it:
|
||||
|
||||
```
|
||||
defbindings("WScreen", {
|
||||
-- ...
|
||||
submap("Control+Z", {
|
||||
-- ...
|
||||
kpress("E", "xsteve_run_byclass('emacsclient -ca emacs', 'Emacs')"),
|
||||
kpress("W", "xsteve_run_byclass('conkeror', 'Conkeror')"),
|
||||
kpress("C", "xsteve_run_byclass('urxvt', 'URxvt')"),
|
||||
}),
|
||||
})
|
||||
```
|
||||
|
||||
## Quoting C-z
|
||||
|
||||
One of the coolest things about using a prefix in stumpwm that I have
|
||||
been able to find in precious few other solutions is the ability to
|
||||
send the prefix key to the applications you use, so you don't entirely
|
||||
miss its functionality. In stumpwm this is easy, but in notion its a
|
||||
little more work:
|
||||
|
||||
```
|
||||
defbindings("WClientWin", {
|
||||
-- ...
|
||||
submap("Control+Z", {
|
||||
-- ...
|
||||
kpress("Q", "WClientWin.quote_next(_)"),
|
||||
}),
|
||||
})
|
||||
```
|
||||
|
||||
This means that I have to type `C-z q C-z` to send the `C-z` key to,
|
||||
for instance, Emacs. That a few more keys than I was used to in
|
||||
stumpwm, but at least it's possible.
|
||||
|
||||
<!-- Local Variables: -->
|
||||
<!-- mode: markdown -->
|
||||
<!-- End: -->
|
32
org-examples-on-github.post
Normal file
32
org-examples-on-github.post
Normal file
|
@ -0,0 +1,32 @@
|
|||
;;;;;
|
||||
title: Org examples on github
|
||||
tags: github, org-mode, emacs
|
||||
date: 2013-01-20 14:09
|
||||
format: md
|
||||
;;;;;
|
||||
|
||||
[github](http://github.com) has an org-mode parser for their README
|
||||
files, but I always thought it didn't handle `#+BEGIN_SRC` and
|
||||
`#+BEGIN_EXAMPLE` style blocks. And I'm not wrong, but it does handle
|
||||
`:` blocks.
|
||||
|
||||
So this won't work:
|
||||
|
||||
```
|
||||
#+BEGIN_EXAMPLE
|
||||
This is an example
|
||||
#+END_EXAMPLE
|
||||
```
|
||||
|
||||
But this will:
|
||||
|
||||
```
|
||||
: This is an example
|
||||
```
|
||||
|
||||
That was a nice surprise for me, because I prefer org-mode for almost
|
||||
all of my documents.
|
||||
|
||||
<!-- Local Variables: -->
|
||||
<!-- mode: markdown -->
|
||||
<!-- End: -->
|
Loading…
Reference in a new issue