aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--_Xmodmap1
-rw-r--r--_ncmpcpp/bindings141
-rw-r--r--_notmuch-config10
-rwxr-xr-x_offlineimap/offlineimap.py12
4 files changed, 158 insertions, 6 deletions
diff --git a/_Xmodmap b/_Xmodmap
index e6e0ef0..9484e3d 100644
--- a/_Xmodmap
+++ b/_Xmodmap
@@ -8,6 +8,7 @@
!! Swap 'Caps Lock' with 'Left Control'
!! Reference: http://c2.com/cgi/wiki?RemapCapsLock
+!! Or just use 'setxkbmap -option ctrl:nocaps'
remove Lock = Caps_Lock
remove Control = Control_L
keysym Caps_Lock = Control_L
diff --git a/_ncmpcpp/bindings b/_ncmpcpp/bindings
index 9934aa3..eb37e8c 100644
--- a/_ncmpcpp/bindings
+++ b/_ncmpcpp/bindings
@@ -10,12 +10,153 @@
## 2016-01-08
##
+##### General rules ##### {{{
+##
+## 1) Because each action has runtime checks whether it's
+## ok to run it, a few actions can be bound to one key.
+## Actions will be bound in order given in configuration
+## file. When a key is pressed, first action in order
+## will test itself whether it's possible to run it. If
+## test succeeds, action is executed and other actions
+## bound to this key are ignored. If it doesn't, next
+## action in order tests itself etc.
+##
+## 2) It's possible to bind more that one action at once
+## to a key. It can be done using the following syntax:
+##
+## def_key "key"
+## action1
+## action2
+## ...
+##
+## This creates a chain of actions. When such chain is
+## executed, each action in chain is run until the end of
+## chain is reached or one of its actions fails to execute
+## due to its requirements not being met. If multiple actions
+## and/or chains are bound to the same key, they will be
+## consecutively run until one of them gets fully executed.
+##
+## 3) When ncmpcpp starts, bindings configuration file is
+## parsed and then ncmpcpp provides "missing pieces"
+## of default keybindings. If you want to disable some
+## bindings, there is a special action called 'dummy'
+## for that purpose. Eg. if you want to disable ability
+## to crop playlists, you need to put the following
+## into configuration file:
+##
+## def_key "C"
+## dummy
+##
+## After that ncmpcpp will not bind any default action
+## to this key.
+##
+## 4) To let you write simple macros, the following special
+## actions are provided:
+##
+## - push_character "character" - pushes given special
+## character into input queue, so it will be immediately
+## picked by ncmpcpp upon next call to readKey function.
+## Accepted values: mouse, up, down, page_up, page_down,
+## home, end, space, enter, insert, delete, left, right,
+## tab, shift_tab, ctrl_a, ctrl_b, ..., ctrl_z, f1, f2,
+## ..., f12, backspace, backspace_2.
+##
+## - push_characters "string" - pushes given string into
+## input queue.
+##
+## - require_runnable "action" - checks whether given action
+## is runnable and fails if it isn't. This is especially
+## useful when mixed with previous two functions. Consider
+## the following macro definition:
+##
+## def_key "key"
+## push_characters "custom_filter"
+## apply_filter
+##
+## If apply_filter can't be currently run, we end up with
+## sequence of characters in input queue which will be
+## treated just as we typed them. This may lead to unexpected
+## results (in this case 'c' will most likely clear current
+## playlist, 'u' will trigger database update, 's' will stop
+## playback etc.). To prevent such thing from happening, we
+## need to change above definition to this one:
+##
+## def_key "key"
+## require_runnable "apply_filter"
+## push_characters "custom_filter"
+## apply_filter
+##
+## Here, first we test whether apply_filter can be actually run
+## before we stuff characters into input queue, so if condition
+## is not met, whole chain is aborted and we're fine.
+##
+## - require_screen "screen" - checks whether given screen is
+## currently active. accepted values: browser, clock, help,
+## media_library, outputs, playlist, playlist_editor,
+## search_engine, tag_editor, visualizer, last_fm, lyrics,
+## selected_items_adder, server_info, song_info,
+## sort_playlist_dialog, tiny_tag_editor.
+##
+## - run_external_command "command" - runs given command using
+## system() function.
+##
+## 5) In addition to binding to a key, you can also bind actions
+## or chains of actions to a command. If it comes to commands,
+## syntax is very similar to defining keys. Here goes example
+## definition of a command:
+##
+## def_command "quit" [deferred]
+## stop
+## quit
+##
+## If you execute the above command (which can be done by
+## invoking action execute_command, typing 'quit' and pressing
+## enter), ncmpcpp will stop the player and then quit. Note the
+## presence of word 'deferred' enclosed in square brackets. It
+## tells ncmpcpp to wait for confirmation (ie. pressing enter)
+## after you typed quit. Instead of 'deferred', 'immediate'
+## could be used. Then ncmpcpp will not wait for confirmation
+## (enter) and will execute the command the moment it sees it.
+##
+## Note: Both 'backspace' and 'backspace_2' are used because some
+## terminals interpret backspace using keycode of 'backspace'
+## and some the one of 'backspace_2'. You can get away with
+## binding once if all your terminal emulators use the same
+## value.
+##
+## Note: There is a difference between:
+##
+## def_key "key"
+## action1
+##
+## def_key "key"
+## action2
+##
+## and
+##
+## def_key "key"
+## action1
+## action2
+##
+## First one binds two single actions to the same key whilst
+## second one defines a chain of actions. The behavior of
+## these two is different and is described in (1) and (2).
+##
+## Note: Function def_key accepts non-ascii characters.
+## }}}
+
def_key "j"
scroll_down
def_key "k"
scroll_up
+def_key "ctrl_u"
+ page_up
+
+def_key "ctrl_d"
+ page_down
+
def_key "ctrl_j"
move_selected_items_down
diff --git a/_notmuch-config b/_notmuch-config
index ba7e7b2..a5dae22 100644
--- a/_notmuch-config
+++ b/_notmuch-config
@@ -1,10 +1,11 @@
##
-## Configuration file for the notmuch mail system
## ~/.notmuch-config
+## Configuration file for the notmuch mail system
## http://notmuchmail.org
##
-## Weitian LI <liweitianux@gmail.com>
-## 2015/02/02
+## Aaron LI <aaronly@gmail.com>
+## Created: 2015-02-02
+## Updated: 2016-01-14
##
# Database configuration
@@ -16,7 +17,8 @@
# configured here named ".notmuch".
#
[database]
-path=/home/aly/Mail
+# Default: $HOME/mail
+path=$HOME/Mail
# User configuration
#
diff --git a/_offlineimap/offlineimap.py b/_offlineimap/offlineimap.py
index e3ae422..7d9d2fd 100755
--- a/_offlineimap/offlineimap.py
+++ b/_offlineimap/offlineimap.py
@@ -11,16 +11,24 @@
# remotepasseval = mailpasswd("<accountname>")
# ...
#
+# Create encrypted password file:
+# > echo "password" | gpg2 -e -r foo@bar.com > account.gpg
+#
# Reference:
# [1] Encrypt OfflineIMAP Password
-# http://unix.stackexchange.com/questions/44214/encrypt-offlineimap-password
+# http://unix.stackexchange.com/a/48355
+#
#
-# Updated: 2015/02/02
+# Aaron LI
+# Created: 2015-02-02
+# Updated: 2016-01-11
#
+
import os
import subprocess
+
def mailpasswd(account):
account = os.path.basename(account)
path = '{0}/.offlineimap/{1}.gpg'.format(os.environ['HOME'], account)