You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 13 година
пре 10 година
пре 11 година
пре 10 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 13 година
пре 12 година
пре 11 година
пре 10 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 13 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 13 година
пре 10 година
пре 10 година
пре 10 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 10 година
пре 12 година
пре 12 година
пре 10 година
пре 10 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 10 година
пре 10 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 12 година
пре 12 година
пре 10 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 10 година
пре 10 година
пре 12 година
пре 12 година
пре 13 година
пре 12 година
пре 11 година
пре 13 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 12 година
пре 11 година
пре 10 година
пре 11 година
пре 12 година
пре 10 година
пре 11 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 12 година
пре 13 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 13 година
пре 12 година
пре 13 година
пре 10 година
пре 13 година
пре 10 година
пре 13 година
пре 10 година
пре 13 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 13 година
пре 12 година
пре 10 година
пре 13 година
пре 11 година
пре 11 година
пре 11 година
пре 13 година
пре 12 година
пре 11 година
пре 10 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 13 година
пре 12 година
пре 13 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 13 година
пре 12 година
пре 12 година
пре 12 година
пре 13 година
пре 12 година
пре 11 година
пре 13 година
пре 12 година
пре 11 година
пре 13 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 10 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 12 година
пре 10 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 10 година
пре 10 година
пре 12 година
пре 12 година
пре 11 година
пре 12 година
пре 10 година
пре 11 година
пре 12 година
пре 10 година
пре 12 година
пре 12 година
пре 11 година
пре 10 година
пре 10 година
пре 10 година
пре 12 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 12 година
пре 12 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 11 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386
  1. #!/bin/sh
  2. # TODO: decide the naming scheme of variables (global, local, ...)
  3. expr "$-" : '^.*i' >/dev/null || return
  4. ##########################################
  5. __shrc_lock=/tmp/shrc_lock.$USER.$$
  6. test -f "$__shrc_lock" && return
  7. touch "$__shrc_lock"
  8. ##########################################
  9. null(){
  10. "$@" >/dev/null 2>&1
  11. }
  12. __safe_run(){
  13. type $1 >/dev/null 2>&1 && "$@"
  14. }
  15. __match(){
  16. # __match str word
  17. # return 0 if word is found in str
  18. expr "$1" : ".*$2.*" >/dev/null
  19. }
  20. #################################
  21. # profile-like setups
  22. __safe_add_path_r(){
  23. # add path to right
  24. test -d "$1" && PATH="${PATH}:$1"
  25. }
  26. __safe_add_path_l(){
  27. # add path to left
  28. test -d "$1" && PATH="$1:${PATH}"
  29. }
  30. __safe_add_path_l "$HOME/.cabal/bin"
  31. __safe_add_path_l "$HOME/.local/lib/gems/bin"
  32. __safe_add_path_l "$HOME/.local/bin"
  33. __safe_add_path_l "$HOME/.gem/ruby/2.1.0/bin"
  34. __safe_add_path_r "/c/mingw/bin"
  35. __safe_add_path_r "/c/mingw/msys/1.0/bin"
  36. # macports coreutils
  37. # $isdarwin cannot be used it is not defined yet
  38. __safe_add_path_l "/opt/local/bin"
  39. __safe_add_path_l "/opt/local/sbin"
  40. __safe_add_path_l "/opt/local/libexec/gnubin"
  41. __safe_add_path_l \
  42. "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/bin"
  43. test -f "${__dotdir}/rc.py" && export PYTHONSTARTUP="${__dotdir}/rc.py"
  44. test -d "$HOME/.local/lib/python/site-packages" && \
  45. export PYTHONPATH="${PYTHONPATH}:${HOME}/.local/lib/python/site-packages"
  46. export GEM_HOME="$HOME/.local/lib/gems"
  47. export RUBYLIB="$RUBYLIB:$HOME/.local/lib/gems/lib"
  48. # it is not so good
  49. # http://archive.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/shared-libraries.html
  50. # http://superuser.com/questions/324613/installing-a-library-locally-in-home-directory-but-program-doesnt-recognize-it
  51. # without this ENV i cannot run tmux. another way is to use --disable-shared
  52. # when building tmux
  53. if ! __match "$LD_LIBRARY_PATH" "$HOME/.local/lib"
  54. then
  55. export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/.local/lib"
  56. fi
  57. # in my environment powerdown does not work
  58. test -z "$DISPLAY" && test -z "$SSH_CONNECTION" && \
  59. type setterm >/dev/null 2>&1 && \
  60. setterm -blank 30 -powersave on # -powerdown 10
  61. #########################
  62. # shrc.common
  63. # this variable must consistent with setup.sh
  64. __shrc_common="$HOME/.shrc.common"
  65. if test -f "$__shrc_common"
  66. then
  67. . "$__shrc_common"
  68. else
  69. echo "$__shrc_common not found."
  70. echo "Run setup.sh first."
  71. return
  72. fi
  73. ##########################
  74. # system type
  75. gnu_coreutils=false # for mac
  76. null ls --version && gnu_coreutils=true
  77. inbash=false
  78. inzsh=false
  79. if test -n "$BASH_VERSION"
  80. then
  81. inbash=true
  82. elif test -n "$ZSH_VERSION"
  83. then
  84. inzsh=true
  85. fi
  86. #################################
  87. # file pathes:
  88. # shrc: Path to this file
  89. if $inbash
  90. then
  91. __shrc="$BASH_SOURCE"
  92. elif $inzsh
  93. then
  94. __shrc="$0"
  95. fi
  96. ##################################
  97. # EnvVal definitions
  98. test "$TERM" = linux && export LANG=C
  99. export LC_MESSAGES=C
  100. export LC_TIME=C
  101. export TERMCAP="${TERMCAP}:vb="
  102. $ismsys && export HOSTNAME
  103. # export ENV=~/.shrc
  104. if false $iswindows
  105. then
  106. export PAGER='tr -d \\r | less'
  107. else
  108. export PAGER="less"
  109. fi
  110. export LESS="-iRMX"
  111. # Style for lesspipe is defined in esc.style
  112. _src_hilite_lp_path="`command -v src-hilite-lesspipe.sh 2>/dev/null`"
  113. for f in /usr/share/source-highlight/src-hilite-lesspipe.sh
  114. do
  115. test -z "$_src_hilite_lp_path" && test -e "$f" && _src_hilite_lp_path="$f"
  116. done
  117. test -n "$_src_hilite_lp_path" && export LESSOPEN="| $_src_hilite_lp_path %s"
  118. if null type vim
  119. then
  120. export EDITOR=vim
  121. else
  122. export EDITOR=vi
  123. fi
  124. # export CDPATH=".:~"
  125. export VISUAL="$EDITOR"
  126. export GIT_PAGER="less -F"
  127. export GIT_EDITOR="$EDITOR"
  128. export GIT_MERGE_AUTOEDIT=no
  129. if test -n "$TMUX" && \
  130. __match $TERM screen && \
  131. __match `tmux display -p '#{client_termname}'` 256color
  132. then
  133. TERM=screen-256color
  134. fi
  135. # set TMP, TEMP, TMPDIR
  136. if test -z "$TMP"
  137. then
  138. if test -n "$TMPDIR"
  139. then
  140. export TMP=$TMPDIR
  141. elif test -n "$TEMP"
  142. then
  143. export TMP="$TEMP"
  144. else
  145. export TMP=/tmp
  146. fi
  147. fi
  148. __match "$TMP" "${USER}-tmp" >/dev/null || TMP="${TMP}/${USER}-tmp"
  149. test -d "$TMP" || mkdir -p "$TMP"
  150. export TEMP=$TMP
  151. export TMPDIR=$TMP
  152. if ! $iswindows && null type stty
  153. then
  154. stty stop undef # unbind C-s to stop displaying output
  155. # stty erase '^h'
  156. fi
  157. if $iswindows
  158. then
  159. export USER=$USERNAME
  160. fi
  161. if test -d ~/dbx
  162. then
  163. export CHIT_PATH="$HOME/dbx/.chit"
  164. fi
  165. # adhoc fix for ansible on cygwin
  166. # http://blog.s-uni.net/2013/08/27/ansible-running-on-cygwin/
  167. if $incygwin
  168. then
  169. export ANSIBLE_SSH_ARGS="-o ControlMaster=no"
  170. fi
  171. ##########################
  172. # Zsh specific preferences
  173. # http://www.clear-code.com/blog/2011/9/5.html
  174. if $inzsh
  175. then
  176. bindkey -e
  177. # http://zsh.sourceforge.net/Guide/zshguide06.html#l147
  178. autoload compinit; compinit
  179. # supress cycle by tab
  180. unsetopt auto_menu
  181. # unsetopt correct
  182. setopt complete_aliases
  183. setopt auto_list
  184. setopt bash_auto_list
  185. setopt magic_equal_subst
  186. setopt list_types
  187. # what is the difference of these two?
  188. setopt auto_param_slash
  189. setopt mark_dirs
  190. zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
  191. zstyle ':completion:*' format '%B%d%b'
  192. zstyle ':completion:*' group-name ''
  193. zstyle ':completion:*' use-cache yes
  194. # zstyle ':completion:*:cd:*' tag-order local-directories
  195. zstyle ':completion:*' completer _complete _bash_completions \
  196. _history
  197. # zstyle ':completion:*:*:cd:*' completer
  198. zstyle ':completion:*' accept-exact-dirs true
  199. zstyle ':completion:*' special-dirs true
  200. autoload colors; colors
  201. # autoload -Uz promptinit
  202. # promptinit
  203. # prompt walters
  204. setopt hist_ignore_dups
  205. setopt hist_ignore_all_dups
  206. setopt hist_save_no_dups
  207. setopt extended_history
  208. setopt share_history
  209. setopt append_history
  210. HISTFILE=$HOME/.zsh-history
  211. HISTSIZE=100000
  212. SAVEHIST=100000
  213. setopt prompt_subst
  214. setopt interactive_comments
  215. fi
  216. ######################
  217. # Print welcome messages
  218. command -v fortune >/dev/null && {
  219. if command -v cowsay >/dev/null
  220. then
  221. fortune | cowsay
  222. echo
  223. fortune -o | cowsay
  224. echo
  225. else
  226. fortune
  227. echo
  228. fortune -o
  229. echo
  230. fi
  231. }
  232. uname -a
  233. $iswindows && alias tty="echo cmd.exe"
  234. echo TERM $TERM with $(tput colors) colors using $(tty)
  235. echo
  236. __safe_run w yuk
  237. # if null type tmux
  238. # then
  239. # echo
  240. # echo tmux sessions:
  241. # tmux ls 2>/dev/null| sed -e 's/^/ /g'
  242. # echo
  243. # fi
  244. # if test -n "$TMUX"
  245. # then
  246. # tmux display -p \
  247. # 'TMUX #S:#I:#W.#P, client TERM: #{client_termname}' \
  248. # 2>/dev/null
  249. # echo
  250. # fi
  251. ###################################
  252. # some aliases and functions
  253. # __func_name: never used interactively
  254. # _func_name: usually not used interactively
  255. __safe_alias(){
  256. # __safe_alias <name>=<command>
  257. _bin=`expr "$1" : '^[^=]*=\([^ ]*\)'`
  258. test -n "$_bin" && \
  259. null type $_bin && \
  260. alias "$1"
  261. }
  262. $gnu_coreutils && _timeoption=" --time-style=long-iso"
  263. # color prefs
  264. if $gnu_coreutils
  265. then
  266. # http://qiita.com/yuyuchu3333/items/84fa4e051c3325098be3
  267. # gnu coreutils LS_COLORS is used
  268. null type dircolors && eval `dircolors`
  269. _coloroption=" --color=auto"
  270. else
  271. # export LSCOLORS=gxfxcxdxbxegedabagacad
  272. export LSCOLORS=DxGxcxdxCxegedabagacad
  273. export CLICOLOR=1
  274. fi
  275. alias ls="ls -hCF${_coloroption}${_timeoption}"
  276. _timeformat_iso="%Y-%m-%dT%H:%M:%S%z"
  277. _timeformat_rfc2822="%a, %d %b %Y %T %z"
  278. _timeformat_num="%Y%m%d%H%M%S"
  279. alias datenum="date +$_timeformat_num"
  280. # export GREP_OPTIONS=""
  281. alias gr="grep -n --color=always"
  282. $iswindows && alias gr="grep -n"
  283. alias less="less -F"
  284. __safe_alias em="emacs -nw"
  285. __safe_alias vi=vim
  286. alias pstree="LANG=C pstree"
  287. alias cp="cp -v"
  288. alias mv="mv -v"
  289. alias rm="rm -v"
  290. alias mkdir="mkdir -v"
  291. alias rmdir="rmdir -v"
  292. alias psaux="ps auxww"
  293. alias q=exit
  294. __safe_alias e3=e3em
  295. #alias dirs="dirs -v -l | \grep -v \$(printf '%s$' \$PWD)"
  296. alias po=popd
  297. alias pu=pushd
  298. __safe_alias sudo="sudo " # use aliases through sudo
  299. __safe_alias sudoe="sudoedit"
  300. # __safe_alias halt="sudo halt"
  301. # __safe_alias reboot="sudo reboot"
  302. null type dbus-send && {
  303. alias suspend="dbus-send --system --print-reply \
  304. --dest=org.freedesktop.UPower \
  305. /org/freedesktop/UPower org.freedesktop.UPower.Suspend"
  306. alias hibernate="dbus-send --system --print-reply \
  307. --dest=org.freedesktop.UPower \
  308. /org/freedesktop/UPower org.freedesktop.UPower.Hibernate"
  309. }
  310. alias rand="echo \$RANDOM"
  311. __safe_alias xunp="file-roller -h"
  312. __safe_alias pc="sudo \paco -D"
  313. alias pycalc="python -i -c 'from math import *' "
  314. __safe_alias py3=python3
  315. __safe_alias py2=python2
  316. __safe_alias ipy=ipython
  317. __safe_alias ipy3=ipython3
  318. __safe_alias ipy2=ipython2
  319. # Sometimes SHELL cannot be used. For example, when running bash inside zsh
  320. # SHELL is set to be /bin/zsh
  321. if $inbash
  322. then
  323. alias _reloadrc="rm '$__shrc_lock'; exec bash"
  324. elif $inzsh
  325. then
  326. alias _reloadrc="rm '$__shrc_lock'; exec zsh"
  327. else
  328. alias _reloadrc="rm '$__shrc_lock'; exec $SHELL"
  329. fi
  330. # alias mytime="date +%Y%m%d-%H%M%S"
  331. alias sh="ENV=$HOME/.shrc PS1=\$\ PROMPT_COMMAND="" sh"
  332. # some extra utilities
  333. # type trash >/dev/null 2>&1 && alias rm=trash
  334. __safe_alias mpg123="mpg123 -C -v --title"
  335. __safe_alias xm="xmms2"
  336. #export PLAYER="mpg123 -C -v --title"
  337. __safe_alias screen="screen -e^z^z"
  338. #alias zcd="cd \`zenity --file-selection --directory\`"
  339. __safe_alias gtags="gtags --verbose"
  340. __safe_alias htags="htags --xhtml --symbol --line-number \
  341. --frame --alphabet --verbose"
  342. __safe_alias au=aunpack
  343. # __safe_alias lv="lv|less"
  344. __safe_alias rs="rsync --progress --itemize-changes --compress"
  345. __safe_alias vagr=vagrant
  346. __safe_alias ztw='twitter set "`zenity --entry --title ztw --text Status:`"'
  347. if $iscygwin
  348. then
  349. __my_wget_options=" --no-check-certificate"
  350. __safe_alias wget="wget $__my_wget_options"
  351. fi
  352. if $isdarwin
  353. then
  354. alias updatedb="LC_ALL=C updatedb"
  355. # do not use locate installed by macports
  356. test -x /usr/bin/locate && alias locate="/usr/bin/locate"
  357. fi
  358. # somehow not work
  359. # typeset -ga chpwd_functions
  360. # chpwd_functions+=pwd
  361. # chpwd(){
  362. # pwd
  363. # }
  364. cd(){
  365. builtin cd "$@" && pwd
  366. }
  367. # pad
  368. alias pad=notepad
  369. __safe_alias pad=gedit
  370. __safe_alias pad=leafpad
  371. $isdarwin && alias pad="open -e"
  372. __find_latest_vimdir(){
  373. vimdir=/usr/share/vim
  374. if test -d "$vimdir"
  375. then
  376. find "$vimdir" -name 'vim??' -type d | sort | tail -n 1
  377. else
  378. echo ""
  379. fi
  380. }
  381. for f in /usr/share/vim/vimcurrent "`__find_latest_vimdir`"
  382. do
  383. test -n "$f" || continue
  384. f="$f/macros/less.sh"
  385. test -f $f && alias vl=$f && break
  386. done
  387. __safe_alias pa="pacman --color=always"
  388. __safe_alias pa="pacapt"
  389. __safe_alias yt=yaourt
  390. __safe_alias cower="cower --color=auto"
  391. null type pacmatic && {
  392. alias pacman="pacmatic"
  393. # variable for yaourt
  394. export PACMAN="pacmatic"
  395. }
  396. __my_pacman_update_mirrorlist_with_reflector(){
  397. ml=/etc/pacman.d/mirrorlist
  398. cmd="$(expr "$(grep -m 1 reflector $ml)" : '# With: *\(.*\)')"
  399. if test -z "$cmd"
  400. then
  401. cmd="reflector --verbose --country Japan --latest 5 --sort rate --save $ml"
  402. fi
  403. echo ">>> $cmd ..." 1>&2
  404. sudo sh -c "$cmd"
  405. }
  406. null type reflector && test -d /etc/pacman.d && \
  407. alias reflect_mirrorlist=__my_pacman_update_mirrorlist_with_reflector
  408. null type apt-get && {
  409. alias aupgrade="sudo sh -xc 'apt-get autoremove --yes && \
  410. apt-get update --yes && apt-get upgrade --yes'"
  411. alias aptin="apt-get install"
  412. alias aptsearch="apt-cache search"
  413. alias aptshow="apt-cache show"
  414. }
  415. null type port && {
  416. alias port="port -v"
  417. alias pupgrade="sudo sh -xc 'port -v selfupdate && \
  418. port -v upgrade outdated'"
  419. }
  420. if $iscygwin
  421. then
  422. null type windate || \
  423. alias windate="cmd.exe //c 'echo %DATE%-%TIME%'"
  424. # alias cygsu="cygstart /cygwinsetup.exe"
  425. fi
  426. mkpatch(){
  427. if test $# -eq 0
  428. then
  429. echo "usage: mkpatch <olddir> <newdir>"
  430. elif ! test -d "$1"
  431. then
  432. echo "mkpatch: $1 is not a directory"
  433. elif ! test -d "$2"
  434. then
  435. echo "mkpatch: $2 is not a directory"
  436. else
  437. diff -Naur "$1" "$2"
  438. fi
  439. }
  440. __sdcv_less(){
  441. command sdcv -n "$@" | less --quit-if-one-screen
  442. }
  443. command -v sdcv >/dev/null && alias dict=__sdcv_less
  444. g(){
  445. if test $# -eq 0 && null type git-info
  446. then
  447. git info
  448. else
  449. git -c color.ui=always "$@"
  450. fi
  451. }
  452. if null type _git && $inbash
  453. then
  454. # enable programmable completion for g
  455. complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
  456. || complete -o default -o nospace -F _git g
  457. fi
  458. #git svn --help >/dev/null 2>&1 && alias gsvn="git svn"
  459. __safe_alias m=gitmemo
  460. alias setup.py3="sudo python3 setup.py install --record files.txt"
  461. randomstr(){
  462. len=$1
  463. test -z "$len" && len=8
  464. uuidgen | tr -d - | cut -c 1-len
  465. }
  466. datestr(){
  467. # datestr YYYYMMDDhhmmss
  468. if test -z "$1" || test "$1" = "-h"
  469. then
  470. echo "datestr: usage: datestr <YYYYMMDDhhmmss>"
  471. return 1
  472. fi
  473. dfmt="" # actual format for date command
  474. while test -n "$1"
  475. do
  476. fmt="$1"
  477. shift
  478. while test -n "$fmt"
  479. do
  480. case "$fmt" in
  481. YYYY*|yyyy*) # year
  482. dfmt="${dfmt}%Y"
  483. fmt="`echo "$fmt" | cut -c 5-`"
  484. ;;
  485. YY*|yy*) # last two digits of year
  486. dfmt="${dfmt}%y"
  487. fmt="`echo "$fmt" | cut -c 3-`"
  488. ;;
  489. MM*) # month (01..12)
  490. dfmt="${dfmt}%m"
  491. fmt="`echo "$fmt" | cut -c 3-`"
  492. ;;
  493. DD*|dd*) # day of month (01..12)
  494. dfmt="${dfmt}%d"
  495. fmt="`echo "$fmt" | cut -c 3-`"
  496. ;;
  497. HH* | hh*) # hour (00..23)
  498. dfmt="${dfmt}%H"
  499. fmt="`echo "$fmt" | cut -c 3-`"
  500. ;;
  501. mm*) # minute (00..59)
  502. dfmt="${dfmt}%M"
  503. fmt="`echo "$fmt" | cut -c 3-`"
  504. ;;
  505. SS*|ss*) # second (00..60)
  506. dfmt="${dfmt}%S"
  507. fmt="`echo "$fmt" | cut -c 3-`"
  508. ;;
  509. *)
  510. char=`echo "$fmt" | cut -c 1`
  511. dfmt="${dfmt}${char}"
  512. fmt="`echo "$fmt" | cut -c 2-`"
  513. ;;
  514. esac
  515. done
  516. done
  517. date +"$dfmt"
  518. }
  519. # ssh(){
  520. # # __my_terminal_title ssh
  521. # command ssh "$@"
  522. # }
  523. __ssh_with_cd(){
  524. # __ssh_with_cd <host> <directory> [<arg> ...]
  525. if test -z "$2"
  526. then
  527. echo "usage: __ssh_with_cd <host> <directory> [<arg> ...]"
  528. return 1
  529. fi
  530. host="$1"
  531. shift
  532. dir="$1"
  533. shift
  534. ssh "$host" "$@" -t "cd \"$dir\"; \$SHELL -l"
  535. }
  536. memo(){
  537. if test -z "$1"
  538. then
  539. _memo="memo.txt"
  540. else
  541. _memo="$1/memo.txt"
  542. fi
  543. $EDITOR "$_memo"
  544. if test -z "`cat "$_memo"`"
  545. then
  546. echo "$_memo is empty. Removing."
  547. rm "$_memo"
  548. fi
  549. }
  550. now(){
  551. ___tformat="%Y/%m/%d %H:%M:%S %z"
  552. cal
  553. REPLY=
  554. printf "\\r`date "+${___tformat}"`"
  555. read -t 1
  556. while test $? -ne 0
  557. do
  558. printf "\\r`date "+${___tformat}"`"
  559. read -t 1
  560. done
  561. }
  562. s(){
  563. if git rev-parse --git-dir >/dev/null 2>&1
  564. then
  565. echo ">> git grep -n $@" 1>&2
  566. git grep -n "$@"
  567. elif which ag >/dev/null 2>&1
  568. then
  569. echo ">> ag --pager=\"$PAGER\" $@" 1>&2
  570. ag --pager="$PAGER" "$@"
  571. elif which ack >/dev/null 2>&1
  572. then
  573. echo ">> ack --pager=\"$PAGER\" $@" 1>&2
  574. ack --pager="$PAGER" "$@"
  575. else
  576. echo \
  577. ">> find . " \
  578. "-path '*/.git' -prune -o" \
  579. "-path '*/.svn' -prune -o" \
  580. "-type f -exec grep -nH -e --color=always $@ {} +" 1>&2
  581. if test $# -eq 0
  582. then
  583. echo "No search word given." 1>&2
  584. return 1
  585. fi
  586. find . \
  587. -path '*/.git' -prune -o \
  588. -path '*/.svn' -prune -o \
  589. -type -f -exec grep -nH -e --color=always "$@" {} + \
  590. | $PAGER
  591. fi
  592. }
  593. MYMANPATH='/usr/lib/erlang/man'
  594. if $inbash || $inzsh
  595. then
  596. man(){
  597. env \
  598. LESS_TERMCAP_mb=$(printf "\e[1;35m") \
  599. LESS_TERMCAP_md=$(printf "\e[1;31m") \
  600. LESS_TERMCAP_me=$(printf "\e[0m") \
  601. LESS_TERMCAP_se=$(printf "\e[0m") \
  602. LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
  603. LESS_TERMCAP_ue=$(printf "\e[0m") \
  604. LESS_TERMCAP_us=$(printf "\e[1;32m") \
  605. MANPATH="`manpath`:$MYMANPATH" \
  606. man "$@"
  607. }
  608. fi
  609. netwait(){
  610. while ! ping -c 1 -t 1 example.com
  611. do
  612. true
  613. done
  614. echo network works.
  615. }
  616. __realpath(){
  617. if type realpath >/dev/null 2>&1
  618. then
  619. command realpath "$@"
  620. else
  621. while ! test -d $1
  622. do
  623. shift
  624. done
  625. (command cd "$d" && echo "$PWD")
  626. # local d="$OLDPWD"
  627. # command cd "$1"
  628. # echo "$PWD"
  629. # command cd "$d"
  630. fi
  631. }
  632. tx(){
  633. tmux start-server
  634. if test -z "$1"
  635. then
  636. echo "usage: tx <session_name>"
  637. tmux list-sessions
  638. elif test -z "$TMUX"
  639. then
  640. # -A: attach if already exists
  641. # tmux new-session -A -c "$HOME" -s "$1"
  642. tmux new-session -A -s "$1"
  643. else
  644. # create new session if not exists yet
  645. # tmux has-session -t "$1" || TMUX= tmux new-session -d -c "$HOME" -s "$1"
  646. tmux has-session -t "$1" || TMUX= tmux new-session -d -s "$1"
  647. tmux switch-client -t "$1"
  648. fi
  649. }
  650. dt(){
  651. # dt [-h] [<name>] [<command ...>]
  652. __dtach_dir="${TMP}/dtach"
  653. mkdir -p "${__dtach_dir}"
  654. if test -n "${__MY_DTACH}"
  655. then
  656. # if already in dtach session print current session
  657. soc_name="`basename "$__MY_DTACH"`"
  658. echo "Current session: ${soc_name}"
  659. fi
  660. if test -z "$1"
  661. then
  662. # if no arg given show list of sessions
  663. echo "Sessions:"
  664. ls "${__dtach_dir}"
  665. return 0
  666. elif test "$1" = "-h"
  667. then
  668. echo "dt: usage: dt [-h] [<name>] [<command ...>]" 1>&2
  669. return 1
  670. fi
  671. # set socket name
  672. soc_name="${__dtach_dir}/$1"
  673. shift
  674. if test -n "$__MY_DTACH"
  675. then
  676. echo "dtach session cannot be nested." 1>&2
  677. return 1
  678. elif test -S "$soc_name"
  679. then
  680. dtach -a "$soc_name" -e ^^
  681. elif test -e "$soc_name"
  682. then
  683. echo "dt: File named $soc_name already exists."
  684. return 1
  685. elif test -z "$1"
  686. then
  687. # if no command given invoke current shell
  688. __MY_DTACH="$soc_name" dtach -c "$soc_name" -e ^^ sh -c "$SHELL"
  689. # echo "dt: Socket named $soc_name not exists and no command specified."
  690. # return 1
  691. else
  692. __MY_DTACH="$soc_name" dtach -c "$soc_name" -e ^^ "$@"
  693. fi
  694. }
  695. scr(){
  696. test -n "$1" && pf="${1}-"
  697. ___tformat="%Y%m%d-%H%M%S%z"
  698. ___file="${HOME}/${pf}`date +${___tformat}`.script"
  699. __MY_SCRIPT=${___file} script ${___file} "$@"
  700. }
  701. dtscr(){
  702. # dtscr <command ...>
  703. if test -z "$1"
  704. then
  705. echo "dtscr: usage: dtscr <command ...>"
  706. return 1
  707. fi
  708. ___cmdstr="`echo $@ | tr ' ' +`"
  709. ___tformat="%Y%m%d-%H%M%S%z"
  710. ___name="${pf}`date +${___tformat}`-${___cmdstr}"
  711. ___scr_file="${HOME}/${___name}.script"
  712. ___dt_dir="${TMP}/dtscr"
  713. mkdir -p "$___dt_dir"
  714. dtach -n "${___dt_dir}/${___name}" script "${___scr_file_}" "$@"
  715. # echo $_name
  716. # echo $_file
  717. }
  718. mcrypt_stream(){
  719. test $# -eq 2 || return 1
  720. case $1 in
  721. en)
  722. mcrypt --key $2 | base64 ;;
  723. de)
  724. base64 -d | mcrypt -d --key $2 ;;
  725. esac
  726. }
  727. gpg_stream(){
  728. test $# -eq 2 || return 1
  729. case $1 in
  730. en)
  731. gpg --passphrase $2 -c --batch |base64 ;;
  732. de)
  733. base64 -d|gpg --passphrase $2 -d --batch ;;
  734. esac
  735. }
  736. dgpg(){
  737. if test "$1" = help || test -z "$2"
  738. then
  739. echo "dgpg: dgpg <en|de> <src-suffix> [<dst-suffix>]" 1>&2
  740. return
  741. fi
  742. ___srcs="$2"
  743. ___dsts="$3"
  744. test -z "$___dsts" && ___dsts="${___srcs}.out"
  745. ___pw=
  746. echo -n "dgpg pw: "
  747. read -s ___pw
  748. echo ""
  749. test -z "$___pw" && return 1
  750. for f in *${___srcs}
  751. do
  752. ___d="$(basename "$f" "${___srcs}")${___dsts}"
  753. echo -n "Processing $f to $___d..."
  754. if test -d "$f"
  755. then
  756. echo "`printf 'failed (%s is directory)' $f`"
  757. elif test -f "$___d"
  758. then
  759. echo "`printf 'failed (%s is already exists)' $___d`"
  760. elif <"$f" gpg_stream $1 $___pw >"$___d" 2>/dev/null
  761. then
  762. echo "done"
  763. else
  764. echo "failed"
  765. test -f "$___d" && rm "$___d"
  766. fi
  767. done
  768. }
  769. alias enst="gpg_stream en"
  770. alias dest="gpg_stream de"
  771. showinfo(){
  772. echo "Japanese letters are 表示可能"
  773. __safe_run diskinfo
  774. ! $isdarwin && test -n "${DISPLAY}" && {
  775. __safe_run xrandr | \grep --color=never ^Screen
  776. }
  777. $iswindows || __safe_run finger $USER
  778. LANG=C __safe_runc id
  779. __safe_run xset q
  780. }
  781. x(){
  782. if [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then
  783. #mkdir -p ~/.var/log
  784. # nohup startx >~/.var/log/xorg.log 2>&1 &
  785. # exit
  786. exec startx
  787. else
  788. echo "X cant be started! Another X is already running?" 1>&2
  789. fi
  790. }
  791. bak(){
  792. for file in "$@"
  793. do
  794. cp -v ${file} ${file}.bak
  795. done
  796. }
  797. di(){
  798. if type colordiff >/dev/null 2>&1 && test $TERM != dumb
  799. then
  800. ___diffcmd=colordiff
  801. else
  802. ___diffcmd=diff
  803. fi
  804. ${___diffcmd} -u "$@" | ${PAGER}
  805. }
  806. tb(){
  807. __datenum=`date +%Y%m%d-%H%M%S`
  808. __tb="$HOME/.var/tb/$__datenum"
  809. mkdir -p "$__tb"
  810. mv "$@" "$__tb"
  811. }
  812. mkdd(){
  813. _d=`date +%Y%m%d-%H%M%S` && \
  814. mkdir -p "$_d"
  815. }
  816. mkcd(){
  817. if test -z "$1"
  818. then
  819. echo "mkcd: usage: mkcd <dir>"
  820. return 1
  821. elif test -d "$1"
  822. then
  823. echo "Dir \"$1\" already exists."
  824. else
  825. mkdir -p "$1"
  826. echo "Dir \"$1\" created."
  827. fi
  828. cd "$1"
  829. }
  830. mkcdd(){
  831. # make and change date directory
  832. _d=`date +%Y%m%d-%H%M%S` && \
  833. mkcd "$_d"
  834. }
  835. if test -n "$TMUX" && null type reattach-to-user-namespace
  836. then
  837. alias pbpaste="reattach-to-user-namespace pbpaste"
  838. alias pbcopy="reattach-to-user-namespace pbcopy"
  839. fi
  840. catclip(){
  841. if $iswindows
  842. then
  843. cat /dev/clipboard | tr -d \\r
  844. elif $isdarwin
  845. then
  846. pbpaste
  847. else
  848. xclip -o -selection "clipboard"
  849. fi
  850. }
  851. setclip(){
  852. if test $# -eq 0
  853. then
  854. exec 3<&0
  855. else
  856. exec 3<<__EOF__
  857. `cat "$@"`
  858. __EOF__
  859. fi
  860. if $iswindows
  861. then
  862. 0<&3 sed -e 's/$/\r/' | tee /dev/clipboard
  863. elif $isdarwin
  864. then
  865. pbcopy 0<&3
  866. else
  867. 0<&3 xclip -i -f -selection "primary" | \
  868. xclip -i -f -selection "clipboard"
  869. fi
  870. exec 3<&-
  871. }
  872. open_file(){
  873. if $iscygwin
  874. then
  875. cygstart "$@"
  876. elif $ismsys
  877. then
  878. cmd.exe //c start "" "$@"
  879. elif $isdarwin
  880. then
  881. touch "$@"
  882. open "$@"
  883. elif $islinux
  884. then
  885. touch "$@"
  886. if null type pcmanfm; then
  887. LC_MESSAGES= pcmanfm "$@"
  888. else
  889. LC_MESSAGES= xdg-open "$@" &
  890. fi
  891. else
  892. cat "$@"
  893. fi
  894. }
  895. o(){
  896. if test $# -eq 0
  897. then
  898. open_file .
  899. else
  900. for f in "$@"
  901. do
  902. open_file "$(realpath "$f")"
  903. done
  904. fi
  905. }
  906. convmv_sjis2utf8_test(){
  907. convmv -r -f sjis -t utf8 *
  908. }
  909. convmv_sjis2utf8_notest(){
  910. convmv -r -f sjis -t utf8 * --notest
  911. }
  912. #################################################
  913. ## pastebin services
  914. ## https://wiki.archlinux.org/index.php/List_of_Applications/Internet#Pastebin_clients
  915. sprunge(){
  916. # http://sprunge.us
  917. if test -z "$1"
  918. then
  919. curl -F 'sprunge=<-' http://sprunge.us
  920. else
  921. curl http://sprunge.us/$1
  922. fi
  923. }
  924. dpaste(){
  925. # http://dpaste.de
  926. if test -z "$1"
  927. then
  928. curl -F 'content=<-' https://dpaste.de/api/
  929. echo
  930. else
  931. curl https://dpaste.de/$1/raw/
  932. fi
  933. }
  934. ######################################
  935. ## Prompt Settings
  936. __my_moc_state(){
  937. type mocp >/dev/null 2>&1 || return
  938. test "`mocp -Q %state 2>/dev/null`" = PLAY || return
  939. printf "$1" "`mocp -Q %title 2>/dev/null`"
  940. }
  941. __my_parse_svn_branch() {
  942. ___svn_url=$(LANG=C svn info 2>/dev/null | sed -ne 's#^URL: ##p')
  943. ___svn_repository_root=$(LANG=C svn info 2>/dev/null | \
  944. sed -ne 's#^Repository Root: ##p')
  945. echo ${___svn_url} | sed -e 's#^'"${___svn_repository_root}"'##g' | \
  946. awk '{print $1}'
  947. }
  948. __my_svn_ps1(){
  949. if svn status >/dev/null 2>&1
  950. then
  951. ___svn_branch=$(__my_parse_svn_branch)
  952. test -n "${___svn_branch}" && printf "$1" "{$___svn_branch}"
  953. fi
  954. }
  955. __my_battery_status(){
  956. ___dir=/sys/class/power_supply/BAT0
  957. if test -d $___dir && test -r $___dir/status && test -r $___dir/charge_full && \
  958. test -r $___dir/charge_now
  959. then
  960. ___st=$(cat $___dir/status)
  961. ___full=$(cat $___dir/charge_full)
  962. ___now=$(cat $___dir/charge_now)
  963. ___rate=$(expr $now \* 100 / $full)
  964. printf "$1" "${___st}:${___rate}%"
  965. fi
  966. }
  967. alias bat='__my_battery_status %s\\n'
  968. __my_ps1_scale(){
  969. if null type stty && ! $ismsys
  970. then
  971. echo "[LxC:`stty size | tr -d $'\n' | tr " " x`]"
  972. fi
  973. }
  974. __my_ps1_tmux(){
  975. null type tmux || return $last
  976. ___tmuxc="$(tmux display -p '#S:#I:#W.#P' 2>/dev/null)"
  977. test -n "$TMUX" && echo "[TMUX:$___tmuxc]"
  978. }
  979. __my_ps1_moc(){
  980. __my_moc_state "[MOC:%s]"
  981. }
  982. for f in /usr/share/git/git-prompt.sh \
  983. /usr/local/share/git-core/contrib/completion/git-prompt.sh \
  984. /etc/bash_completion.d/git-prompt \
  985. /opt/local/share/git-core/git-prompt.sh \
  986. /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh
  987. do
  988. test -r "$f" && ($inbash || $inzsh) && . "$f" && break
  989. done
  990. GIT_PS1_SHOWDIRTYSTATE=t
  991. GIT_PS1_SHOWUPSTREAM=t
  992. __my_ps1_git(){
  993. null type __git_ps1 || return $last
  994. null git rev-parse --git-dir >/dev/null 2>&1 || return $last
  995. __git_ps1 "[GIT:$(__safe_run git config --get user.name):%s]"
  996. }
  997. __printf_ipaddr(){
  998. # ipaddress <fmt>
  999. type ip >/dev/null 2>&1 || return 1
  1000. ___ip=$(LANG=C ip addr show scope global | \
  1001. \grep --color=never --only-matching 'inet [^ ]*' | cut -d " " -f 2)
  1002. test -n "$___ip" && printf "$1" $___ip
  1003. }
  1004. alias addr="__printf_ipaddr '%s
  1005. '"
  1006. __my_ps1_ipaddr(){
  1007. ! $iswindows && __printf_ipaddr '[Addr:%s]'
  1008. }
  1009. __my_ps1_bttry(){
  1010. ___bst="${TMP}/batterystatus"
  1011. if test -z "$DISPLAY" && ! $iswindows
  1012. then
  1013. test -f $___bst && ___bstr="$(cat $___bst)"
  1014. test -n "$___bstr" && ! echo $___bstr | grep 100 >/dev/null 2>&1 && \
  1015. echo "[Battery:$___bstr]"
  1016. __my_battery_status %s >$___bst &
  1017. fi
  1018. }
  1019. __my_ps1_memo(){
  1020. test -f memo.txt && echo "m:`du -b memo.txt|cut -f 1`"
  1021. }
  1022. __my_ps1_dirs(){
  1023. dirs | wc -l
  1024. }
  1025. __my_ps1_jobs(){
  1026. # __my_ps1_jobs [<num>]
  1027. if test -n "$1"
  1028. then
  1029. jobs="$1"
  1030. else
  1031. jobs="`jobs | wc -l`"
  1032. fi
  1033. if test "$jobs" -gt 0
  1034. then
  1035. echo "JOBS:$jobs"
  1036. fi
  1037. }
  1038. __my_alert_fail(){
  1039. test $laststatus -eq 0 || \
  1040. echo "STATUS:${laststatus}"
  1041. }
  1042. # About ansi escape sequences
  1043. # http://archive.linux.or.jp/JF/JFdocs/Bash-Prompt-HOWTO-5.html
  1044. # http://www.grapecity.com/japan/powernews/column/clang/047/page02.htm
  1045. if $inbash || $inzsh
  1046. then
  1047. if $inzsh
  1048. then
  1049. __attr_beg=$'%{\033['
  1050. __attr_end='m%}'
  1051. else
  1052. __attr_beg='\[\033['
  1053. __attr_end='m\]'
  1054. fi
  1055. __color_default="${__attr_beg}0${__attr_end}"
  1056. __color_black="${__attr_beg}0;30${__attr_end}"
  1057. __color_red="${__attr_beg}0;31${__attr_end}"
  1058. __color_green="${__attr_beg}0;32${__attr_end}"
  1059. __color_brown="${__attr_beg}0;33${__attr_end}"
  1060. __color_blue="${__attr_beg}0;34${__attr_end}"
  1061. __color_purple="${__attr_beg}0;35${__attr_end}"
  1062. __color_cyan="${__attr_beg}0;36${__attr_end}"
  1063. __color_light_gray="${__attr_beg}0;37${__attr_end}"
  1064. __color_dark_gray="${__attr_beg}1;30${__attr_end}"
  1065. __color_light_red="${__attr_beg}1;31${__attr_end}"
  1066. __color_light_green="${__attr_beg}1;32${__attr_end}"
  1067. __color_yellow="${__attr_beg}1;33${__attr_end}"
  1068. __color_light_blue="${__attr_beg}1;34${__attr_end}"
  1069. __color_light_purple="${__attr_beg}1;35${__attr_end}"
  1070. __color_light_cyan="${__attr_beg}1;36${__attr_end}"
  1071. __color_white="${__attr_beg}1;37${__attr_end}"
  1072. __color_bg_black="${__attr_beg}40${__attr_end}"
  1073. __color_bg_red="${__attr_beg}41${__attr_end}"
  1074. __color_bg_green="${__attr_beg}42${__attr_end}"
  1075. __color_bg_brown="${__attr_beg}43${__attr_end}"
  1076. __color_bg_blue="${__attr_beg}44${__attr_end}"
  1077. __color_bg_purple="${__attr_beg}45${__attr_end}"
  1078. __color_bg_cyan="${__attr_beg}46${__attr_end}"
  1079. __color_bg_light_gray="${__attr_beg}47${__attr_end}"
  1080. __attr_underline="${__attr_beg}4${__attr_end}"
  1081. __attr_reverse="${__attr_beg}7${__attr_end}"
  1082. __attr_bold="${__attr_beg}1${__attr_end}"
  1083. fi
  1084. # NOTE: tput is another easy way to set colors and background
  1085. # For example, "$(tput setab 4)text$(tput sgr0)" print text with background
  1086. # color blue.
  1087. # http://www.ibm.com/developerworks/jp/linux/aix/library/au-learningtput/index.html
  1088. if test "$TERM" != dumb
  1089. then
  1090. __my_c1="$__attr_bold$__attr_underline" # color for PWD
  1091. __my_c2="$__attr_bold$__attr_underline" # color for user and hostname
  1092. # color for ::
  1093. case "`hostname`" in
  1094. arch-aspireone)
  1095. __my_c4="$__color_yellow"
  1096. ;;
  1097. arch-mba)
  1098. __my_c4="$__color_light_cyan"
  1099. ;;
  1100. newkiwi)
  1101. __my_c4="$__color_light_purple"
  1102. ;;
  1103. debian-vb-win7-opti)
  1104. __my_c4="$__color_light_red"
  1105. ;;
  1106. *)
  1107. __my_c4="$__color_light_green"
  1108. ;;
  1109. esac
  1110. __my_c5="$__color_black$__color_bg_light_gray" # color for SCR
  1111. __my_cdef="$__color_default"
  1112. fi
  1113. if $inbash
  1114. then
  1115. __my_ps1_sh="[BASH:$BASH_VERSION]"
  1116. elif $inzsh
  1117. then
  1118. __my_ps1_sh="[ZSH:$ZSH_VERSION]"
  1119. fi
  1120. __my_ps1_info1(){
  1121. # first line of PS1
  1122. echo "${__my_ps1_sh}$(__my_ps1_scale)$(__my_ps1_git)$(__my_ps1_bttry)$(__my_ps1_moc)"
  1123. }
  1124. test -n "$__MY_SCRIPT" && \
  1125. __my_ps1_str_scr="SCR"
  1126. test -n "$SSH_CONNECTION" && \
  1127. __my_ps1_str_ssh="SSH"
  1128. test -n "$__MY_DTACH" && \
  1129. __my_ps1_str_dt="DT:`basename "$__MY_DTACH$"`"
  1130. __my_ps1_info2(){
  1131. # second line of PS1
  1132. echo $(__my_ps1_memo) $(__my_ps1_jobs) ${__my_ps1_str_scr} \
  1133. ${__my_ps1_str_ssh} ${__my_ps1_str_dt} $(__my_alert_fail) \
  1134. | sed -e 's/ /|/g'
  1135. }
  1136. __my_ps1_beg="${__my_c4}:: ${__my_cdef}"
  1137. __my_ps1_save_pos="\[\033[s\]"
  1138. __my_ps1_restore_pos="\[\033[u\]"
  1139. __my_ps1_move_rightmost="\[\033[\$(tput cols)C\]"
  1140. __my_ps1_move_15left="\[\033[15D\]"
  1141. # collapse when command line is too long and try to write over this string
  1142. # __my_ps1_right="${__my_ps1_save_pos}${__my_ps1_move_rightmost}"
  1143. # ${__my_ps1_move_15left}\D{%Y/%m/%d %H:%M}${__my_ps1_restore_pos}
  1144. if $inzsh
  1145. then
  1146. PROMPT="\
  1147. ${__my_ps1_beg}[${__my_c2}%n@%M${__my_cdef}:${__my_c1}%~/${__my_cdef}]\$(__my_ps1_info1)
  1148. ${__my_ps1_beg}\$(__my_ps1_info2) %# "
  1149. RPROMPT="%D{%Y/%m/%d %H:%M}"
  1150. elif $inbash
  1151. then
  1152. PS1="\
  1153. ${__my_ps1_beg}[${__my_c2}\u@\H${__my_cdef}:${__my_c1}\w/${__my_cdef}]\$(__my_ps1_info1)\n\
  1154. ${__my_ps1_beg}\D{%Y/%m/%d %H:%M} \$(__my_ps1_info2)${__my_ps1_right} \$ "
  1155. else
  1156. true
  1157. # PS1="$(printf $(whoami)@$(hostname)$ )"
  1158. fi
  1159. ###################################
  1160. # set header and titles
  1161. __my_set_header_line(){
  1162. # save current position
  1163. printf "\033[s"
  1164. # move to 0,0
  1165. printf "\033[0;0H"
  1166. # clear curent to eol
  1167. printf "\033[K"
  1168. # inverse color
  1169. printf "\033[7m"
  1170. printf "$1"
  1171. # restore color
  1172. printf "\033[0m"
  1173. # restore saved position
  1174. printf "\033[u"
  1175. }
  1176. __my_set_screen_name(){
  1177. # set window name
  1178. if test -n "$TMUX" && test -z "$INSIDE_EMACS"
  1179. then
  1180. echo -ne "\033k$1\033\\"
  1181. fi
  1182. }
  1183. __my_set_title(){
  1184. case $TERM in
  1185. (rxvt*|xterm*|aterm|screen*)
  1186. test -t 1 &&
  1187. test -z "$EMACS" &&
  1188. echo -n -e "\033]0;$1\007"
  1189. ;;
  1190. esac
  1191. }
  1192. if test -n "$TMUX"
  1193. then
  1194. # running tmux locally
  1195. __terminal_title="\$(basename \${PWD})"
  1196. elif test -n "$SSH_CONNECTION" && expr "$TERM" : '^screen' >/dev/null
  1197. then
  1198. # ssh connect from tmux terminal
  1199. __terminal_title="`whoami`@`hostname`:\$(basename \${PWD})"
  1200. else
  1201. __terminal_title="`whoami`@`hostname`:\${PWD}"
  1202. fi
  1203. if $inzsh
  1204. then
  1205. precmd(){
  1206. laststatus=$?
  1207. eval __my_set_title ${__terminal_title}
  1208. }
  1209. else
  1210. PROMPT_COMMAND="laststatus=\$?;__my_set_title \"${__terminal_title}\";$PROMPT_COMMAND"
  1211. fi
  1212. laststatus=0