diff --git a/README.txt b/README.txt index 07aee7d..00e3868 100644 --- a/README.txt +++ b/README.txt @@ -2,6 +2,7 @@ Dotfiles ======== + First Principle --------------- @@ -10,29 +11,28 @@ __Do not go out of ways how the default environments work__. There are many cases when I must work on foreign environments, and it is always -VERY irritating when things will not work as I expect, yet setting up my own -environment will be troublesome. So I avoid changing behaviors of tools, -except for emacs. +VERY irritating when things do not work as I expected, yet setting up my own +environment is troublesome. So I avoid changing behaviors of tools, except +for emacs. Emacs is the editor I usually use for coding. I decided to change the behavior of emacs as I want without thinking about other environments. When I cannot use my emacs.el I'll use vi or vim instead. Other tools like bash and vim basically work in the same ways even when using my -rc files. The main changes are related to showing informations, typically the +rc files. The main changes are related to showing informations, typically in the bash prompt. + Sourcing flow ------------- -~/.bash_profile <= console login +$HOME/.profile <= console login (maybe sourced from .{ba,z}sh_profile) | -|--~/.dotfiles/profile -| -`--~/.bashrc +`--$HOME/.{ba,z}shrc | - `--~/.dotfiles/bashrc + `--$HOME/.dotfiles/shrc ~/.xinitrc <= startx | @@ -41,4 +41,3 @@ Sourcing flow |--~/.dotfiles/xprofile | `--~/.dotfiles/xprograms - diff --git a/_keysnail.js b/_keysnail.js index 6be2801..69cda11 100644 --- a/_keysnail.js +++ b/_keysnail.js @@ -409,6 +409,8 @@ ext.add('my-setpref', function(){ "gecko.handlerService.schemes.mailto.1.name":"Gmail", "general.warnOnAboutConfig":false, "keyword.URL":"http://www.bing.com/search?q=", + "browser.search.defaultenginename":"Bing", + "browser.search.defaulturl":"http://www.bing.com/search?q=", "network.dns.disableIPv6":true, "refcontrol.actions": "@DEFAULT=@FORGE www.heartrails.com=@NORMAL www.pixiv.net=@NORMAL", @@ -763,8 +765,7 @@ hook.setHook('Unload', function () { } const ks = win.KeySnail; share.pluginUpdater = ks.getPluginUpdater( - share.pluginUpdater.pluginsWithUpdate - ); + share.pluginUpdater.pluginsWithUpdate); ks.setUpPluginUpdaterDelegator(); return true; }); @@ -846,7 +847,7 @@ key.setViewKey(['t', 'p'], function (ev, arg) { ext.exec("twitter-client-tweet-this-page", arg, ev); }, 'このページのタイトルと URL を使ってつぶやく', true); -key.setViewKey([['u'], ['']], function (ev) { +key.setViewKey('u', function (ev) { goDoCommand("cmd_scrollPageUp"); }, '一画面分スクロールアップ'); @@ -866,24 +867,10 @@ key.setViewKey('m', function (ev, arg) { _fi.toogle(); }, 'fetchimiをトグル'); -key.setViewKey('SPC', function (ev, arg) { - MultipleTabService.toggleSelection(gBrowser.mCurrentTab); - gBrowser.mTabContainer.advanceSelectedTab(1, true); -}, 'タブの選択をトグルして次のタブ'); - -key.setViewKey('S-SPC', function (ev, arg) { - MultipleTabService.toggleSelection(gBrowser.selectedTab); - gBrowser.mTabContainer.advanceSelectedTab(-1, true); -}, 'タブの選択をトグルして前のタブ'); - key.setViewKey('z', function (ev, arg) { ext.exec("keysnail-z-menu", arg, ev); }, 'open keysnail setting menu', true); -key.setViewKey('C-SPC', function (ev, arg) { - MultipleTabService.toggleSelection(gBrowser.selectedTab); -}, 'タブの選択をトグル'); - key.setViewKey('e', function () { command.focusElement(command.elementsRetrieverTextarea, 0); }, '最初のインプットエリアへフォーカス', true); @@ -926,7 +913,7 @@ key.setViewKey('a', function (ev, arg) { allTabs.open(); }, 'alltabs.open'); -key.setViewKey([[''], ['d']], function (ev) { +key.setViewKey('d', function (ev) { goDoCommand("cmd_scrollPageDown"); }, '一画面スクロールダウン'); @@ -973,9 +960,9 @@ key.setViewKey('p', function (ev) { key.generateKey(ev.originalTarget, KeyEvent.DOM_VK_UP, true); }, '一行スクロールアップ'); -key.setViewKey('f', function (ev) { - key.generateKey(ev.originalTarget, KeyEvent.DOM_VK_RIGHT, true); -}, '右へスクロール'); +key.setViewKey('f', function (ev, arg) { + ext.exec('strong-fullscreen', arg, ev); +}, 'go fullscreen with hiding toolbar and tabbar', true); key.setViewKey('b', function (ev) { key.generateKey(ev.originalTarget, KeyEvent.DOM_VK_LEFT, true); @@ -1042,6 +1029,10 @@ key.setEditKey('C-o', function (ev) { command.openLine(ev); }, '行を開く (Open line)'); -key.setViewKey('f', function (ev, arg) { - ext.exec('strong-fullscreen', arg, ev); -}, 'go fullscreen with hiding toolbar and tabbar', true); +key.setViewKey('S-SPC', function (ev) { + goDoCommand("cmd_scrollPageUp"); +}, '一画面分スクロールアップ'); + +key.setViewKey('SPC', function (ev) { + goDoCommand("cmd_scrollPageDown"); +}, '一画面スクロールダウン'); diff --git a/20-keyboard.conf b/conf/20-keyboard.conf similarity index 100% rename from 20-keyboard.conf rename to conf/20-keyboard.conf diff --git a/conkyrc b/conf/conkyrc similarity index 100% rename from conkyrc rename to conf/conkyrc diff --git a/conkyrc.2 b/conf/conkyrc.2 similarity index 100% rename from conkyrc.2 rename to conf/conkyrc.2 diff --git a/fonts.conf b/conf/fonts.conf similarity index 100% rename from fonts.conf rename to conf/fonts.conf diff --git a/emacs.el b/emacs.el index 6a3ae5f..483d572 100644 --- a/emacs.el +++ b/emacs.el @@ -94,6 +94,7 @@ otherwise the path where the library installed." markdown-mode yaml-mode ;; ack + color-moccur ))) @@ -163,6 +164,7 @@ found, otherwise returns nil." (add-hook 'after-init-hook (lambda () + (message "%s %s" invocation-name emacs-version) (message "%s was taken to initialize emacs." (emacs-init-time)) (switch-to-buffer "*Messages*") )) @@ -849,6 +851,8 @@ found, otherwise returns nil." :weight 'normal) (set-face-foreground 'diff-removed-face "red") (set-face-foreground 'diff-added-face "green") + (set-face-background 'diff-removed-face nil) + (set-face-background 'diff-added-face nil) (set-face-attribute 'diff-changed nil :foreground "magenta" :weight 'normal) @@ -1926,55 +1930,66 @@ if arg given, use that eshell buffer, otherwise make new eshell buffer." (file-name-as-directory dir) "") "memo.txt")))) -(file-name-as-directory "..") -(defun my-rgrep-gitgrep (word) - "Recursive grep with git-grep" - (interactive "sgit-grep: Word to search: ") - (require 'grep) - (compilation-start - (format "git --no-pager -c color.grep=false grep -nH -e '%s'" - word) - 'grep-mode)) - -(defun my-rgrep-ag (word) - "Recursive grep with ag" - (interactive "sag: Word to search: ") - (require 'grep) - (compilation-start (format "ag --nocolor --nogroup --nopager '%s'" - word) - 'grep-mode)) - -(defun my-rgrep-ack (word) - "Recursive grep with ack" - (interactive "sack: Word to search: ") - (require 'grep) - (compilation-start (format "ack --nocolor --nogroup --nopager '%s'" - word) - 'grep-mode)) - -(defun my-rgrep-grep (word) - "Recursive grep with grep" - (interactive "sgrep: Word to search: ") - (require 'grep) - (compilation-start - (format (concat "find . " - "-path '*/.git' -prune -o " - "-path '*/.svn' -prune -o " - "-type f -exec grep -nH -e '%s' {} +") - word) - 'grep-mode)) - -(defun my-rgrep (word) - "My recursive grep." - (interactive "sWord to search: ") + +(defvar my-rgrep-gitgrep + "git --no-pager -c color.grep=false grep -nH -e " + "grep command for git grep.") + +(defvar my-rgrep-ag + "ag --nocolor --nogroup --nopager " + "grep command for ag") + +(defvar my-rgrep-ack + "ack --nocolor --nogroup --nopager " + "grep command for ack") + +(defvar my-rgrep-grep + (concat "find . " + "-path '*/.git' -prune -o " + "-path '*/.svn' -prune -o " + "-type f -print0 | " + "xargs -0 -e grep -nH -e ") + "grep command for grep") + +(defun my-rgrep-grep-command () + "Return recursive grep command for current directory." (if (eq 0 (shell-command "git rev-parse --git-dir")) - (my-rgrep-gitgrep word) + my-rgrep-gitgrep (if (executable-find "ag") - (my-rgrep-ag word) + my-rgrep-ag (if (executable-find "ack") - (my-rgrep-ack word) - (my-rgrep-grep word))))) + my-rgrep-ack + my-rgrep-grep)))) + +(defun my-rgrep (command-args) + "My recursive grep." + (interactive (list (read-shell-command "grep command: " + (my-rgrep-grep-command) + 'grep-find-history))) + (compilation-start command-args + 'grep-mode)) + +(defun my-rgrep-ack (command-args) + "My recursive grep." + (interactive (list (read-shell-command "grep command: " + my-rgrep-ack + 'grep-find-history))) + (my-rgrep command-args)) + +(defun my-rgrep-ag (command-args) + "My recursive grep." + (interactive (list (read-shell-command "grep command: " + my-rgrep-ag + 'grep-find-history))) + (my-rgrep command-args)) + +(defun my-rgrep-grep (command-args) + "My recursive grep." + (interactive (list (read-shell-command "grep command: " + my-rgrep-grep + 'grep-find-history))) + (my-rgrep command-args)) (define-key ctl-x-map "s" 'my-rgrep) @@ -2047,6 +2062,19 @@ this is test, does not rename files" (message file)) (message "not visiting file.")))) +(defvar kill-ring-buffer-name "*kill-ring*" + "Buffer name for `kill-ring-buffer'.") +(defun open-kill-ring-buffer () + "Open kill- ring buffer." + (interactive) + (pop-to-buffer + (with-current-buffer (get-buffer-create kill-ring-buffer-name) + (erase-buffer) + (yank) + (text-mode) + (current-local-map) + (goto-char (point-min))))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; savage emacs ;; ;; when enabled emacs fails to complete @@ -2054,5 +2082,52 @@ this is test, does not rename files" ;; (defadvice message (before message-for-stupid (arg &rest arg2) activate) ;; (setq arg ;; (concat arg -;; (if (eq nil (string-match "\\. *$" arg)) ".") +;; (if (eq nil +;; (string-match "\\. *$" +;; arg)) +;; ".") ;; " Stupid!"))) + +(defvar my-system-info + nil + "System info in the form of \"[user@host] \".") +(setq my-system-info + (concat "[" + user-login-name + "@" + (car (split-string system-name + "\\.")) + "] ")) + +(defadvice read-from-minibuffer (before info-in-prompt activate) + (ad-set-arg 0 + (concat my-system-info + (ad-get-arg 0)))) + +(defadvice read-string (before info-in-prompt activate) + (ad-set-arg 0 + (concat my-system-info + (ad-get-arg 0)))) + +(when (< emacs-major-version 24) + (defadvice completing-read (before info-in-prompt activate) + (ad-set-arg 0 + (concat my-system-info + (ad-get-arg 0))))) + +(defun my-real-function-subr-p (function) + "Return t if function is a built-in function even if it is advised." + (let* ((advised (and (symbolp function) + (featurep 'advice) + (ad-get-advice-info function))) + (real-function + (or (and advised (let ((origname (cdr (assq 'origname advised)))) + (and (fboundp origname) + origname))) + function)) + (def (if (symbolp real-function) + (symbol-function real-function) + function))) + (subrp def))) + +;; (my-real-function-subr-p 'my-real-function-subr-p) diff --git a/profile b/profile deleted file mode 100755 index d4ed007..0000000 --- a/profile +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -# # sample of ~/.profile - -# . ~/.dotfiles/profile - -# # if running bash -# if [ -n "$BASH_VERSION" ]; then -# # include .bashrc if it exists -# if [ -f "$HOME/.bashrc" ]; then -# . "$HOME/.bashrc" -# fi -# fi - -# This not works when, for example, inherit parent ENV and load /etc/profile -# again. -#test -n "$DOTFILES_PROFILE" && return -#export DOTFILES_PROFILE=t - -# export PS1="\$ " -export LC_TIME=C - -mkdir -p $HOME/.local/lib/python/site-packages -export PYTHONDOCS=/usr/share/doc/python/html/ -export PYTHONPATH="${PYTHONPATH}:\ -${HOME}/my/bin/py:${HOME}/.local/lib/python/site-packages" -test -f "${HOME}/.dotfiles/rc.py" && \ - export PYTHONSTARTUP="${HOME}/.dotfiles/rc.py" -#export PYTHONPATH="~/.local/share/lib/python3.2/site-packages" - -export GEM_HOME="$HOME/.local/lib/gems" -export PATH="$PATH:$HOME/.local/lib/gems/bin" -export RUBYLIB="$RUBYLIB:$HOME/.local/lib/gems/lib" - -#_python_pkg_conf="/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/pkgconfig" -export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$_python_pkg_conf" - -#export MANPATH="`manpath`:$HOME/.local/share/man" - -# in my environment powerdown does not work -test -z "$SSH_CONNECTION" && \ - type setterm >/dev/null 2>&1 && setterm -blank 30 -powersave on # -powerdown 10 diff --git a/setup.sh b/setup.sh index 7d816ac..26adc25 100755 --- a/setup.sh +++ b/setup.sh @@ -1,6 +1,6 @@ #!/bin/sh -mkdir -p ~/.my/log +mkdir -p ~/.var/log mkdir -p ~/.local/bin _iswindows(){ @@ -60,6 +60,7 @@ git_config(){ $_gitconfig log.date iso type xz && \ $_gitconfig tar.txz.command "xz -c" + $_gitconfig push.default current $_gitconfig alias.graph "log --graph --date-order -C -M --pretty=tformat:\"%C(green)%h%C(reset) %C(white)%ad%C(reset) %C(red)%an%C(reset)%C(yellow)%d%C(reset) %C(white bold)%s%C(reset)\" --all --date=iso -n 499" $_gitconfig alias.st "status -s -b" @@ -124,8 +125,8 @@ mac_start_daemon(){ default(){ get_install_script \ - http://www.frexx.de/xterm-256-notes/data/colortable16.sh \ - http://www.frexx.de/xterm-256-notes/data/256colors2.pl + https://gist.github.com/10sr/6852317/raw/colortable16.sh \ + https://gist.github.com/10sr/6852331/raw/256colors2.pl git_config diff --git a/bashrc b/shrc similarity index 74% rename from bashrc rename to shrc index ac6c8a3..8d8f727 100755 --- a/bashrc +++ b/shrc @@ -1,20 +1,85 @@ -#!/bin/bash +#!/bin/sh # TODO: use tput -# If not running interactively, don't do anything -[[ $- != *i* ]] && return - ########################################## null(){ "$@" >/dev/null 2>&1 } -__try_exec(){ +__safe_run(){ type $1 >/dev/null 2>&1 && "$@" } +__match(){ + # __match str word + # return 0 if word is found in str + expr "$1" : ".*$2.*" >/dev/null +} + + +################################# +# profile-like setups +# aliases: +# isinteractive: true if the current session is interactive +# issourced: true if this file is sourced from another file (not so assured) +# __firstload: true if this file is sourced for the first time (not so +# assured) + +alias isinteractive=false +__match "$-" i >/dev/null && alias isinteractive=true +# alias issourced=true +# expr "$0" : "^.*shrc$" >/dev/null && alias issourced=false # executed + +__safe_add_path_r(){ + test -d "$1" && PATH="${PATH}:$1" +} +__safe_add_path_l(){ + test -d "$1" && PATH="$1:${PATH}" +} + +__safe_add_path_l "$HOME/.local/bin" +__safe_add_path_l "$HOME/.local/lib/gems/bin" +__safe_add_path_r "/c/mingw/bin" +__safe_add_path_r "/c/mingw/msys/1.0/bin" + +# macports coreutils +# isdarwin cannot be used it is not defined yet +__safe_add_path_l "/opt/local/bin" +__safe_add_path_l "/opt/local/sbin" +__safe_add_path_l "/opt/local/libexec/gnubin" +__safe_add_path_l \ + "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/bin" + +test -f "${__dotdir}/rc.py" && export PYTHONSTARTUP="${__dotdir}/rc.py" + +install -d "$HOME/.local/lib/python/site-packages" +export PYTHONPATH="${PYTHONPATH}:${HOME}/.local/lib/python/site-packages" + +export GEM_HOME="$HOME/.local/lib/gems" +export RUBYLIB="$RUBYLIB:$HOME/.local/lib/gems/lib" + + +# it is not so good +# http://archive.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/shared-libraries.html +# http://superuser.com/questions/324613/installing-a-library-locally-in-home-directory-but-program-doesnt-recognize-it +# without this ENV i cannot run tmux. another way is to use --disable-shared +# when building tmux +if ! __match "$LD_LIBRARY_PATH" "$HOME/.local/lib" +then + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/.local/lib" +fi + +# in my environment powerdown does not work +test -z "$SSH_CONNECTION" && \ + type setterm >/dev/null 2>&1 && \ + setterm -blank 30 -powersave on # -powerdown 10 + + ########################## # system type +# aliases: +# ismsys, iscygwin iswindows, isdarwin, islinux, +# with_coreutils, inbash, inzsh alias ismsys=false alias iscygwin=false @@ -44,48 +109,46 @@ then alias inzsh=true fi + ################################# +# file pathes: +# shrc: Path to this file +# dotdir: Path to .dotfiles directory -__match(){ - # __match str1 str2 - # return 0 if str2 is found in str1 - expr "$1" : ".*$2.*" >/dev/null -} -if ! __match "$PATH" "$HOME/.local/bin" +if inbash then - if test -d "$HOME/.local/bin" - then - PATH="${HOME}/.local/bin:${PATH}" - fi - if test -d "$HOME/.local/lib/gems/bin" - then - PATH="$HOME/.local/lib/gems/bin:${PATH}" - fi -fi - -if ismsys && ! __match "$PATH" /c/mingw/bin + __shrc="$BASH_SOURCE" +elif inzsh then - PATH="$PATH:/c/mingw/bin:/c/mingw/msys/1.0/bin" + __shrc="$0" fi -# # it is not so good -# # http://archive.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/shared-libraries.html -# # http://superuser.com/questions/324613/installing-a-library-locally-in-home-directory-but-program-doesnt-recognize-it -# without this ENV i cannot run tmux. another way is to use --disable-shared -# when building tmux -if ! __match "$LD_LIBRARY_PATH" "$HOME/.local/lib" -then - export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/.local/lib" -fi +__dotdir="`dirname "$__shrc"`" +__homelocal="$HOME/.local" +__homevar="$HOME/.var" +install -d "$__homelocal" +install -d "$__homevar" + ################################## +# EnvVal definitions + export LANG=ja_JP.UTF-8 export LC_MESSAGES=C +export LC_TIME=C export TERMCAP="${TERMCAP}:vb=" ismsys && export HOSTNAME -export ENV=~/.shrc +# export ENV=~/.shrc + +if ! with_coreutils +then + export LSCOLORS=gxfxcxdxbxegedabagacad +else + # http://qiita.com/yuyuchu3333/items/84fa4e051c3325098be3 + null type dircolors && eval `dircolors` +fi if false iswindows then @@ -95,11 +158,13 @@ else fi export LESS="-iRMX" +# Style for lesspipe is defined in esc.style _src_hilite_lp_path="`which src-hilite-lesspipe.sh 2>/dev/null`" -if test -n "$_src_hilite_lp_path" -then - export LESSOPEN="| $_src_hilite_lp_path %s" -fi +for f in /usr/share/source-highlight/src-hilite-lesspipe.sh +do + test -z "$_src_hilite_lp_path" && test -e "$f" && _src_hilite_lp_path="$f" +done +test -n "$_src_hilite_lp_path" && export LESSOPEN="| $_src_hilite_lp_path %s" if null type vim then @@ -115,8 +180,8 @@ export GIT_EDITOR="$EDITOR" export GIT_MERGE_AUTOEDIT=no if test -n "$TMUX" && \ - echo $TERM | grep screen >/dev/null 2>&1 && \ - tmux display -p '#{client_termname}' | grep 256color >/dev/null 2>&1 + __match $TERM screen && \ + __match `tmux display -p '#{client_termname}'` 256color then TERM=screen-256color fi @@ -146,17 +211,18 @@ if iswindows; then export USER=$USERNAME fi -_tmux_prefs(){ - null type tmux || return 1 - tmux set -g mode-keys vi -} - if test -d ~/dbx then export CHIT_PATH="$HOME/dbx/.chit" fi ####################### +# If not running interactively, don't do anything +# issourced || exit +isinteractive || return + +###################### +# Print welcome messages iswindows && alias tty="echo cmd.exe" type fortune >/dev/null 2>&1 && { @@ -190,11 +256,6 @@ _timeformat_num="%Y%m%d%H%M%S" alias datenum="date +$_timeformat_num" alias ls="ls -hCF${_coloroption}${_timeoption}" -if ! with_coreutils -then - export LSCOLORS=gxfxcxdxbxegedabagacad - alias ls="ls -G" -fi # export GREP_OPTIONS="" alias gr="grep -n --color=always" iswindows && alias grep="grep -n" @@ -273,10 +334,20 @@ wicn(){ fi } -for f in /usr/share/vim/vimcurrent/macros/less.sh \ - /usr/share/vim/vim73/macros/less.sh \ - /usr/share/vim/vim72/macros/less.sh +__find_latest_vimdir(){ + vimdir=/usr/share/vim + if test -d "$vimdir" + then + find "$vimdir" -name 'vim??' -type d | sort | tail -n 1 + else + echo "" + fi +} + +for f in /usr/share/vim/vimcurrent "`__find_latest_vimdir`" do + test -n "$f" || continue + f="$f/macros/less.sh" test -f $f && alias vl=$f && break done @@ -338,17 +409,91 @@ then || complete -o default -o nospace -F _git g fi git svn --help >/dev/null 2>&1 && alias gsvn="git svn" -null type gitmemo && alias m=gitmemo null type gitmemo && alias m=gitmemo alias setup.py="sudo python3 setup.py install --record files.txt" +randomstr(){ + len=$1 + test -z "$len" && len=8 + uuidgen | tr -d - | cut -c 1-len +} + +datestr(){ + # datestr yyyyMMdd-hhmmss + if test -z "$1" || test "$1" == "-h" + then + echo "datestr: usage: datestr " + return 1 + fi + + dfmt= # actual format for date command + while test -n "$1" + do + fmt="$1" + while test -n "$fmt" + do + case "$fmt" in + yyyy*) # year + dfmt="${dfmt}%Y" + fmt="`echo "$fmt" | cut -c 5-`" + ;; + yy*) # last two digits of year + dfmt="${dfmt}%y" + fmt="`echo "$fmt" | cut -c 3-`" + ;; + MM*) # month (01..12) + dfmt="${dfmt}%m" + fmt="`echo "$fmt" | cut -c 3-`" + ;; + dd*) # day of month (01..12) + dfmt="${dfmt}%d" + fmt="`echo "$fmt" | cut -c 3-`" + ;; + HH* | hh*) # hour (00..23) + dfmt="${dfmt}%H" + fmt="`echo "$fmt" | cut -c 3-`" + ;; + mm*) # minute (00..59) + dfmt="${dfmt}%M" + fmt="`echo "$fmt" | cut -c 3-`" + ;; + ss*) # second (00..60) + dfmt="${dfmt}%S" + fmt="`echo "$fmt" | cut -c 3-`" + ;; + *) + char=`echo "$fmt" | cut -c 1` + dfmt="${dfmt}${char}" + fmt="`echo "$fmt" | cut -c 2-`" + ;; + esac + done + shift + done + date +"$dfmt" +} + ssh(){ __my_set_screen_title ssh command ssh "$@" } +__ssh_with_cd(){ + # __ssh_with_cd [ ...] + if test -z "$2" + then + echo "usage: __ssh_with_cd [ ...]" + return 1 + fi + host="$1" + shift + dir="$1" + shift + ssh "$host" "$@" -t "cd \"$dir\"; \$SHELL -l" +} + memo(){ if test -z "$1" then @@ -358,7 +503,7 @@ memo(){ fi } -clk(){ +now(){ local tformat="%Y/%m/%d %H:%M:%S %z" cal REPLY= @@ -423,38 +568,6 @@ netwait(){ echo network works. } -cd(){ - if test $# -eq 0 - then - pushd ~/ >/dev/null - elif test "$1" = - - then - local pwd="$PWD" - command cd "$OLDPWD" - pushd -n "$pwd" >/dev/null # stack last dir - elif ! test -d "$1" - then - echo `basename ${SHELL}`: cd: "$1": No such file or directory 1>&2 - return 1 - else - pushd "$1" >/dev/null - fi - __dirs_rm_dup "$PWD" - echo "$PWD" -} - -__dirs_rm_dup(){ - for d in "$@" - do - local next="$(__realpath --strip "$d")" - for l in $(\dirs -v -l | cut -d $'\n' -f 2- | \ - \grep -x " *[0-9]\+ \+${next}" | \grep -o "^ *[0-9]\+ " | tac) - do - popd +$l -n >/dev/null - done - done -} - __realpath(){ if type realpath >/dev/null 2>&1 then @@ -464,49 +577,19 @@ __realpath(){ do shift done - local d="$OLDPWD" - command cd "$1" - echo "$PWD" - command cd "$d" + (command cd "$d" && echo "$PWD") + # local d="$OLDPWD" + # command cd "$1" + # echo "$PWD" + # command cd "$d" fi } -dh(){ - if test $# -eq 0 - then - dirs -v -l - else - local dir="$(dirs -v -l | \grep "^ *$1 \+" | sed "s/^ *[0-9]* *//g")" - cd "$dir" - fi -} -input(){ - local foo - stty -echo - read foo - stty echo - echo $foo -} - -# tmux(){ -# if test $# -eq 0 -# then -# (cd ~; command tmux start;) -# if command tmux has -t main -# then -# command tmux attach -t main -# else -# (cd ~; command tmux new -s main;) -# fi -# else -# command tmux "$@" -# fi -# } tx(){ if test $# -eq 0 then + echo ":: tx to attach." tmux ls - echo "tx to attach." elif tmux has -t "$1" then tmux attach -t "$1" @@ -515,6 +598,11 @@ tx(){ fi } +_tmux_prefs(){ + null type tmux || return 1 + tmux set -g mode-keys vi +} + dt(){ # dt [] [] __dtach_dir="${TMP}/dtach" @@ -589,7 +677,7 @@ dtscr(){ # echo $_file } -mcrypt-stream(){ +mcrypt_stream(){ test $# -eq 2 || return 1 case $1 in en) @@ -599,7 +687,7 @@ mcrypt-stream(){ esac } -gpg-stream(){ +gpg_stream(){ test $# -eq 2 || return 1 case $1 in en) @@ -632,7 +720,7 @@ dgpg(){ elif test -f "$d" then echo "`printf 'failed (%s is already exists)' $d`" - elif <"$f" gpg-stream $1 $pw >"$d" 2>/dev/null + elif <"$f" gpg_stream $1 $pw >"$d" 2>/dev/null then echo "done" else @@ -642,27 +730,27 @@ dgpg(){ done } -alias enst="gpg-stream en" -alias dest="gpg-stream de" +alias enst="gpg_stream en" +alias dest="gpg_stream de" showinfo(){ echo "Japanese letters are 表示可能" - __try_exec diskinfo + __safe_run diskinfo ! isdarwin && test -n "${DISPLAY}" && { - __try_exec xrandr | \grep --color=never ^Screen + __safe_run xrandr | \grep --color=never ^Screen } - iswindows || __try_exec finger $USER - LANG=C __try_exec id - __try_exec xset q + iswindows || __safe_run finger $USER + LANG=C __safe_runc id + __safe_run xset q } x(){ if [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then - #mkdir -p ~/.my/log - # nohup startx >~/.my/log/xorg.log 2>&1 & + #mkdir -p ~/.var/log + # nohup startx >~/.var/log/xorg.log 2>&1 & # exit exec startx else @@ -689,7 +777,7 @@ di(){ tb(){ local datenum=`date +%Y%m%d-%H%M%S` - local tb="$HOME/.my/tb/$datenum" + local tb="$HOME/.var/tb/$datenum" mkdir -p "$tb" for file in "$@" do @@ -794,31 +882,14 @@ o(){ fi } -convmv-sjis2utf8-test(){ +convmv_sjis2utf8_test(){ convmv -r -f sjis -t utf8 * } -convmv-sjis2utf8-notest(){ +convmv_sjis2utf8_notest(){ convmv -r -f sjis -t utf8 * --notest } -winln(){ - # for windose make link (actually junction) - if test $# -eq 0 - then - { - echo "usage: winln TARGET LINK_NAME" - echo "Create a link to TARGET with the name LINK_NAME \ -(that is, TARGET must already exist)." - echo "About other features run 'junction'." - } 1>&2 - return 1 - else - junction "$2" "$1" - fi -} - - ################################################# ## pastebin services @@ -846,8 +917,28 @@ dpaste(){ } +########################## +# Zsh specific preferences + +if inzsh +then + bindkey -e + + # http://zsh.sourceforge.net/Guide/zshguide06.html#l147 + autoload compinit; compinit + unsetopt auto_menu + zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} + setopt bash_auto_list + + autoload colors; colors + + autoload -Uz promptinit + promptinit + prompt walters +fi + ###################################### -## Prompt +## Prompt Settings __my_moc_state(){ type mocp >/dev/null 2>&1 || return @@ -886,7 +977,7 @@ __my_battery_status(){ } alias bat='__my_battery_status %s\\n' -ip-address(){ +ipaddress(){ type ip >/dev/null 2>&1 || return 1 local ip=$(LANG=C ip addr show scope global | \ \grep --color=never --only-matching 'inet [^ ]*' | cut -d " " -f 2) @@ -902,53 +993,42 @@ test -n "$SSH_CONNECTION" && __my_ps1_str="${__my_ps1_str}${__my_c5}SSH${__my_cd test -n "$__MY_DTACH" && __my_ps1_str="${__my_ps1_str}${__my_c5}DTACH${__my_cdef} " __my_ps1_scale(){ - local last=$? if null type stty && ! ismsys then stty size | tr -d $'\n' | tr " " x printf " " fi - return $last } __my_ps1_tmux(){ - local last=$? null type tmux || return $last local tmuxc="$(tmux display -p '#S:#I:#W.#P' 2>/dev/null)" test -n "$TMUX" && echo "[TMUX:$tmuxc]" - return $last } __my_ps1_moc(){ - local last=$? __my_moc_state "[MOC:%s]" - return $last } for f in /usr/share/git/git-prompt.sh \ /opt/local/share/git-core/git-prompt.sh \ /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh do - test -r "$f" && . "$f" && break + test -r "$f" && inbash && . "$f" && break done GIT_PS1_SHOWDIRTYSTATE=t GIT_PS1_SHOWUPSTREAM=t __my_ps1_git(){ - local last=$? null type __git_ps1 || return $last null git rev-parse --git-dir >/dev/null 2>&1 || return $last - __git_ps1 "[GIT:$(__try_exec git config --get user.name):%s]" - return $last + __git_ps1 "[GIT:$(__safe_run git config --get user.name):%s]" } __my_ps1_ipaddr(){ - local last=$? - ! iswindows && ip-address [Addr:%s] - return $last + ! iswindows && ipaddress [Addr:%s] } __my_ps1_bttry(){ - local last=$? local bst="${TMP}/batterystatus" if test -z "$DISPLAY" && ! iswindows then @@ -957,7 +1037,6 @@ __my_ps1_bttry(){ echo "[Battery:$bstr]" __my_battery_status %s >$bst & fi - return $last } __my_ps1_dirs(){ @@ -968,6 +1047,10 @@ __my_ps1_jobs(){ jobs | wc -l } +__my_alert_fail(){ + test $laststatus -eq 0 || echo '!!! ' +} + if test "$TERM" != dumb then __my_c1="\[\e[0;33m\]" # color for PWD @@ -982,19 +1065,12 @@ then __my_cdef="\[\e[0m\]" fi -# export _LAST_STATUS=a -# __my_export_last_status(){ -# local last=$? -# echo $last -# export _LAST_STATUS=$last -# echo $_LAST_STATUS -# return $last -# } - _ps1_bash="\ ${__my_c4}:: ${__my_cdef}[${__my_c2}\u@\H${__my_cdef}:${__my_c1}\w/${__my_cdef}]\$(__my_ps1_git)\$(__my_ps1_bttry)\$(__my_ps1_ipaddr)\$(__my_ps1_moc)\n\ -${__my_c4}:: ${__my_cdef}l${SHLVL}n\#j\js\$? $(__my_ps1_scale) \D{%T} ${__my_ps1_str}\$ " +${__my_c4}:: ${__my_cdef}l${SHLVL}n\#j\js\$laststatus $(__my_ps1_scale)\D{%T} ${__my_ps1_str}\$(__my_alert_fail)\$ " inbash && PS1=$_ps1_bash +_ps1_zsh="$_ps1_bash" +#inzsh && PS1="$_ps1_zsh" __my_set_screen_title(){ if test -n "$TMUX" && test -z "$INSIDE_EMACS" @@ -1016,3 +1092,5 @@ __my_set_title(){ } PROMPT_COMMAND="__my_set_title \${USER}@\${HOSTNAME}\:\${PWD}; __my_set_screen_title \$(basename \"\$PWD\")/" +PROMPT_COMMAND="laststatus=\$?;$PROMPT_COMMAND" +laststatus=0 diff --git a/xinitrc b/xinitrc old mode 100644 new mode 100755 index 4d2e6ba..51aa0e2 --- a/xinitrc +++ b/xinitrc @@ -4,6 +4,7 @@ test -n "$DISPLAY" || return test -z "$ROXTERM_PID" || return test -z "$SSH_CONNECTION" || return +# if already in x return case "$TERM" in xterm*) return;; esac diff --git a/xprograms b/xprograms index 31d6ae3..6d0ab87 100755 --- a/xprograms +++ b/xprograms @@ -26,8 +26,8 @@ _gsoundap(){ } _conky(){ - conky -c ~/.dotfiles/conkyrc >~/.my/log/conky.log 2>&1 & - conky -c ~/.dotfiles/conkyrc.2 >~/.my/log/conky.2.log 2>&1 & + conky -c ~/.dotfiles/conkyrc >~/.var/log/conky.log 2>&1 & + conky -c ~/.dotfiles/conkyrc.2 >~/.var/log/conky.2.log 2>&1 & } _wicd(){