Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

a calculator for zsh-4.x



Dear zsh-users:

In my excitement over zsh-4.x, I bring to you some sample calculator
functions to enhance your zsh experience. However, I haven't searched this
mailing list for similar subjects at all, and I am ignorant of this mailing
list past posts. Perhaps I'm duplicating suggestions here, but I hope this
is helpful.

I don't know about you, but I reach for zsh when I want to calculate
addition in hexadecimal (like whenever I have read a linux ksymoops
message). With the following .zshrc snippet, my shell becomes a
convenient-to-type calculator:

Code Snippet:
# -----------------------------------------------------------------begin
# calculator - paste me into your .zshrc
# ----------------------------------------------------------------------

# Here are some quick calculators that output in integer
# hexadecimal, decimal, and binary.
zcalc ()  { print $(( ans = ${1:-ans} )) }
zcalch () { print $(( [#16] ans = ${1:-ans} )) }
zcalcd () { print $(( [#10] ans = ${1:-ans} )) }
zcalco () { print $(( [#8] ans = ${1:-ans} )) }
zcalcb () { print $(( [#2] ans = ${1:-ans} )) }

# A key binding that will allow you to quickly get into zcalc
bindkey -s '\C-xd' "zcalc \'"

# this last one lets you calculate the ascii value of a single character
zcalcasc () { print $(( [#16] ans = ##${1:-ans} )) }
# -------------------------------------------------------------------end

Usage example:
%> zcalc '23 / 3'       # integer math
7

%> zcalc '23.0 / 3'     # forced floating point math
7.666666666666667

%> zcalc '23 % 3'      # programmers love to mod
2

%> zcalc 'ans + 2'     # your last answer is still there
4

%> zcalc '0xCD & 0x23'   # uh, why are you bit masking?
1

%> zcalc '0xCD | 0x23'    # or you like "or"?
239

%> zcalcb ; zcalco ; zcalcd ; zcalch  # I want it in a readable format
please.
2#11101111
8#357
239
16#EF

%> zcalch '2#11101111 & 0211' # mix the input bases
16#C3

Recommended convenience feature:
Try the bindkey Control-X d. It's a quick jump into zsh-based calculator.
You only need to worry about adding the last quotation mark. (Ugh)

Call for advice:
Actually, I'm most interested in enhancing the bindkey definition. Placing
just one quotation mark on the command line seems to be sloppy. I wish I was
able to set the position of the cursor at any arbitrary point of the
inserted string, just like in emacs. Anybody have any suggestions? I guess
this is just the whole reason for posting...

Instead of putting this in my .zshrc file, is it better to make it a zsh
module?

HTH, HAND
  ,-~-.
 < ^ ; ~,  Clifford Escobar CAOILE  (aka "Piyo-kun")
  (_  _,
   J~~>  _.___...:.__..__.: __.:_. .:_.__::_..:._::._...  _____ p(^_^)q





Messages sorted by: Reverse Date, Date, Thread, Author