summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.Xdefaults2
-rw-r--r--.config/awesome/ext.lua67
-rw-r--r--.config/awesome/oni.lua73
-rw-r--r--.config/awesome/rc.lua100
-rw-r--r--.config/awesome/themes/custom/theme.lua2
-rw-r--r--.conkerorrc/init.js91
-rw-r--r--.emacs.d/.gitignore15
-rw-r--r--.emacs.d/gnus.el9
-rw-r--r--.emacs.d/init.el28
-rw-r--r--.emacs.d/site-lisp/eltuki.el198
-rw-r--r--.emacs.d/site-lisp/quick-edit-mode.el41
-rw-r--r--.emacs.d/snippets/html-mode/for8
-rw-r--r--.emacs.d/snippets/html-mode/generic-block8
-rw-r--r--.emacs.d/snippets/org-mode/codeblock7
-rw-r--r--.emacs.d/snippets/org-mode/heading9
-rw-r--r--.emacs.d/themes/new-theme.el7
-rw-r--r--.stumpwmrc8
-rw-r--r--.xinitrc15
18 files changed, 574 insertions, 114 deletions
diff --git a/.Xdefaults b/.Xdefaults
index 76beea8..4f77386 100644
--- a/.Xdefaults
+++ b/.Xdefaults
@@ -13,7 +13,7 @@ urxvt.visualBell: true
urxvt.perl-lib: /usr/lib/urxvt/perl/
urxvt.perl-ext-common: default,matcher,searchable-scrollback
-urxvt.urlLauncher: firefox
+urxvt.urlLauncher: conkeror
urxvt.matcher.button: 1
urxvt.font: xft:Monaco:weight=medium:pixelsize=18
diff --git a/.config/awesome/ext.lua b/.config/awesome/ext.lua
new file mode 100644
index 0000000..d564867
--- /dev/null
+++ b/.config/awesome/ext.lua
@@ -0,0 +1,67 @@
+local client=client
+local awful=awful
+local pairs=pairs
+local table=table
+
+module("ext")
+
+-- Returns true if all pairs in table1 are present in table2
+function match(table1, table2)
+ for k, v in pairs(table1) do
+ if table[k] ~= v and not table2[k]:find(v) then
+ return false
+ end
+ end
+
+ return true
+end
+
+--- Spawns cmd if no client can be found matching properties
+-- If such a client can be found, pop to first tag where it is
+-- visible, and give it focus
+function run_or_raise(cmd, properties)
+ local clients = client.get()
+ local focused = awful.client.next(0)
+ local findex = 0
+ local matched_clients = { }
+ local n = 0
+
+ for i, c in pairs(clients) do
+ -- make an array of matched clients
+ if match(properties, c) then
+ n = n + 1
+ matched_clients[n] = c
+
+ if n == focused then
+ findex = n
+ end
+ end
+ end
+
+ if n > 0 then
+ local c = matched_clients[1]
+
+ -- if the focused window matched switch focus to next in list
+ if 0 < findex and findex < n then
+ c = matched_clients[findex + 1]
+ end
+
+ local ctags = c:tags()
+
+ if table.getn(ctags) == 0 then
+ -- ctags is empty, show client on current tag
+ local curtag = awful.tag.selected()
+ awful.client.movetotag(curtag, c)
+ else
+ -- Otherwise, pop to first tag client is visible on
+ awful.tag.viewonly(ctags[1])
+ end
+
+ -- And then focus the client
+ client.focus = c
+ c:raise()
+ awful.screen.focus(c.screen)
+ return
+ end
+ awful.util.spawn(cmd)
+end
diff --git a/.config/awesome/oni.lua b/.config/awesome/oni.lua
new file mode 100644
index 0000000..7cc5df1
--- /dev/null
+++ b/.config/awesome/oni.lua
@@ -0,0 +1,73 @@
+local awful = awful
+local beautiful = beautiful
+local client = client
+local ext = require("ext")
+local lfs = require("lfs")
+local pairs = pairs
+local string = string
+local table = table
+local widget = widget
+
+module("oni")
+
+local maildirfmt = "/home/slash/documents/mail/%s/inbox/new/"
+
+function mailcount(account)
+ local i = 0
+ local dir = string.format(maildirfmt, account)
+
+ for file in lfs.dir(dir) do
+ if file ~= "." and file ~= ".." then
+ i = i + 1
+ end
+ end
+
+ return i
+end
+
+local function showmail(name)
+ awful.util.spawn("emacsclient -e '(oni:view-mail \"" .. name .. "\")'")
+end
+
+function mailcount_widgets(label, account, name)
+ widgets = {}
+ widgets.label = widget({ type = "textbox" })
+ widgets.label.text = string.format(" %s: ", label)
+ widgets.count = widget({ type = "textbox" })
+ widgets.count.text = string.format(" %d ", mailcount(account))
+ widgets.count.bg = beautiful.bg_focus
+ widgets.count:buttons(
+ awful.util.table.join(
+ awful.button({ }, 1, function (c) showmail(name) end)))
+
+ return widgets
+end
+
+function focus_raise(direction)
+ awful.client.focus.bydirection(direction)
+ if client.focus then client.focus:raise() end
+end
+
+function ror_browser()
+ ext.run_or_raise("conkeror", { class = "Conkeror" })
+end
+
+function ror_editor()
+ ext.run_or_raise("emacsclient -c -a emacs", { class = "Emacs" })
+end
+
+function ror_term()
+ ext.run_or_raise("urxvt", { class = "URxvt" })
+end
+
+function run_browser()
+ awful.util.spawn("conkeror")
+end
+
+function run_editor()
+ awful.util.spawn("emacsclient -c -a emacs")
+end
+
+function run_term()
+ awful.util.spawn("urxvt")
+end
diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua
index 38e9a72..24ff5fe 100644
--- a/.config/awesome/rc.lua
+++ b/.config/awesome/rc.lua
@@ -4,10 +4,9 @@ require("awful.rules")
require("beautiful")
require("bowl")
require("keychain")
-require("lfs")
require("naughty")
-
-oni = { } -- Container for custom functions.
+require("ext")
+require("oni")
--- Error handling
-- Check if awesome encountered an error during startup and fell back to
@@ -33,72 +32,6 @@ do
end)
end
---- Functions
-function oni.focus_raise(direction)
- awful.client.focus.bydirection(direction)
- if client.focus then client.focus:raise() end
-end
-
--- Returns true if all pairs in table1 are present in table2
-function oni.match(table1, table2)
- for k, v in pairs(table1) do
- if table[k] ~= v and not table2[k]:find(v) then
- return false
- end
- end
-
- return true
-end
-
---- Spawns cmd if no client can be found matching properties
--- If such a client can be found, pop to first tag where it is
--- visible, and give it focus
-function oni.run_or_raise(cmd, properties)
- local clients = client.get()
- local focused = awful.client.next(0)
- local findex = 0
- local matched_clients = { }
- local n = 0
-
- for i, c in pairs(clients) do
- -- make an array of matched clients
- if oni.match(properties, c) then
- n = n + 1
- matched_clients[n] = c
-
- if n == focused then
- findex = n
- end
- end
- end
-
- if n > 0 then
- local c = matched_clients[1]
-
- -- if the focused window matched switch focus to next in list
- if 0 < findex and findex < n then
- c = matched_clients[findex + 1]
- end
-
- local ctags = c:tags()
-
- if table.getn(ctags) == 0 then
- -- ctags is empty, show client on current tag
- local curtag = awful.tag.selected()
- awful.client.movetotag(curtag, c)
- else
- -- Otherwise, pop to first tag client is visible on
- awful.tag.viewonly(ctags[1])
- end
-
- -- And then focus the client
- client.focus = c
- c:raise()
- awful.screen.focus(c.screen)
- return
- end
- awful.util.spawn(cmd)
-end
-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
beautiful.init("/home/slash/.config/awesome/themes/custom/theme.lua")
@@ -282,28 +215,19 @@ globalkeys = awful.util.table.join(
sub({ }, "b", function () oni.focus_raise("left") end),
sub({ }, "n", function () oni.focus_raise("down") end),
sub({ }, "p", function () oni.focus_raise("up") end),
- sub({ }, "e",
- function () oni.run_or_raise("emacsclient -c -a emacs",
- { class = "Emacs" }) end),
- sub({ "Shift", }, "e",
- function () awful.util.spawn("emacsclient -c -a emacs") end),
- sub({ }, "c",
- function () oni.run_or_raise("urxvt",
- { class = "URxvt" }) end),
- sub({ "Shift", }, "c",
- function () awful.util.spawn("urxvt") end),
- sub({ }, "w",
- function () oni.run_or_raise("conkeror",
- { class = "Conkeror" }) end),
- sub({ "Shift", }, "w",
- function () awful.util.spawn("conkeror") end) }),
+ sub({ }, "c", oni.ror_term),
+ sub({ "Shift", }, "c", oni.run_term),
+ sub({ }, "e", oni.ror_editor),
+ sub({ "Shift", }, "e", oni.run_editor),
+ sub({ }, "w", oni.ror_browser),
+ sub({ "Shift", }, "w", oni.run_browser) }),
awful.key({ "Control", "Mod1" }, "l",
function () awful.util.spawn("i3lock -c 000000") end),
- awful.key({ modkey, }, "Left", awful.tag.viewprev ),
- awful.key({ modkey, }, "Right", awful.tag.viewnext ),
- awful.key({ modkey, }, "Escape", awful.tag.history.restore),
+ awful.key({ modkey, }, "Left", awful.tag.viewprev ),
+ awful.key({ modkey, }, "Right", awful.tag.viewnext ),
+ awful.key({ modkey, }, "Escape", awful.tag.history.restore),
- awful.key({ modkey, }, "w", function () mymainmenu:show({keygrabber=true}) end),
+ -- awful.key({ modkey, }, "w", function () mymainmenu:show({keygrabber=true}) end),
-- Layout manipulation
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
diff --git a/.config/awesome/themes/custom/theme.lua b/.config/awesome/themes/custom/theme.lua
index 3cdb9ca..c65edc8 100644
--- a/.config/awesome/themes/custom/theme.lua
+++ b/.config/awesome/themes/custom/theme.lua
@@ -74,7 +74,7 @@ theme.titlebar_maximized_button_normal_active = "/home/slash/.config/awesome/the
theme.titlebar_maximized_button_focus_active = "/home/slash/.config/awesome/themes/custom/titlebar/maximized_focus_active.png"
-- You can use your own command to set your wallpaper
-theme.wallpaper_cmd = { "awsetbg -u hsetroot /home/slash/pictures/wallpapers/3600x1080/wallpaper-1085607.jpg" }
+theme.wallpaper_cmd = { "awsetbg -u feh -c /usr/share/archlinux/wallpaper/archlinux-simplyblack.png" }
-- You can use your own layout icons like this:
theme.layout_fairh = "/home/slash/.config/awesome/themes/custom/layouts/fairhw.png"
diff --git a/.conkerorrc/init.js b/.conkerorrc/init.js
index d8305af..3d247ba 100644
--- a/.conkerorrc/init.js
+++ b/.conkerorrc/init.js
@@ -131,6 +131,9 @@ define_webjump("google",
define_webjump("github",
"https://github.com/search?q=%s&type=Everything&repo=&langOverride=&start_value=1",
$alternative="https://github.com");
+define_webjump("mdn",
+ "https://developer.mozilla.org/en-US/search?q=%s",
+ $alternative="https://developer.mozilla.org/");
// Archlinux
define_webjump("arch/wiki",
"https://wiki.archlinux.org/index.php?search=%s",
@@ -164,3 +167,91 @@ remove_hook("download_added_hook", open_download_buffer_automatically);
hints_minibuffer_annotation_mode(true);
theme_load("naquadah");
+
+var gh_url = "http://github.com/";
+function read_url_github_ad_command_handler(input)
+{
+ var m = /^gh\s+@(\S+)(?:\s+((?:un)?follow))?/.exec(input);
+ if (m) {
+ if (m[2])
+ return gh_url + "users/follow?target=";
+ return gh_url + m[1];
+ }
+
+ return null;
+}
+
+function read_url_github_my_command_handler(input)
+{
+ var m = /^gh\s+my\s+(dashboard|issues|notifications|profile|pulls|stars)/.exec(input);
+
+ if (m) {
+ switch (m[1]) {
+ case "dashboard":
+ case "notifications":
+ case "stars":
+ return gh_url + m[1];
+ case "issues":
+ case "pulls":
+ return gh_url + "dashboard/" + m[1];
+ case "profile":
+ return gh_url + "settings/" + m[1];
+ }
+ }
+
+ return null;
+}
+
+function read_url_github_repo_command_handler(input)
+{
+ var m = /^gh\s+(\S+\/\S+)(?:\s+(\#\d+|\@\S+|issues|pulls|wiki|graphs|network|admin)(?:\s+(\#\d+|new))?)?$/.exec(input);
+
+ if (m) {
+ repo_url = gh_url + m[1] + "/";
+
+ switch (m[2]) {
+ case "issues":
+ issues_url = repo_url + m[2] + "/";
+
+ if (m[3]) {
+ if (m[3][0] == '#')
+ return issues_url + m[3].substring(1);
+ else if (m[3] == "new")
+ return issues_url + m[3];
+ else
+ break;
+ }
+
+ return issues_url;
+ case "pulls":
+ case "wiki":
+ case "graphs":
+ case "network":
+ case "admin":
+ return repo_url + m[2];
+ default:
+ // Still need watch and unwatch
+ if (m[2]) {
+ if (m[2][0] == '#')
+ return repo_url + "issues/" + m[2].substring(1);
+ else if (m[2][0] == '@')
+ return repo_url + "tree/" + m[2].substring(1);
+ else
+ break;
+ }
+
+ return repo_url;
+ }
+ }
+
+ return null;
+}
+
+function read_url_github_command_handler(input)
+{
+ return read_url_github_ad_command_handler(input)
+ || read_url_github_my_command_handler(input)
+ || read_url_github_repo_command_handler(input);
+}
+
+read_url_handler_list = [read_url_github_command_handler];
diff --git a/.emacs.d/.gitignore b/.emacs.d/.gitignore
new file mode 100644
index 0000000..2fa1670
--- /dev/null
+++ b/.emacs.d/.gitignore
@@ -0,0 +1,15 @@
+tramp
+elpa
+bookmarks
+abbrev_defs
+custom.el
+*.elc
+ac-comphist.dat
+auto-save-list/
+url/
+packages/
+newsticker/
+templates/
+rinit.*
+!rinit.org
+history
diff --git a/.emacs.d/gnus.el b/.emacs.d/gnus.el
index 1bf988a..503aa1d 100644
--- a/.emacs.d/gnus.el
+++ b/.emacs.d/gnus.el
@@ -1,4 +1,3 @@
-;; -*- eval: (git-auto-commit-mode 1) -*-
(setq gnus-select-method '(nntp "news.eternal-september.org"))
(setq gnus-secondary-select-methods
'((nnmaildir "gmail"
@@ -64,7 +63,7 @@
(add-hook 'gnus-group-mode-hook '(lambda () (linum-mode -1)))
;-----[ BBDB ]--------------------------------------------------------
-(require 'bbdb)
-(bbdb-initialize 'gnus 'message)
-(bbdb-insinuate-gnus)
-(setq bbdb-north-american-phone-numbers-p nil)
+;; (require 'bbdb)
+;; (bbdb-initialize 'gnus 'message)
+;; (bbdb-insinuate-gnus)
+;; (setq bbdb-north-american-phone-numbers-p nil)
diff --git a/.emacs.d/init.el b/.emacs.d/init.el
index 75c52e7..faf5ff5 100644
--- a/.emacs.d/init.el
+++ b/.emacs.d/init.el
@@ -245,6 +245,7 @@ DOT are intentionally being skipped."
(defun oni:html-mode-func ()
"Function for `html-mode-hook'."
+ (yas-minor-mode)
(fci-mode))
(defun oni:indent-shift-left (start end &optional count)
@@ -420,6 +421,10 @@ code. Found at http://xahlee.org/emacs/elisp_parse_time.html"
(end-of-line)))
(end-of-line))))
+;; (defun oni:mu4e-view-mode-func ()
+;; "Function for `mu4e-view-mode-hook'."
+;; (longlines-mode))
+
(defun oni:myepisodes-formatter (plist)
"Format RSS items from MyEpisodes as org tasks.
PLIST contains all the pertinent information."
@@ -449,7 +454,8 @@ When dealing with braces, add another line and indent that too."
(defun oni:org-mode-func ()
"Function for `org-mode-hook'."
(flyspell-mode)
- (auto-fill-mode))
+ (auto-fill-mode)
+ (yas-minor-mode))
(defun oni:php-mode-func ()
"Function for `php-mode-hook'."
@@ -809,6 +815,9 @@ for easy selection."
(setq eshell-prompt-regexp "^[#$]> ")
(setq fci-rule-color "darkred")
(setq flymake-gui-warnings-enabled nil)
+(setq flymake-info-line-regexp
+ (eval-when-compile
+ (regexp-opt '("Invalid name"))))
(setq flymake-log-file-name (expand-file-name "~/.emacs.d/flymake.log"))
(setq flymake-log-level 0)
(setq flymake-warn-line-regexp
@@ -816,7 +825,9 @@ for easy selection."
(regexp-opt '("warning"
"Warning"
"Missing docstring"
- "String statement has no effect"))))
+ "String statement has no effect"
+ "No value passed for parameter"
+ "imported but unused"))))
(setq frame-title-format '(:eval (concat "emacs: " (buffer-name))))
(setq geiser-repl-history-filename "~/.emacs.d/geiser-history")
(setq gtags-auto-update t)
@@ -845,6 +856,7 @@ for easy selection."
(setq mail-header-separator "")
(setq message-log-max 1000)
(setq message-send-mail-function 'message-send-mail-with-sendmail)
+(setq mode-line-position nil)
(setq mu4e-headers-date-format "%d-%m %H:%M")
(setq mu4e-headers-fields '((:date . 11)
(:flags . 6)
@@ -899,7 +911,7 @@ for easy selection."
(setq org-feed-alist
'(("MyEpisodes"
"http://www.myepisodes.com/rss.php?feed=mylist&uid=Slash&pwdmd5=04028968e1f0b7ee678b748a4320ac17"
- "~/documents/org/org" "MyEpisodes"
+ "~/documents/org/tasks" "MyEpisodes"
:formatter oni:myepisodes-formatter)))
(setq org-hide-emphasis-markers t)
(setq org-outline-path-complete-in-steps t)
@@ -928,6 +940,7 @@ for easy selection."
("marmalade" . "http://marmalade-repo.org/packages/")))
(setq package-load-list '((htmlize "1.39")
(lua-mode "20111107")
+ (python "0.24.2")
all))
(setq php-function-call-face 'font-lock-function-name-face)
(setq php-mode-force-pear t)
@@ -982,6 +995,7 @@ for easy selection."
(add-hook 'magit-log-edit-mode-hook 'oni:magit-log-edit-mode-func)
(add-hook 'markdown-mode-hook 'oni:markdown-mode-func)
(add-hook 'message-mode-hook 'oni:message-mode-func)
+;; (add-hook 'mu4e-view-mode-hook 'oni:mu4e-view-mode-func)
(add-hook 'org-mode-hook 'oni:org-mode-func)
(add-hook 'php-mode-hook 'oni:php-mode-func)
(add-hook 'prog-mode-hook 'oni:prog-mode-func)
@@ -1034,7 +1048,7 @@ for easy selection."
(add-to-list 'auto-mode-alist '("\\.jl$" . sawfish-mode))
(add-to-list 'auto-mode-alist '("\\.js\\(on\\)?$" . js2-mode))
-(add-to-list 'auto-mode-alist '("\\.m\\(ark\\)?do?wn$" . markdown-mode))
+(add-to-list 'auto-mode-alist '("\\.m\\(ark\\)?d\\(?:o?wn\\)?$" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.php[345]?$" . php-mode))
(add-to-list 'auto-mode-alist '("\\.po\\'\\|\\.po\\." . po-mode))
(add-to-list 'auto-mode-alist '("\\.tpl$" . html-mode))
@@ -1051,6 +1065,9 @@ for easy selection."
(add-to-list 'display-buffer-alist
'("^\\*.*\\*$" . ((bw-display-in-bottom-window . nil))))
+(delete " " mode-line-format)
+(delete " " mode-line-format)
+
(unless (oni:required-packages-installed-p)
(message "%s" "Refreshing package database...")
(package-refresh-contents)
@@ -1065,9 +1082,10 @@ for easy selection."
(scroll-bar-mode -1)
(tool-bar-mode -1)
(tooltip-mode -1)
+(line-number-mode -1)
+(column-number-mode -1)
(auto-insert-mode)
-(column-number-mode)
(electric-indent-mode)
(electric-pair-mode)
(ido-mode)
diff --git a/.emacs.d/site-lisp/eltuki.el b/.emacs.d/site-lisp/eltuki.el
new file mode 100644
index 0000000..4815108
--- /dev/null
+++ b/.emacs.d/site-lisp/eltuki.el
@@ -0,0 +1,198 @@
+;;; eltuki.el --- Tekuti functions
+
+;; Copyright (C) 2012 Tom Willemsen
+
+;; Author: Tom Willemsen <slash@drd>
+;; Keywords: convenience
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Tekuti functions.
+
+;;; Code:
+
+(require 'org)
+
+(defgroup eltuki
+ nil
+ "tekuti functions in Emacs."
+ :group 'external)
+
+(defcustom eltuki-blog-dir "~/blog"
+ "Plain blog post directory, not the git repository."
+ :group 'eltuki
+ :type 'string)
+
+(defcustom eltuki-default-status "publish"
+ "Default status to use when status is unknown."
+ :group 'eltuki
+ :type 'string)
+
+(defcustom eltuki-default-comment-status "open"
+ "Default status for comments."
+ :group 'eltuki
+ :type 'string)
+
+(defun eltuki-new-post ()
+ (interactive)
+ (switch-to-buffer (get-buffer-create "*eltuki*"))
+ (org-mode))
+
+(defun eltuki-get-title ()
+ (save-excursion
+ (goto-char (point-min))
+ (if (re-search-forward "^#\\+TITLE: \\(.*\\)$" nil t)
+ (buffer-substring-no-properties
+ (match-beginning 1) (match-end 1))
+ (error "Post has no title."))))
+
+(defun eltuki-set-title (title)
+ (interactive "MTitle: ")
+ (setq title (concat " " title))
+ (save-excursion
+ (goto-char (point-min))
+ (if (re-search-forward "^#\\+TITLE:\\(.*\\)$" nil t)
+ (replace-match title t t nil 1)
+ (insert "#+TITLE:" title "\n")
+ (unless (= (char-after) ?\n)
+ (insert-char ?\n)))))
+
+(defun eltuki-get-timestamp ()
+ (save-excursion
+ (goto-char (point-min))
+ (if (re-search-forward "^#\\+TIMESTAMP: \\([[:digit:]]+\\)$" nil t)
+ (match-string 1)
+ (format-time-string "%s"))))
+
+(defun eltuki-set-timestamp ()
+ (interactive)
+ (save-excursion
+ (goto-char (point-min))
+ (let ((newtime (format-time-string " %s")))
+ (if (re-search-forward "^#\\+TIMESTAMP:\\(.*\\)$" nil t)
+ (replace-match newtime nil t nil 1)
+ (when (search-forward "\n\n" nil t)
+ (backward-char))
+ (insert "#+TIMESTAMP:" newtime "\n")))))
+
+(defun eltuki-get-tags ()
+ (save-excursion
+ (goto-char (point-min))
+ (when (re-search-forward "^#\\+TAGS: \\(.*\\)$" nil t)
+ (buffer-substring-no-properties
+ (match-beginning 1) (match-end 1)))))
+
+(defun eltuki-set-tags (tags)
+ (interactive "MTags: ")
+ (setq tags (concat " " tags))
+ (save-excursion
+ (goto-char (point-min))
+ (if (re-search-forward "^#\\+TAGS:\\(.*\\)$" nil t)
+ (replace-match tags t t nil 1)
+ (when (search-forward "\n\n" nil t)
+ (backward-char))
+ (insert "#+TAGS:" tags "\n"))))
+
+(defun eltuki-get-status ()
+ (save-excursion
+ (goto-char (point-min))
+ (if (re-search-forward "^#\\+STATUS: \\(draft\\|publish\\)$" nil t)
+ (buffer-substring-no-properties
+ (match-beginning 1) (match-end 1))
+ eltuki-default-status)))
+
+(defun eltuki-toggle-status ()
+ (interactive)
+ (save-excursion
+ (goto-char (point-min))
+ (let ((newstatus (if (string= (eltuki-get-status) "draft")
+ " publish"
+ " draft")))
+ (if (re-search-forward "^#\\+STATUS:\\(.*\\)$" nil t)
+ (replace-match newstatus t t nil 1)
+ (when (search-forward "\n\n" nil t)
+ (backward-char))
+ (insert "#+STATUS:" newstatus "\n")))))
+
+(defun eltuki-get-comment-status ()
+ (save-excursion
+ (goto-char (point-min))
+ (if (re-search-forward
+ "^#\\+COMMENTSTATUS: \\(open\\|closed\\)$" nil t)
+ (buffer-substring-no-properties
+ (match-beginning 1) (match-end 1))
+ eltuki-default-comment-status)))
+
+(defun eltuki-toggle-comment-status ()
+ (interactive)
+ (save-excursion
+ (goto-char (point-min))
+ (let ((newstatus (if (string= (eltuki-get-comment-status) "closed")
+ " open"
+ " closed")))
+ (if (re-search-forward "^#\\+COMMENTSTATUS:\\(.*\\)$" nil t)
+ (replace-match newstatus t t nil 1)
+ (when (search-forward "\n\n" nil t)
+ (backward-char))
+ (insert "#+COMMENTSTATUS:" newstatus "\n")))))
+
+(defun eltuki-slugify-string (str)
+ (while (string-match "[^a-zA-Z0-9 ]+" str)
+ (setq str (replace-match "" nil t str)))
+ (while (string-match " +" str)
+ (setq str (replace-match "-" nil t str)))
+ (downcase str))
+
+(defun eltuki-get-directory ()
+ (concat
+ eltuki-blog-dir "/"
+ (format-time-string "%Y%%2f%m%%2f%d%%2f")
+ (eltuki-slugify-string (eltuki-get-title))))
+
+(defun eltuki-write-content (dir)
+ (with-current-buffer (org-export-region-as-html
+ (point-min) (point-max) t "*eltuki-html*")
+ (write-region (point-min) (point-max) (concat dir "/content"))))
+
+(defun eltuki-write-metadata (dir)
+ (let ((timestamp (eltuki-get-timestamp))
+ (tags (eltuki-get-tags))
+ (status (eltuki-get-status))
+ (title (eltuki-get-title))
+ (name (eltuki-slugify-string (eltuki-get-title)))
+ (commentstatus (eltuki-get-comment-status)))
+ (with-temp-buffer
+ (insert "timestamp: " timestamp "\n"
+ "tags: " tags "\n"
+ "status: " status "\n"
+ "title: " title "\n"
+ "name: " name "\n"
+ "comment_status: " commentstatus)
+ (write-region (point-min) (point-max) (concat dir "/metadata")))))
+
+(defun eltuki-finish ()
+ (interactive)
+ (let ((buffer (get-buffer "*eltuki*"))
+ (dest (eltuki-get-directory)))
+ (unless (file-exists-p dest)
+ (mkdir dest))
+
+ (eltuki-write-content dest)
+ (eltuki-write-metadata dest)
+ (kill-buffer buffer)))
+
+(provide 'eltuki)
+;;; eltuki.el ends here
diff --git a/.emacs.d/site-lisp/quick-edit-mode.el b/.emacs.d/site-lisp/quick-edit-mode.el
index effd30f..821c738 100644
--- a/.emacs.d/site-lisp/quick-edit-mode.el
+++ b/.emacs.d/site-lisp/quick-edit-mode.el
@@ -26,32 +26,49 @@
(defvar quick-edit-map
(let ((map (make-sparse-keymap)))
- (define-key map "n" 'next-line)
- (define-key map "p" 'previous-line)
- (define-key map "f" 'forward-char)
+ (define-key map "/" 'undo)
+ (define-key map "0" 'delete-window)
+ (define-key map "1" 'delete-other-windows)
+ (define-key map "2" 'split-window-below)
+ (define-key map "3" 'split-window-right)
+ (define-key map "K" 'kill-whole-line)
+ (define-key map "V" 'scroll-down-command)
+ (define-key map "a" 'oni:move-beginning-of-dwim)
(define-key map "b" 'backward-char)
+ (define-key map "d" 'oni:kill-region-or-forward-char)
(define-key map "e" 'oni:move-end-of-dwim)
- (define-key map "a" 'oni:move-beginning-of-dwim)
- (define-key map "V" 'scroll-down-command)
+ (define-key map "f" 'forward-char)
+ (define-key map "j" 'newline-and-indent)
+ (define-key map "k" 'oni:kill-region-or-line)
+ (define-key map "n" 'next-line)
+ (define-key map "o" 'other-window)
+ (define-key map "p" 'previous-line)
(define-key map "v" 'scroll-up-command)
- (define-key map "/" 'undo)
(define-key map "w" 'oni:kill-region-or-backward-char)
- (define-key map "d" 'oni:kill-region-or-forward-char)
- (define-key map "k" 'oni:kill-region-or-line)
- (define-key map "K" 'kill-whole-line)
- (define-key map "j" 'newline-and-indent)
+ (define-key map (kbd "C-b") 'electric-buffer-list)
+ (define-key map (kbd "C-g") 'quick-edit-mode)
(define-key map (kbd "RET") 'quick-edit-mode)
map)
"Keymap for quick-edit-mode.")
+(defun qe-locally-disable ()
+ "Disable quick-edit mode in the minibuffer"
+ (when (eq overriding-local-map quick-edit-map)
+ (setq-local overriding-local-map nil)))
+
;;;###autoload
(define-minor-mode quick-edit-mode
"Quickly edit stuff."
:lighter " qe"
:global t
(if quick-edit-mode
- (setq overriding-local-map quick-edit-map)
- (setq overriding-local-map nil)))
+ (progn
+ (setq overriding-local-map quick-edit-map)
+ (add-hook 'minibuffer-setup-hook 'qe-locally-disable)
+ (add-hook 'special-mode-hook 'qe-locally-disable))
+ (setq overriding-local-map nil)
+ (remove-hook 'minibuffer-setup-hook 'qe-locally-disable)
+ (remove-hook 'special-mode-hook 'qe-locally-disable)))
(provide 'quick-edit-mode)
;;; quick-edit-mode.el ends here
diff --git a/.emacs.d/snippets/html-mode/for b/.emacs.d/snippets/html-mode/for
new file mode 100644
index 0000000..01d9c44
--- /dev/null
+++ b/.emacs.d/snippets/html-mode/for
@@ -0,0 +1,8 @@
+# -*- mode: snippet -*-
+# name: for
+# key: for
+# condition: pony-tpl-minor-mode
+# --
+{% for $1 in $2 %}
+ $0
+{% endfor %} \ No newline at end of file
diff --git a/.emacs.d/snippets/html-mode/generic-block b/.emacs.d/snippets/html-mode/generic-block
new file mode 100644
index 0000000..82d40c7
--- /dev/null
+++ b/.emacs.d/snippets/html-mode/generic-block
@@ -0,0 +1,8 @@
+# -*- mode: snippet -*-
+# name: Template Block
+# key: %
+# condition: pony-tpl-minor-mode
+# --
+{% $1 %}
+ $0
+{% end$1 %} \ No newline at end of file
diff --git a/.emacs.d/snippets/org-mode/codeblock b/.emacs.d/snippets/org-mode/codeblock
new file mode 100644
index 0000000..a200b08
--- /dev/null
+++ b/.emacs.d/snippets/org-mode/codeblock
@@ -0,0 +1,7 @@
+# -*- mode: snippet -*-
+# name: codeblock
+# key: code
+# --
+#+begin_src $1
+ $0
+#+end_src \ No newline at end of file
diff --git a/.emacs.d/snippets/org-mode/heading b/.emacs.d/snippets/org-mode/heading
new file mode 100644
index 0000000..9d5451e
--- /dev/null
+++ b/.emacs.d/snippets/org-mode/heading
@@ -0,0 +1,9 @@
+# -*- mode: snippet -*-
+# name: Heading
+# key: *
+# --
+${1:*} ${2:TODO} $3
+${1:$(make-string (length text) ?\ )} :PROPERTIES:
+${1:$(make-string (length text) ?\ )} :CATEGORY: $4
+${1:$(make-string (length text) ?\ )} :END:
+${1:$(make-string (length text) ?\ )} $0 \ No newline at end of file
diff --git a/.emacs.d/themes/new-theme.el b/.emacs.d/themes/new-theme.el
index a2234ca..c4df5e6 100644
--- a/.emacs.d/themes/new-theme.el
+++ b/.emacs.d/themes/new-theme.el
@@ -30,10 +30,16 @@
(custom-theme-set-faces
'new
'(default ((t (:background "#111113" :foreground "#eeeeec"))))
+ '(flymake-errline ((t (:background "#8b1a1a"))))
+ '(flymake-infoline ((t (:background "#00008b"))))
+ '(flymake-warnline ((t (:background "#9a3200"))))
'(font-lock-comment-delimiter-face ((t (:foreground "#a9a9a9" :slant italic :weight bold))))
'(font-lock-comment-face ((t (:foreground "#a9a9a9" :slant italic))))
+ '(font-lock-doc-face ((t (:foreground "#9ad870"))))
'(font-lock-keyword-face ((t (:foreground "#cfce29"))))
+ '(font-lock-string-face ((t (:foreground "#ffbd5c"))))
'(font-lock-type-face ((t (:foreground "#78a2c1"))))
+ '(highlight ((t (:background "#171719"))))
'(ido-subdir ((t (:foreground "#ff5d55"))))
'(jabber-chat-prompt-foreign ((t (:foreground "#ff5d55"))))
'(jabber-chat-prompt-local ((t (:foreground "#78a2c1"))))
@@ -43,7 +49,6 @@
'(mode-line ((t (:background "#222224" :foreground "#eeeeec" :box nil))))
'(mode-line-inactive ((t (:background "#171719" :foreground "#999999" :box nil))))
'(region ((t (:background "#2729b6"))))
- '(highlight ((t (:background "#171719"))))
)
(provide-theme 'new)
diff --git a/.stumpwmrc b/.stumpwmrc
index e2f6662..8c258e7 100644
--- a/.stumpwmrc
+++ b/.stumpwmrc
@@ -127,9 +127,15 @@
(format-expand *window-formatters* *window-format*
(current-window)))))
-(set-prefix-key (kbd "C-z"))
+(set-prefix-key (kbd "C-i"))
(define-key *top-map* (kbd "C-M-l") "run-i3lock")
+(define-key *top-map* (kbd "KP_Begin") "vsplit")
+(define-key *top-map* (kbd "KP_Divide") "remove")
+(define-key *top-map* (kbd "KP_Left") "only")
+(define-key *top-map* (kbd "KP_Multiply") "fnext")
+(define-key *top-map* (kbd "KP_Right") "hsplit")
+(define-key *top-map* (kbd "KP_End") "pull-hidden-next")
(define-key *root-map* (kbd "c") "raise-urxvt")
(define-key *root-map* (kbd "C") "run-urxvt")
diff --git a/.xinitrc b/.xinitrc
new file mode 100644
index 0000000..0e41d5d
--- /dev/null
+++ b/.xinitrc
@@ -0,0 +1,15 @@
+
+xmodmap ~/.Xmodmap
+
+{ emacs --daemon & } && sleep 1
+
+pidof mpdscribble >& /dev/null
+if [ $? -ne 0 ]
+then
+ mpdscribble &
+fi
+
+# rox -b Default
+
+test -n "$1" && wm=$1 || wm="awesome" # wm="emacsclient -ce \"(oni:wm-init)\""
+exec ck-launch-session $wm