calc-menu.el 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672
  1. ;;; calc-menu.el --- a menu for Calc
  2. ;; Copyright (C) 2007-2017 Free Software Foundation, Inc.
  3. ;; This file is part of GNU Emacs.
  4. ;; GNU Emacs is free software: you can redistribute it and/or modify
  5. ;; it under the terms of the GNU General Public License as published by
  6. ;; the Free Software Foundation, either version 3 of the License, or
  7. ;; (at your option) any later version.
  8. ;; GNU Emacs is distributed in the hope that it will be useful,
  9. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. ;; GNU General Public License for more details.
  12. ;; You should have received a copy of the GNU General Public License
  13. ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
  14. ;;; Commentary:
  15. (defvar calc-arithmetic-menu
  16. (list "Arithmetic"
  17. (list "Basic"
  18. ["-(1:)" calc-change-sign
  19. :keys "n" :active (>= (calc-stack-size) 1)]
  20. ["(2:) + (1:)" calc-plus
  21. :keys "+" :active (>= (calc-stack-size) 2)]
  22. ["(2:) - (1:)" calc-minus
  23. :keys "-" :active (>= (calc-stack-size) 2)]
  24. ["(2:) * (1:)" calc-times
  25. :keys "*" :active (>= (calc-stack-size) 2)]
  26. ["(2:) / (1:)" calc-divide
  27. :keys "/" :active (>= (calc-stack-size) 2)]
  28. ["(2:) ^ (1:)" calc-power
  29. :keys "^" :active (>= (calc-stack-size) 2)]
  30. ["(2:) ^ (1/(1:))"
  31. (progn
  32. (require 'calc-ext)
  33. (let ((calc-inverse-flag t))
  34. (call-interactively 'calc-power)))
  35. :keys "I ^"
  36. :active (>= (calc-stack-size) 2)
  37. :help "The (1:)th root of (2:)"]
  38. ["abs(1:)"
  39. (progn
  40. (require 'calc-arith)
  41. (call-interactively 'calc-abs))
  42. :keys "A"
  43. :active (>= (calc-stack-size) 1)
  44. :help "Absolute value"]
  45. ["1/(1:)"
  46. (progn
  47. (require 'calc-arith)
  48. (call-interactively 'calc-inv))
  49. :keys "&"
  50. :active (>= (calc-stack-size) 1)]
  51. ["sqrt(1:)"
  52. (progn
  53. (require 'calc-math)
  54. (call-interactively 'calc-sqrt))
  55. :keys "Q"
  56. :active (>= (calc-stack-size) 1)]
  57. ["idiv(2:,1:)"
  58. (progn
  59. (require 'calc-arith)
  60. (call-interactively 'calc-idiv))
  61. :keys "\\"
  62. :active (>= (calc-stack-size) 2)
  63. :help "The integer quotient of (2:) over (1:)"]
  64. ["(2:) mod (1:)"
  65. (progn
  66. (require 'calc-misc)
  67. (call-interactively 'calc-mod))
  68. :keys "%"
  69. :active (>= (calc-stack-size) 2)
  70. :help "The remainder when (2:) is divided by (1:)"])
  71. (list "Rounding"
  72. ["floor(1:)"
  73. (progn
  74. (require 'calc-arith)
  75. (call-interactively 'calc-floor))
  76. :keys "F"
  77. :active (>= (calc-stack-size) 1)
  78. :help "The greatest integer less than or equal to (1:)"]
  79. ["ceiling(1:)"
  80. (progn
  81. (require 'calc-arith)
  82. (call-interactively 'calc-ceiling))
  83. :keys "I F"
  84. :active (>= (calc-stack-size) 1)
  85. :help "The smallest integer greater than or equal to (1:)"]
  86. ["round(1:)"
  87. (progn
  88. (require 'calc-arith)
  89. (call-interactively 'calc-round))
  90. :keys "R"
  91. :active (>= (calc-stack-size) 1)
  92. :help "The nearest integer to (1:)"]
  93. ["truncate(1:)"
  94. (progn
  95. (require 'calc-arith)
  96. (call-interactively 'calc-trunc))
  97. :keys "I R"
  98. :active (>= (calc-stack-size) 1)
  99. :help "The integer part of (1:)"])
  100. (list "Complex Numbers"
  101. ["Re(1:)"
  102. (progn
  103. (require 'calc-cplx)
  104. (call-interactively 'calc-re))
  105. :keys "f r"
  106. :active (>= (calc-stack-size) 1)]
  107. ["Im(1:)"
  108. (progn
  109. (require 'calc-cplx)
  110. (call-interactively 'calc-im))
  111. :keys "f i"
  112. :active (>= (calc-stack-size) 1)]
  113. ["conj(1:)"
  114. (progn
  115. (require 'calc-cplx)
  116. (call-interactively 'calc-conj))
  117. :keys "J"
  118. :active (>= (calc-stack-size) 1)
  119. :help "The complex conjugate of (1:)"]
  120. ["length(1:)"
  121. (progn (require 'calc-arith)
  122. (call-interactively 'calc-abs))
  123. :keys "A"
  124. :active (>= (calc-stack-size) 1)
  125. :help "The length (absolute value) of (1:)"]
  126. ["arg(1:)"
  127. (progn
  128. (require 'calc-cplx)
  129. (call-interactively 'calc-argument))
  130. :keys "G"
  131. :active (>= (calc-stack-size) 1)
  132. :help "The argument (polar angle) of (1:)"])
  133. (list "Conversion"
  134. ["Convert (1:) to a float"
  135. (progn
  136. (require 'calc-ext)
  137. (call-interactively 'calc-float))
  138. :keys "c f"
  139. :active (>= (calc-stack-size) 1)]
  140. ["Convert (1:) to a fraction"
  141. (progn
  142. (require 'calc-ext)
  143. (call-interactively 'calc-fraction))
  144. :keys "c F"
  145. :active (>= (calc-stack-size) 1)])
  146. (list "Binary"
  147. ["Set word size"
  148. (progn
  149. (require 'calc-bin)
  150. (call-interactively 'calc-word-size))
  151. :keys "b w"]
  152. ["Clip (1:) to word size"
  153. (progn
  154. (require 'calc-bin)
  155. (call-interactively 'calc-clip))
  156. :keys "b c"
  157. :active (>= (calc-stack-size) 1)
  158. :help "Reduce (1:) modulo 2^wordsize"]
  159. ["(2:) and (1:)"
  160. (progn
  161. (require 'calc-bin)
  162. (call-interactively 'calc-and))
  163. :keys "b a"
  164. :active (>= (calc-stack-size) 2)
  165. :help "Bitwise AND [modulo 2^wordsize]"]
  166. ["(2:) or (1:)"
  167. (progn
  168. (require 'calc-bin)
  169. (call-interactively 'calc-or))
  170. :keys "b o"
  171. :active (>= (calc-stack-size) 2)
  172. :help "Bitwise inclusive OR [modulo 2^wordsize]"]
  173. ["(2:) xor (1:)"
  174. (progn
  175. (require 'calc-bin)
  176. (call-interactively 'calc-xor))
  177. :keys "b x"
  178. :active (>= (calc-stack-size) 2)
  179. :help "Bitwise exclusive OR [modulo 2^wordsize]"]
  180. ["diff(2:,1:)"
  181. (progn
  182. (require 'calc-bin)
  183. (call-interactively 'calc-diff))
  184. :keys "b d"
  185. :active (>= (calc-stack-size) 2)
  186. :help "Bitwise difference [modulo 2^wordsize]"]
  187. ["not (1:)"
  188. (progn
  189. (require 'calc-bin)
  190. (call-interactively 'calc-not))
  191. :keys "b n"
  192. :active (>= (calc-stack-size) 1)
  193. :help "Bitwise NOT [modulo 2^wordsize]"]
  194. ["left shift(1:)"
  195. (progn
  196. (require 'calc-bin)
  197. (call-interactively 'calc-lshift-binary))
  198. :keys "b l"
  199. :active (>= (calc-stack-size) 1)
  200. :help "Shift (1:)[modulo 2^wordsize] one bit left"]
  201. ["right shift(1:)"
  202. (progn
  203. (require 'calc-bin)
  204. (call-interactively 'calc-rshift-binary))
  205. :keys "b r"
  206. :active (>= (calc-stack-size) 1)
  207. :help "Shift (1:)[modulo 2^wordsize] one bit right, putting 0s on the left"]
  208. ["arithmetic right shift(1:)"
  209. (progn
  210. (require 'calc-bin)
  211. (call-interactively 'calc-rshift-arith))
  212. :keys "b R"
  213. :active (>= (calc-stack-size) 1)
  214. :help "Shift (1:)[modulo 2^wordsize] one bit right, duplicating the leftmost bit"]
  215. ["rotate(1:)"
  216. (progn
  217. (require 'calc-bin)
  218. (call-interactively 'calc-rotate-binary))
  219. :keys "b t"
  220. :active (>= (calc-stack-size) 1)
  221. :help "Rotate (1:)[modulo 2^wordsize] one bit left"])
  222. "-------"
  223. ["Help on Arithmetic"
  224. (calc-info-goto-node "Arithmetic")])
  225. "Menu for Calc's arithmetic functions.")
  226. (defvar calc-scientific-function-menu
  227. (list "Scientific Functions"
  228. (list "Constants"
  229. ["pi"
  230. (progn
  231. (require 'calc-math)
  232. (call-interactively 'calc-pi))
  233. :keys "P"]
  234. ["e"
  235. (progn
  236. (require 'calc-math)
  237. (let ((calc-hyperbolic-flag t))
  238. (call-interactively 'calc-pi)))
  239. :keys "H P"]
  240. ["phi"
  241. (progn
  242. (require 'calc-math)
  243. (let ((calc-inverse-flag t)
  244. (calc-hyperbolic-flag t))
  245. (call-interactively 'calc-pi)))
  246. :keys "I H P"
  247. :help "The golden ratio"]
  248. ["gamma"
  249. (progn
  250. (require 'calc-math)
  251. (let ((calc-inverse-flag t))
  252. (call-interactively 'calc-pi)))
  253. :keys "I P"
  254. :help "Euler's constant"])
  255. (list "Logs and Exps"
  256. ["ln(1:)"
  257. (progn
  258. (require 'calc-math)
  259. (call-interactively 'calc-ln))
  260. :keys "L"
  261. :active (>= (calc-stack-size) 1)
  262. :help "The natural logarithm"]
  263. ["e^(1:)"
  264. (progn
  265. (require 'calc-math)
  266. (call-interactively 'calc-exp))
  267. :keys "E"
  268. :active (>= (calc-stack-size) 1)]
  269. ["log(1:) [base 10]"
  270. (progn
  271. (require 'calc-math)
  272. (call-interactively 'calc-log10))
  273. :keys "H L"
  274. :active (>= (calc-stack-size) 1)
  275. :help "The common logarithm"]
  276. ["10^(1:)"
  277. (progn
  278. (require 'calc-math)
  279. (let ((calc-inverse-flag t))
  280. (call-interactively 'calc-log10)))
  281. :keys "I H L"
  282. :active (>= (calc-stack-size) 1)]
  283. ["log(2:) [base(1:)]"
  284. (progn
  285. (require 'calc-math)
  286. (call-interactively 'calc-log))
  287. :keys "B"
  288. :active (>= (calc-stack-size) 2)
  289. :help "The logarithm with an arbitrary base"]
  290. ["(2:) ^ (1:)"
  291. calc-power
  292. :keys "^"
  293. :active (>= (calc-stack-size) 2)])
  294. (list "Trigonometric Functions"
  295. ["sin(1:)"
  296. (progn
  297. (require 'calc-math)
  298. (call-interactively 'calc-sin))
  299. :keys "S"
  300. :active (>= (calc-stack-size) 1)]
  301. ["cos(1:)"
  302. (progn
  303. (require 'calc-math)
  304. (call-interactively 'calc-cos))
  305. :keys "C"
  306. :active (>= (calc-stack-size) 1)]
  307. ["tan(1:)"
  308. (progn
  309. (require 'calc-math)
  310. (call-interactively 'calc-tan))
  311. :keys "T"
  312. :active (>= (calc-stack-size) 1)]
  313. ["arcsin(1:)"
  314. (progn
  315. (require 'calc-math)
  316. (call-interactively 'calc-arcsin))
  317. :keys "I S"
  318. :active (>= (calc-stack-size) 1)]
  319. ["arccos(1:)"
  320. (progn
  321. (require 'calc-math)
  322. (call-interactively 'calc-arccos))
  323. :keys "I C"
  324. :active (>= (calc-stack-size) 1)]
  325. ["arctan(1:)"
  326. (progn
  327. (require 'calc-math)
  328. (call-interactively 'calc-arctan))
  329. :keys "I T"
  330. :active (>= (calc-stack-size) 1)]
  331. ["arctan2(2:,1:)"
  332. (progn
  333. (require 'calc-math)
  334. (call-interactively 'calc-arctan2))
  335. :keys "f T"
  336. :active (>= (calc-stack-size) 2)]
  337. "--Angle Measure--"
  338. ["Radians"
  339. (progn
  340. (require 'calc-math)
  341. (calc-radians-mode))
  342. :keys "m r"
  343. :style radio
  344. :selected (eq calc-angle-mode 'rad)]
  345. ["Degrees"
  346. (progn
  347. (require 'calc-math)
  348. (calc-degrees-mode))
  349. :keys "m d"
  350. :style radio
  351. :selected (eq calc-angle-mode 'deg)]
  352. ["HMS"
  353. (progn
  354. (require 'calc-math)
  355. (calc-hms-mode))
  356. :keys "m h"
  357. :style radio
  358. :selected (eq calc-angle-mode 'hms)])
  359. (list "Hyperbolic Functions"
  360. ["sinh(1:)"
  361. (progn
  362. (require 'calc-math)
  363. (call-interactively 'calc-sinh))
  364. :keys "H S"
  365. :active (>= (calc-stack-size) 1)]
  366. ["cosh(1:)"
  367. (progn
  368. (require 'calc-math)
  369. (call-interactively 'calc-cosh))
  370. :keys "H C"
  371. :active (>= (calc-stack-size) 1)]
  372. ["tanh(1:)"
  373. (progn
  374. (require 'calc-math)
  375. (call-interactively 'calc-tanh))
  376. :keys "H T"
  377. :active (>= (calc-stack-size) 1)]
  378. ["arcsinh(1:)"
  379. (progn
  380. (require 'calc-math)
  381. (call-interactively 'calc-arcsinh))
  382. :keys "I H S"
  383. :active (>= (calc-stack-size) 1)]
  384. ["arccosh(1:)"
  385. (progn
  386. (require 'calc-math)
  387. (call-interactively 'calc-arccosh))
  388. :keys "I H C"
  389. :active (>= (calc-stack-size) 1)]
  390. ["arctanh(1:)"
  391. (progn
  392. (require 'calc-math)
  393. (call-interactively 'calc-arctanh))
  394. :keys "I H T"
  395. :active (>= (calc-stack-size) 1)])
  396. (list "Advanced Math Functions"
  397. ["Gamma(1:)"
  398. (progn
  399. (require 'calc-comb)
  400. (call-interactively 'calc-gamma))
  401. :keys "f g"
  402. :active (>= (calc-stack-size) 1)
  403. :help "The Euler Gamma function"]
  404. ["GammaP(2:,1:)"
  405. (progn
  406. (require 'calc-funcs)
  407. (call-interactively 'calc-inc-gamma))
  408. :keys "f G"
  409. :active (>= (calc-stack-size) 2)
  410. :help "The lower incomplete Gamma function"]
  411. ["Beta(2:,1:)"
  412. (progn
  413. (require 'calc-funcs)
  414. (call-interactively 'calc-beta))
  415. :keys "f b"
  416. :active (>= (calc-stack-size) 2)
  417. :help "The Euler Beta function"]
  418. ["BetaI(3:,2:,1:)"
  419. (progn
  420. (require 'calc-funcs)
  421. (call-interactively 'calc-inc-beta))
  422. :keys "f B"
  423. :active (>= (calc-stack-size) 3)
  424. :help "The incomplete Beta function"]
  425. ["erf(1:)"
  426. (progn
  427. (require 'calc-funcs)
  428. (call-interactively 'calc-erf))
  429. :keys "f e"
  430. :active (>= (calc-stack-size) 1)
  431. :help "The error function"]
  432. ["BesselJ(2:,1:)"
  433. (progn
  434. (require 'calc-funcs)
  435. (call-interactively 'calc-bessel-J))
  436. :keys "f j"
  437. :active (>= (calc-stack-size) 2)
  438. :help "The Bessel function of the first kind (of order (2:))"]
  439. ["BesselY(2:,1:)"
  440. (progn
  441. (require 'calc-funcs)
  442. (call-interactively 'calc-bessel-Y))
  443. :keys "f y"
  444. :active (>= (calc-stack-size) 2)
  445. :help "The Bessel function of the second kind (of order (2:))"])
  446. (list "Combinatorial Functions"
  447. ["gcd(2:,1:)"
  448. (progn
  449. (require 'calc-comb)
  450. (call-interactively 'calc-gcd))
  451. :keys "k g"
  452. :active (>= (calc-stack-size) 2)]
  453. ["lcm(2:,1:)"
  454. (progn
  455. (require 'calc-comb)
  456. (call-interactively 'calc-lcm))
  457. :keys "k l"
  458. :active (>= (calc-stack-size) 2)]
  459. ["factorial(1:)"
  460. (progn
  461. (require 'calc-comb)
  462. (call-interactively 'calc-factorial))
  463. :keys "!"
  464. :active (>= (calc-stack-size) 1)]
  465. ["(2:) choose (1:)"
  466. (progn
  467. (require 'calc-comb)
  468. (call-interactively 'calc-choose))
  469. :keys "k c"
  470. :active (>= (calc-stack-size) 2)]
  471. ["permutations(2:,1:)"
  472. (progn
  473. (require 'calc-comb)
  474. (call-interactively 'calc-perm))
  475. :keys "H k c"
  476. :active (>= (calc-stack-size) 2)]
  477. ["Primality test for (1:)"
  478. (progn
  479. (require 'calc-comb)
  480. (call-interactively 'calc-prime-test))
  481. :keys "k p"
  482. :active (>= (calc-stack-size) 1)
  483. :help "For large (1:), a probabilistic test"]
  484. ["Factor (1:) into primes"
  485. (progn
  486. (require 'calc-comb)
  487. (call-interactively 'calc-prime-factors))
  488. :keys "k f"
  489. :active (>= (calc-stack-size) 1)]
  490. ["Next prime after (1:)"
  491. (progn
  492. (require 'calc-comb)
  493. (call-interactively 'calc-next-prime))
  494. :keys "k n"
  495. :active (>= (calc-stack-size) 1)]
  496. ["Previous prime before (1:)"
  497. (progn
  498. (require 'calc-comb)
  499. (call-interactively 'calc-prev-prime))
  500. :keys "I k n"
  501. :active (>= (calc-stack-size) 1)]
  502. ["phi(1:)"
  503. (progn
  504. (require 'calc-comb)
  505. (call-interactively 'calc-totient))
  506. :keys "k n"
  507. :active (>= (calc-stack-size) 1)
  508. :help "Euler's totient function"]
  509. ["random(1:)"
  510. (progn
  511. (require 'calc-comb)
  512. (call-interactively 'calc-random))
  513. :keys "k r"
  514. :active (>= (calc-stack-size) 1)
  515. :help "A random number >=1 and < (1:)"])
  516. "----"
  517. ["Help on Scientific Functions"
  518. (calc-info-goto-node "Scientific Functions")])
  519. "Menu for Calc's scientific functions.")
  520. (defvar calc-algebra-menu
  521. (list "Algebra"
  522. (list "Simplification"
  523. ["Simplify (1:)"
  524. (progn
  525. (require 'calc-alg)
  526. (call-interactively 'calc-simplify))
  527. :keys "a s"
  528. :active (>= (calc-stack-size) 1)]
  529. ["Simplify (1:) with extended rules"
  530. (progn
  531. (require 'calc-alg)
  532. (call-interactively 'calc-simplify-extended))
  533. :keys "a e"
  534. :active (>= (calc-stack-size) 1)
  535. :help "Apply possibly unsafe simplifications"])
  536. (list "Manipulation"
  537. ["Expand formula (1:)"
  538. (progn
  539. (require 'calc-alg)
  540. (call-interactively 'calc-expand-formula))
  541. :keys "a \""
  542. :active (>= (calc-stack-size) 1)
  543. :help "Expand (1:) into its defining formula, if possible"]
  544. ["Evaluate variables in (1:)"
  545. (progn
  546. (require 'calc-ext)
  547. (call-interactively 'calc-evaluate))
  548. :keys "="
  549. :active (>= (calc-stack-size) 1)]
  550. ["Make substitution in (1:)"
  551. (progn
  552. (require 'calc-alg)
  553. (call-interactively 'calc-substitute))
  554. :keys "a b"
  555. :active (>= (calc-stack-size) 1)
  556. :help
  557. "Substitute all occurrences of a sub-expression with a new sub-expression"])
  558. (list "Polynomials"
  559. ["Factor (1:)"
  560. (progn
  561. (require 'calc-alg)
  562. (call-interactively 'calc-factor))
  563. :keys "a f"
  564. :active (>= (calc-stack-size) 1)]
  565. ["Collect terms in (1:)"
  566. (progn
  567. (require 'calc-alg)
  568. (call-interactively 'calc-collect))
  569. :keys "a c"
  570. :active (>= (calc-stack-size) 1)
  571. :help "Arrange as a polynomial in a given variable"]
  572. ["Expand (1:)"
  573. (progn
  574. (require 'calc-alg)
  575. (call-interactively 'calc-expand))
  576. :keys "a x"
  577. :active (>= (calc-stack-size) 1)
  578. :help "Apply distributive law everywhere"]
  579. ["Find roots of (1:)"
  580. (progn
  581. (require 'calcalg2)
  582. (call-interactively 'calc-poly-roots))
  583. :keys "a P"
  584. :active (>= (calc-stack-size) 1)])
  585. (list "Calculus"
  586. ["Differentiate (1:)"
  587. (progn
  588. (require 'calcalg2)
  589. (call-interactively 'calc-derivative))
  590. :keys "a d"
  591. :active (>= (calc-stack-size) 1)]
  592. ["Integrate (1:) [indefinite]"
  593. (progn
  594. (require 'calcalg2)
  595. (call-interactively 'calc-integral))
  596. :keys "a i"
  597. :active (>= (calc-stack-size) 1)]
  598. ["Integrate (1:) [definite]"
  599. (progn
  600. (require 'calcalg2)
  601. (let ((var (read-string "Integration variable: ")))
  602. (calc-tabular-command 'calcFunc-integ "Integration"
  603. "intg" nil var nil nil)))
  604. :keys "C-u a i"
  605. :active (>= (calc-stack-size) 1)]
  606. ["Integrate (1:) [numeric]"
  607. (progn
  608. (require 'calcalg2)
  609. (call-interactively 'calc-num-integral))
  610. :keys "a I"
  611. :active (>= (calc-stack-size) 1)
  612. :help "Integrate using the open Romberg method"]
  613. ["Taylor expand (1:)"
  614. (progn
  615. (require 'calcalg2)
  616. (call-interactively 'calc-taylor))
  617. :keys "a t"
  618. :active (>= (calc-stack-size) 1)]
  619. ["Minimize (2:) [initial guess = (1:)]"
  620. (progn
  621. (require 'calcalg3)
  622. (call-interactively 'calc-find-minimum))
  623. :keys "a N"
  624. :active (>= (calc-stack-size) 2)
  625. :help "Find a local minimum"]
  626. ["Maximize (2:) [initial guess = (1:)]"
  627. (progn
  628. (require 'calcalg3)
  629. (call-interactively 'calc-find-maximum))
  630. :keys "a X"
  631. :active (>= (calc-stack-size) 2)
  632. :help "Find a local maximum"])
  633. (list "Solving"
  634. ["Solve equation (1:)"
  635. (progn
  636. (require 'calcalg2)
  637. (call-interactively 'calc-solve-for))
  638. :keys "a S"
  639. :active (>= (calc-stack-size) 1)]
  640. ["Solve equation (2:) numerically [initial guess = (1:)]"
  641. (progn
  642. (require 'calcalg3)
  643. (call-interactively 'calc-find-root))
  644. :keys "a R"
  645. :active (>= (calc-stack-size) 2)]
  646. ["Find roots of polynomial (1:)"
  647. (progn
  648. (require 'calcalg2)
  649. (call-interactively 'calc-poly-roots))
  650. :keys "a P"
  651. :active (>= (calc-stack-size) 1)])
  652. (list "Curve Fitting"
  653. ["Fit (1:)=[x values, y values] to a curve"
  654. (progn
  655. (require 'calcalg3)
  656. (call-interactively 'calc-curve-fit))
  657. :keys "a F"
  658. :active (>= (calc-stack-size) 1)])
  659. "----"
  660. ["Help on Algebra"
  661. (calc-info-goto-node "Algebra")])
  662. "Menu for Calc's algebraic facilities.")
  663. (defvar calc-graphics-menu
  664. (list "Graphics"
  665. ["Graph 2D [(1:)= y values, (2:)= x values]"
  666. (progn
  667. (require 'calc-graph)
  668. (call-interactively 'calc-graph-fast))
  669. :keys "g f"
  670. :active (>= (calc-stack-size) 2)]
  671. ["Graph 3D [(1:)= z values, (2:)= y values, (3:)= x values]"
  672. (progn
  673. (require 'calc-graph)
  674. (call-interactively 'calc-graph-fast-3d))
  675. :keys "g F"
  676. :active (>= (calc-stack-size) 3)]
  677. "----"
  678. ["Help on Graphics"
  679. (calc-info-goto-node "Graphics")])
  680. "Menu for Calc's graphics.")
  681. (defvar calc-vectors-menu
  682. (list "Matrices/Vectors"
  683. (list "Matrices"
  684. ["(2:) + (1:)" calc-plus
  685. :keys "+" :active (>= (calc-stack-size) 2)]
  686. ["(2:) - (1:)" calc-minus
  687. :keys "-" :active (>= (calc-stack-size) 2)]
  688. ["(2:) * (1:)" calc-times
  689. :keys "*" :active (>= (calc-stack-size) 2)]
  690. ["(1:)^(-1)"
  691. (progn
  692. (require 'calc-arith)
  693. (call-interactively 'calc-inv))
  694. :keys "&"
  695. :active (>= (calc-stack-size) 1)]
  696. ["Create an identity matrix"
  697. (progn
  698. (require 'calc-vec)
  699. (call-interactively 'calc-ident))
  700. :keys "v i"]
  701. ["transpose(1:)"
  702. (progn
  703. (require 'calc-vec)
  704. (call-interactively 'calc-transpose))
  705. :keys "v t"
  706. :active (>= (calc-stack-size) 1)]
  707. ["det(1:)"
  708. (progn
  709. (require 'calc-mtx)
  710. (call-interactively 'calc-mdet))
  711. :keys "V D"
  712. :active (>= (calc-stack-size) 1)]
  713. ["trace(1:)"
  714. (progn
  715. (require 'calc-mtx)
  716. (call-interactively 'calc-mtrace))
  717. :keys "V T"
  718. :active (>= (calc-stack-size) 1)]
  719. ["LUD decompose (1:)"
  720. (progn
  721. (require 'calc-mtx)
  722. (call-interactively 'calc-mlud))
  723. :keys "V L"
  724. :active (>= (calc-stack-size) 1)]
  725. ["Extract a row from (1:)"
  726. (progn
  727. (require 'calc-vec)
  728. (call-interactively 'calc-mrow))
  729. :keys "v r"
  730. :active (>= (calc-stack-size) 1)]
  731. ["Extract a column from (1:)"
  732. (progn
  733. (require 'calc-vec)
  734. (call-interactively 'calc-mcol))
  735. :keys "v c"
  736. :active (>= (calc-stack-size) 1)])
  737. (list "Vectors"
  738. ["Extract the first element of (1:)"
  739. (progn
  740. (require 'calc-vec)
  741. (call-interactively 'calc-head))
  742. :keys "v h"
  743. :active (>= (calc-stack-size) 1)]
  744. ["Extract an element from (1:)"
  745. (progn
  746. (require 'calc-vec)
  747. (call-interactively 'calc-mrow))
  748. :keys "v r"
  749. :active (>= (calc-stack-size) 1)]
  750. ["Reverse (1:)"
  751. (progn
  752. (require 'calc-vec)
  753. (call-interactively 'calc-reverse-vector))
  754. :keys "v v"
  755. :active (>= (calc-stack-size) 1)]
  756. ["Unpack (1:)"
  757. (progn
  758. (require 'calc-vec)
  759. (call-interactively 'calc-unpack))
  760. :keys "v u"
  761. :active (>= (calc-stack-size) 1)
  762. :help "Separate the elements of (1:)"]
  763. ["(2:) cross (1:)"
  764. (progn
  765. (require 'calc-vec)
  766. (call-interactively 'calc-cross))
  767. :keys "V C"
  768. :active (>= (calc-stack-size) 2)
  769. :help "The cross product in R^3"]
  770. ["(2:) dot (1:)"
  771. calc-mult
  772. :keys "*"
  773. :active (>= (calc-stack-size) 2)
  774. :help "The dot product"]
  775. ["Map a function across (1:)"
  776. (progn
  777. (require 'calc-map)
  778. (call-interactively 'calc-map))
  779. :keys "V M"
  780. :active (>= (calc-stack-size) 1)
  781. :help "Apply a function to each element"])
  782. (list "Vectors As Sets"
  783. ["Remove duplicates from (1:)"
  784. (progn
  785. (require 'calc-vec)
  786. (call-interactively 'calc-remove-duplicates))
  787. :keys "V +"
  788. :active (>= (calc-stack-size) 1)]
  789. ["(2:) union (1:)"
  790. (progn
  791. (require 'calc-vec)
  792. (call-interactively 'calc-set-union))
  793. :keys "V V"
  794. :active (>= (calc-stack-size) 2)]
  795. ["(2:) intersect (1:)"
  796. (progn
  797. (require 'calc-vec)
  798. (call-interactively 'calc-set-intersect))
  799. :keys "V ^"
  800. :active (>= (calc-stack-size) 2)]
  801. ["(2:) \\ (1:)"
  802. (progn
  803. (require 'calc-vec)
  804. (call-interactively 'calc-set-difference))
  805. :keys "V -"
  806. :help "Set difference"
  807. :active (>= (calc-stack-size) 2)])
  808. (list "Statistics On Vectors"
  809. ["length(1:)"
  810. (progn
  811. (require 'calc-stat)
  812. (call-interactively 'calc-vector-count))
  813. :keys "u #"
  814. :active (>= (calc-stack-size) 1)
  815. :help "The number of data values"]
  816. ["sum(1:)"
  817. (progn
  818. (require 'calc-stat)
  819. (call-interactively 'calc-vector-sum))
  820. :keys "u +"
  821. :active (>= (calc-stack-size) 1)
  822. :help "The sum of the data values"]
  823. ["max(1:)"
  824. (progn
  825. (require 'calc-stat)
  826. (call-interactively 'calc-vector-max))
  827. :keys "u x"
  828. :active (>= (calc-stack-size) 1)
  829. :help "The maximum of the data values"]
  830. ["min(1:)"
  831. (progn
  832. (require 'calc-stat)
  833. (call-interactively 'calc-vector-min))
  834. :keys "u N"
  835. :active (>= (calc-stack-size) 1)
  836. :help "The minimum of the data values"]
  837. ["mean(1:)"
  838. (progn
  839. (require 'calc-stat)
  840. (call-interactively 'calc-vector-mean))
  841. :keys "u M"
  842. :active (>= (calc-stack-size) 1)
  843. :help "The average (arithmetic mean) of the data values"]
  844. ["mean(1:) with error"
  845. (progn
  846. (require 'calc-stat)
  847. (call-interactively 'calc-vector-mean-error))
  848. :keys "I u M"
  849. :active (>= (calc-stack-size) 1)
  850. :help "The average (arithmetic mean) of the data values as an error form"]
  851. ["rms(1:)"
  852. (progn
  853. (require 'calc-stat)
  854. (call-interactively 'calc-vector-rms))
  855. :keys "u R"
  856. :active (>= (calc-stack-size) 1)
  857. :help "The root mean square of the data values"]
  858. ["sdev(1:)"
  859. (progn
  860. (require 'calc-stat)
  861. (call-interactively 'calc-vector-sdev))
  862. :keys "u S"
  863. :active (>= (calc-stack-size) 1)
  864. :help "The sample sdev, sqrt[sum((values - mean)^2)/(N-1)]"]
  865. ["variance(1:)"
  866. (progn
  867. (require 'calc-stat)
  868. (call-interactively 'calc-vector-variance))
  869. :keys "H u S"
  870. :active (>= (calc-stack-size) 1)
  871. :help "The sample variance, sum((values - mean)^2)/(N-1)"]
  872. ["population sdev(1:)"
  873. (progn
  874. (require 'calc-stat)
  875. (call-interactively 'calc-vector-pop-sdev))
  876. :keys "I u S"
  877. :active (>= (calc-stack-size) 1)
  878. :help "The population sdev, sqrt[sum((values - mean)^2)/N]"]
  879. ["population variance(1:)"
  880. (progn
  881. (require 'calc-stat)
  882. (call-interactively 'calc-vector-pop-variance))
  883. :keys "H I u S"
  884. :active (>= (calc-stack-size) 1)
  885. :help "The population variance, sum((values - mean)^2)/N"]
  886. ["median(1:)"
  887. (progn
  888. (require 'calc-stat)
  889. (call-interactively 'calc-vector-median))
  890. :keys "H u M"
  891. :active (>= (calc-stack-size) 1)
  892. :help "The median of the data values"]
  893. ["harmonic mean(1:)"
  894. (progn
  895. (require 'calc-stat)
  896. (call-interactively 'calc-vector-harmonic-mean))
  897. :keys "H I u M"
  898. :active (>= (calc-stack-size) 1)]
  899. ["geometric mean(1:)"
  900. (progn
  901. (require 'calc-stat)
  902. (call-interactively 'calc-vector-geometric-mean))
  903. :keys "u G"
  904. :active (>= (calc-stack-size) 1)]
  905. ["arithmetic-geometric mean(1:)"
  906. (progn
  907. (require 'calc-stat)
  908. (let ((calc-hyperbolic-flag t))
  909. (call-interactively 'calc-vector-geometric-mean)))
  910. :keys "H u G"
  911. :active (>= (calc-stack-size) 1)]
  912. ;; ["RMS(1:)"
  913. ;; (progn (require 'calc-arith)
  914. ;; (call-interactively 'calc-abs))
  915. ;; :keys "A"
  916. ;; :active (>= (calc-stack-size) 1)
  917. ;; :help "The root-mean-square, or quadratic mean"]
  918. )
  919. ["Abbreviate long vectors"
  920. (progn
  921. (require 'calc-mode)
  922. (call-interactively 'calc-full-vectors))
  923. :keys "v ."
  924. :style toggle
  925. :selected (not calc-full-vectors)]
  926. "----"
  927. ["Help on Matrices/Vectors"
  928. (calc-info-goto-node "Matrix Functions")])
  929. "Menu for Calc's vector and matrix functions.")
  930. (defvar calc-units-menu
  931. (list "Units"
  932. ["Convert units in (1:)"
  933. (progn
  934. (require 'calc-units)
  935. (call-interactively 'calc-convert-units ))
  936. :keys "u c"
  937. :active (>= (calc-stack-size) 1)]
  938. ["Convert temperature in (1:)"
  939. (progn
  940. (require 'calc-units)
  941. (call-interactively 'calc-convert-temperature))
  942. :keys "u t"
  943. :active (>= (calc-stack-size) 1)]
  944. ["Simplify units in (1:)"
  945. (progn
  946. (require 'calc-units)
  947. (call-interactively 'calc-simplify-units))
  948. :keys "u s"
  949. :active (>= (calc-stack-size) 1)]
  950. ["View units table"
  951. (progn
  952. (require 'calc-units)
  953. (call-interactively 'calc-view-units-table))
  954. :keys "u V"]
  955. (list "Logarithmic Units"
  956. ["Convert (1:) to dB (power)"
  957. (progn
  958. (require 'calc-units)
  959. (call-interactively 'calc-db))
  960. :keys "l d"
  961. :active (>= (calc-stack-size) 1)]
  962. ["Convert (2:) to dB (power) with reference level (1:)"
  963. (progn
  964. (require 'calc-units)
  965. (let ((calc-option-flag t))
  966. (call-interactively 'calc-db)))
  967. :keys "O l d"
  968. :active (>= (calc-stack-size) 2)]
  969. ["Convert (1:) to Np (power)"
  970. (progn
  971. (require 'calc-units)
  972. (call-interactively 'calc-np))
  973. :keys "l n"
  974. :active (>= (calc-stack-size) 1)]
  975. ["Convert (2:) to Np (power) with reference level (1:)"
  976. (progn
  977. (require 'calc-units)
  978. (let ((calc-option-flag t))
  979. (call-interactively 'calc-np)))
  980. :keys "O l n"
  981. :active (>= (calc-stack-size) 2)]
  982. ["Convert (1:) to power quantity"
  983. (progn
  984. (require 'calc-units)
  985. (call-interactively 'calc-lu-quant))
  986. :keys "l q"
  987. :active (>= (calc-stack-size) 1)]
  988. ["Convert (2:) to power quantity with reference level (1:)"
  989. (progn
  990. (require 'calc-units)
  991. (let ((calc-option-flag t))
  992. (call-interactively 'calc-lu-quant)))
  993. :keys "O l q"
  994. :active (>= (calc-stack-size) 2)]
  995. "----"
  996. ["Convert (1:) to dB (field)"
  997. (progn
  998. (require 'calc-units)
  999. (let ((calc-hyperbolic-flag t))
  1000. (call-interactively 'calc-db)))
  1001. :keys "H l d"
  1002. :active (>= (calc-stack-size) 1)]
  1003. ["Convert (2:) to dB (field) with reference level (1:)"
  1004. (progn
  1005. (require 'calc-units)
  1006. (let ((calc-option-flag t)
  1007. (calc-hyperbolic-flag t))
  1008. (call-interactively 'calc-db)))
  1009. :keys "O H l d"
  1010. :active (>= (calc-stack-size) 2)]
  1011. ["Convert (1:) to Np (field)"
  1012. (progn
  1013. (require 'calc-units)
  1014. (let ((calc-hyperbolic-flag t))
  1015. (call-interactively 'calc-np)))
  1016. :keys "H l n"
  1017. :active (>= (calc-stack-size) 1)]
  1018. ["Convert (2:) to Np (field) with reference level (1:)"
  1019. (progn
  1020. (require 'calc-units)
  1021. (let ((calc-option-flag t)
  1022. (calc-hyperbolic-flag t))
  1023. (call-interactively 'calc-np)))
  1024. :keys "O H l d"
  1025. :active (>= (calc-stack-size) 2)]
  1026. ["Convert (1:) to field quantity"
  1027. (progn
  1028. (require 'calc-units)
  1029. (let ((calc-hyperbolic-flag t))
  1030. (call-interactively 'calc-lu-quant)))
  1031. :keys "H l q"
  1032. :active (>= (calc-stack-size) 1)]
  1033. ["Convert (2:) to field quantity with reference level (1:)"
  1034. (progn
  1035. (require 'calc-units)
  1036. (let ((calc-option-flag t)
  1037. (calc-hyperbolic-flag))
  1038. (call-interactively 'calc-lu-quant)))
  1039. :keys "O H l q"
  1040. :active (>= (calc-stack-size) 2)])
  1041. (list "Musical Notes"
  1042. ["Convert (1:) to scientific pitch notation"
  1043. (progn
  1044. (require 'calc-units)
  1045. (call-interactively 'calc-spn))
  1046. :keys "l s"
  1047. :active (>= (calc-stack-size) 1)]
  1048. ["Convert (1:) to midi number"
  1049. (progn
  1050. (require 'calc-units)
  1051. (call-interactively 'calc-midi))
  1052. :keys "l m"
  1053. :active (>= (calc-stack-size) 1)]
  1054. ["Convert (1:) to frequency"
  1055. (progn
  1056. (require 'calc-units)
  1057. (call-interactively 'calc-freq))
  1058. :keys "l f"
  1059. :active (>= (calc-stack-size) 1)])
  1060. "----"
  1061. ["Help on Units"
  1062. (calc-info-goto-node "Units")])
  1063. "Menu for Calc's units functions.")
  1064. (defvar calc-variables-menu
  1065. (list "Variables"
  1066. ["Store (1:) into a variable"
  1067. (progn
  1068. (require 'calc-store)
  1069. (call-interactively 'calc-store))
  1070. :keys "s s"
  1071. :active (>= (calc-stack-size) 1)]
  1072. ["Recall a variable value"
  1073. (progn
  1074. (require 'calc-store)
  1075. (call-interactively 'calc-recall ))
  1076. :keys "s r"]
  1077. ["Edit the value of a variable"
  1078. (progn
  1079. (require 'calc-store)
  1080. (call-interactively 'calc-edit-variable))
  1081. :keys "s e"]
  1082. ["Exchange (1:) with a variable value"
  1083. (progn
  1084. (require 'calc-store)
  1085. (call-interactively 'calc-store-exchange))
  1086. :keys "s x"
  1087. :active (>= (calc-stack-size) 1)]
  1088. ["Clear variable value"
  1089. (progn
  1090. (require 'calc-store)
  1091. (call-interactively 'calc-unstore))
  1092. :keys "s u"]
  1093. ["Evaluate variables in (1:)"
  1094. (progn
  1095. (require 'calc-ext)
  1096. (call-interactively 'calc-evaluate))
  1097. :keys "="
  1098. :active (>= (calc-stack-size) 1)]
  1099. ["Evaluate (1:), assigning a value to a variable"
  1100. (progn
  1101. (require 'calc-store)
  1102. (call-interactively 'calc-let))
  1103. :keys "s l"
  1104. :active (>= (calc-stack-size) 1)
  1105. :help "Evaluate (1:) under a temporary assignment of a variable"]
  1106. "----"
  1107. ["Help on Variables"
  1108. (calc-info-goto-node "Store and Recall")])
  1109. "Menu for Calc's variables.")
  1110. (defvar calc-stack-menu
  1111. (list "Stack"
  1112. ["Remove (1:)"
  1113. calc-pop
  1114. :keys "DEL"
  1115. :active (>= (calc-stack-size) 1)]
  1116. ["Switch (1:) and (2:)"
  1117. calc-roll-down
  1118. :keys "TAB"
  1119. :active (>= (calc-stack-size) 2)]
  1120. ["Duplicate (1:)"
  1121. calc-enter
  1122. :keys "RET"
  1123. :active (>= (calc-stack-size) 1)]
  1124. ["Edit (1:)"
  1125. (progn
  1126. (require 'calc-yank)
  1127. (call-interactively calc-edit))
  1128. :keys "`"
  1129. :active (>= (calc-stack-size) 1)]
  1130. "----"
  1131. ["Help on Stack"
  1132. (calc-info-goto-node "Stack and Trail")])
  1133. "Menu for Calc's stack functions.")
  1134. (defvar calc-errors-menu
  1135. (list "Undo"
  1136. ["Undo"
  1137. (progn
  1138. (require 'calc-undo)
  1139. (call-interactively 'calc-undo))
  1140. :keys "U"]
  1141. ["Redo"
  1142. (progn
  1143. (require 'calc-undo)
  1144. (call-interactively 'calc-redo))
  1145. :keys "D"]
  1146. "----"
  1147. ["Help on Undo"
  1148. (progn
  1149. (calc-info-goto-node "Introduction")
  1150. (Info-goto-node "Undo"))]))
  1151. (defvar calc-modes-menu
  1152. (list "Modes"
  1153. ["Precision"
  1154. (progn
  1155. (require 'calc-ext)
  1156. (call-interactively 'calc-precision))
  1157. :keys "p"
  1158. :help "Set the precision for floating point calculations"]
  1159. ["Fraction mode"
  1160. (progn
  1161. (require 'calc-frac)
  1162. (call-interactively 'calc-frac-mode))
  1163. :keys "m f"
  1164. :style toggle
  1165. :selected calc-prefer-frac
  1166. :help "Leave integer quotients as fractions"]
  1167. ["Symbolic mode"
  1168. (lambda ()
  1169. (interactive)
  1170. (require 'calc-mode)
  1171. (calc-symbolic-mode nil))
  1172. :keys "m s"
  1173. :style toggle
  1174. :selected calc-symbolic-mode
  1175. :help "Leave functions producing inexact answers in symbolic form"]
  1176. ["Infinite mode"
  1177. (lambda ()
  1178. (interactive)
  1179. (require 'calc-mode)
  1180. (calc-infinite-mode nil))
  1181. :keys "m i"
  1182. :style toggle
  1183. :selected calc-infinite-mode
  1184. :help "Let expressions like 1/0 produce infinite results"]
  1185. ["Abbreviate long vectors"
  1186. (progn
  1187. (require 'calc-mode)
  1188. (call-interactively 'calc-full-vectors))
  1189. :keys "v ."
  1190. :style toggle
  1191. :selected (not calc-full-vectors)]
  1192. (list "Simplification"
  1193. ["No simplification mode"
  1194. (progn
  1195. (require 'calc-mode)
  1196. (calc-no-simplify-mode t))
  1197. :keys "m O"
  1198. :style radio
  1199. :selected (eq calc-simplify-mode 'none)
  1200. :help "No simplifications are done automatically"]
  1201. ["Numeric simplification mode"
  1202. (progn
  1203. (require 'calc-mode)
  1204. (calc-num-simplify-mode t))
  1205. :keys "m N"
  1206. :style radio
  1207. :selected (eq calc-simplify-mode 'num)
  1208. :help "Only numeric simplifications are done automatically"]
  1209. ["Basic simplification mode"
  1210. (progn
  1211. (require 'calc-mode)
  1212. (calc-basic-simplify-mode t))
  1213. :keys "m I"
  1214. :style radio
  1215. :selected (eq calc-simplify-mode nil)
  1216. :help "Only basic simplifications are done automatically"]
  1217. ["Binary simplification mode"
  1218. (progn
  1219. (require 'calc-mode)
  1220. (calc-bin-simplify-mode t))
  1221. :keys "m B"
  1222. :style radio
  1223. :selected (eq calc-simplify-mode 'binary)
  1224. :help "Basic simplifications with binary clipping are done automatically"]
  1225. ["Algebraic simplification mode"
  1226. (progn
  1227. (require 'calc-mode)
  1228. (calc-alg-simplify-mode t))
  1229. :keys "m A"
  1230. :style radio
  1231. :selected (eq calc-simplify-mode 'alg)
  1232. :help "Standard algebraic simplifications are done automatically"]
  1233. ["Extended simplification mode"
  1234. (progn
  1235. (require 'calc-mode)
  1236. (calc-ext-simplify-mode t))
  1237. :keys "m E"
  1238. :style radio
  1239. :selected (eq calc-simplify-mode 'ext)
  1240. :help "Extended (unsafe) simplifications are done automatically"]
  1241. ["Units simplification mode"
  1242. (progn
  1243. (require 'calc-mode)
  1244. (calc-units-simplify-mode t))
  1245. :keys "m U"
  1246. :style radio
  1247. :selected (eq calc-simplify-mode 'units)
  1248. :help "Algebraic and unit simplifications are done automatically"])
  1249. (list "Angle Measure"
  1250. ["Radians"
  1251. (progn
  1252. (require 'calc-math)
  1253. (call-interactively 'calc-radians-mode))
  1254. :keys "m r"
  1255. :style radio
  1256. :selected (eq calc-angle-mode 'rad)]
  1257. ["Degrees"
  1258. (progn
  1259. (require 'calc-math)
  1260. (call-interactively 'calc-degrees-mode))
  1261. :keys "m d"
  1262. :style radio
  1263. :selected (eq calc-angle-mode 'deg)]
  1264. ["HMS"
  1265. (progn
  1266. (require 'calc-math)
  1267. (call-interactively 'calc-hms-mode))
  1268. :keys "m h"
  1269. :style radio
  1270. :selected (eq calc-angle-mode 'hms)])
  1271. (list "Radix"
  1272. ["Decimal"
  1273. (progn
  1274. (require 'calc-bin)
  1275. (call-interactively 'calc-decimal-radix))
  1276. :keys "d 0"
  1277. :style radio
  1278. :selected (and (= calc-number-radix 10)
  1279. (not calc-twos-complement-mode))]
  1280. ["Binary"
  1281. (progn
  1282. (require 'calc-bin)
  1283. (call-interactively 'calc-binary-radix))
  1284. :keys "d 2"
  1285. :style radio
  1286. :selected (and (= calc-number-radix 2)
  1287. (not calc-twos-complement-mode))]
  1288. ["Octal"
  1289. (progn
  1290. (require 'calc-bin)
  1291. (call-interactively 'calc-octal-radix))
  1292. :keys "d 8"
  1293. :style radio
  1294. :selected (and (= calc-number-radix 8)
  1295. (not calc-twos-complement-mode))]
  1296. ["Hexadecimal"
  1297. (progn
  1298. (require 'calc-bin)
  1299. (call-interactively 'calc-hex-radix))
  1300. :keys "d 6"
  1301. :style radio
  1302. :selected (and (= calc-number-radix 16)
  1303. (not calc-twos-complement-mode))]
  1304. ["Other"
  1305. (progn
  1306. (require 'calc-bin)
  1307. (call-interactively 'calc-radix))
  1308. :keys "d r"
  1309. :style radio
  1310. :selected (and
  1311. (not calc-twos-complement-mode)
  1312. (not
  1313. (or
  1314. (= calc-number-radix 10)
  1315. (= calc-number-radix 2)
  1316. (= calc-number-radix 8)
  1317. (= calc-number-radix 16))))]
  1318. ["--Two's Complement--"
  1319. (lambda () ())
  1320. :style radio
  1321. :selected nil]
  1322. ["Binary"
  1323. (progn
  1324. (require 'calc-bin)
  1325. (call-interactively
  1326. (lambda () (interactive) (calc-binary-radix t))))
  1327. :keys "C-u d 2"
  1328. :style radio
  1329. :selected (and (= calc-number-radix 2)
  1330. calc-twos-complement-mode)]
  1331. ["Octal"
  1332. (progn
  1333. (require 'calc-bin)
  1334. (call-interactively
  1335. (lambda () (interactive) (calc-octal-radix t))))
  1336. :keys "C-u d 8"
  1337. :style radio
  1338. :selected (and (= calc-number-radix 8)
  1339. calc-twos-complement-mode)]
  1340. ["Hexadecimal"
  1341. (progn
  1342. (require 'calc-bin)
  1343. (call-interactively
  1344. (lambda () (interactive) (calc-hex-radix t))))
  1345. :keys "C-u d 6"
  1346. :style radio
  1347. :selected (and (= calc-number-radix 16)
  1348. calc-twos-complement-mode)])
  1349. (list "Float Format"
  1350. ["Normal"
  1351. (progn
  1352. (require 'calc-mode)
  1353. (call-interactively 'calc-normal-notation))
  1354. :keys "d n"
  1355. :style radio
  1356. :selected (eq (car-safe calc-float-format) 'float)]
  1357. ["Fixed point"
  1358. (progn
  1359. (require 'calc-mode)
  1360. (call-interactively 'calc-fix-notation))
  1361. :keys "d f"
  1362. :style radio
  1363. :selected (eq (car-safe calc-float-format) 'fix)]
  1364. ["Scientific notation"
  1365. (progn
  1366. (require 'calc-mode)
  1367. (call-interactively 'calc-sci-notation))
  1368. :keys "d s"
  1369. :style radio
  1370. :selected (eq (car-safe calc-float-format) 'sci)]
  1371. ["Engineering notation"
  1372. (progn
  1373. (require 'calc-mode)
  1374. (call-interactively 'calc-eng-notation))
  1375. :keys "d e"
  1376. :style radio
  1377. :selected (eq (car-safe calc-float-format) 'eng)])
  1378. (list "Complex Format"
  1379. ["Default"
  1380. (progn
  1381. (require 'calc-cplx)
  1382. (calc-complex-notation))
  1383. :style radio
  1384. :selected (not calc-complex-format)
  1385. :keys "d c"
  1386. :help "Display complex numbers as ordered pairs."]
  1387. ["i notation"
  1388. (progn
  1389. (require 'calc-cplx)
  1390. (calc-i-notation))
  1391. :style radio
  1392. :selected (eq calc-complex-format 'i)
  1393. :keys "d i"
  1394. :help "Display complex numbers as a+bi."]
  1395. ["j notation"
  1396. (progn
  1397. (require 'calc-cplx)
  1398. (calc-i-notation))
  1399. :style radio
  1400. :selected (eq calc-complex-format 'j)
  1401. :keys "d j"
  1402. :help "Display complex numbers as a+bj."]
  1403. ["Other"
  1404. (calc-complex-notation)
  1405. :style radio
  1406. :selected (and calc-complex-format
  1407. (not (eq calc-complex-format 'i))
  1408. (not (eq calc-complex-format 'j)))
  1409. :active nil]
  1410. "----"
  1411. ["Polar mode"
  1412. (progn
  1413. (require 'calc-cplx)
  1414. (calc-polar-mode nil))
  1415. :style toggle
  1416. :selected (eq calc-complex-mode 'polar)
  1417. :keys "m p"
  1418. :help "Prefer polar form for complex numbers."])
  1419. (list "Algebraic"
  1420. ["Normal"
  1421. (progn
  1422. (require 'calc-mode)
  1423. (cond
  1424. (calc-incomplete-algebraic-mode
  1425. (calc-algebraic-mode t))
  1426. (calc-algebraic-mode
  1427. (calc-algebraic-mode nil))))
  1428. :style radio
  1429. :selected (not calc-algebraic-mode)]
  1430. ["Algebraic mode"
  1431. (progn
  1432. (require 'calc-mode)
  1433. (if (or
  1434. calc-incomplete-algebraic-mode
  1435. (not calc-algebraic-mode))
  1436. (calc-algebraic-mode nil)))
  1437. :keys "m a"
  1438. :style radio
  1439. :selected (and calc-algebraic-mode
  1440. (not calc-incomplete-algebraic-mode))
  1441. :help "Keys which start numeric entry also start algebraic entry"]
  1442. ["Incomplete algebraic mode"
  1443. (progn
  1444. (require 'calc-mode)
  1445. (unless calc-incomplete-algebraic-mode
  1446. (calc-algebraic-mode t)))
  1447. :keys "C-u m a"
  1448. :style radio
  1449. :selected calc-incomplete-algebraic-mode
  1450. :help "Only ( and [ begin algebraic entry"]
  1451. ["Total algebraic mode"
  1452. (progn
  1453. (require 'calc-mode)
  1454. (unless (eq calc-algebraic-mode 'total)
  1455. (calc-total-algebraic-mode nil)))
  1456. :keys "m t"
  1457. :style radio
  1458. :selected (eq calc-algebraic-mode 'total)
  1459. :help "All regular letters and punctuation begin algebraic entry"])
  1460. (list "Matrix"
  1461. ["Off"
  1462. (progn
  1463. (require 'calc-mode)
  1464. (calc-matrix-mode -1))
  1465. :style radio
  1466. :selected (eq calc-matrix-mode nil)
  1467. :help "Variables are not assumed to be matrix or scalar"]
  1468. ["Matrix mode"
  1469. (progn
  1470. (require 'calc-mode)
  1471. (calc-matrix-mode -2))
  1472. :style radio
  1473. :selected (eq calc-matrix-mode 'matrix)
  1474. :help "Variables are assumed to be matrices"]
  1475. ["Square matrix mode"
  1476. (progn
  1477. (require 'calc-mode)
  1478. (calc-matrix-mode '(4)))
  1479. :style radio
  1480. :selected (eq calc-matrix-mode 'sqmatrix)
  1481. :help "Variables are assumed to be square matrices"]
  1482. ["Dimensioned matrix mode"
  1483. (let ((dim (string-to-number (read-from-minibuffer "Dimension: "))))
  1484. (if (natnump dim)
  1485. (progn
  1486. (require 'calc-mode)
  1487. (calc-matrix-mode dim))
  1488. (error "The dimension must be a positive integer")))
  1489. :style radio
  1490. :selected (and (integerp calc-matrix-mode) (> calc-matrix-mode 0))
  1491. :help "Variables are assumed to be NxN matrices"]
  1492. ["Scalar mode"
  1493. (progn
  1494. (require 'calc-mode)
  1495. (calc-matrix-mode 0))
  1496. :style radio
  1497. :selected (eq calc-matrix-mode 'scalar)
  1498. :help "Variables are assumed to be scalars"])
  1499. (list "Language"
  1500. ["Normal"
  1501. (progn
  1502. (require 'calc-lang)
  1503. (call-interactively 'calc-normal-language))
  1504. :keys "d N"
  1505. :style radio
  1506. :selected (eq calc-language nil)]
  1507. ["Big"
  1508. (progn
  1509. (require 'calc-lang)
  1510. (call-interactively 'calc-big-language))
  1511. :keys "d B"
  1512. :style radio
  1513. :selected (eq calc-language 'big)
  1514. :help "Use textual approximations to various mathematical notations"]
  1515. ["Flat"
  1516. (progn
  1517. (require 'calc-lang)
  1518. (call-interactively 'calc-flat-language))
  1519. :keys "d O"
  1520. :style radio
  1521. :selected (eq calc-language 'flat)
  1522. :help "Write matrices on a single line"]
  1523. ["C"
  1524. (progn
  1525. (require 'calc-lang)
  1526. (call-interactively 'calc-c-language))
  1527. :keys "d C"
  1528. :style radio
  1529. :selected (eq calc-language 'c)]
  1530. ["Pascal"
  1531. (progn
  1532. (require 'calc-lang)
  1533. (call-interactively 'calc-pascal-language))
  1534. :keys "d P"
  1535. :style radio
  1536. :selected (eq calc-language 'pascal)]
  1537. ["Fortran"
  1538. (progn
  1539. (require 'calc-lang)
  1540. (call-interactively 'calc-fortran-language))
  1541. :keys "d F"
  1542. :style radio
  1543. :selected (eq calc-language 'fortran)]
  1544. ["TeX"
  1545. (progn
  1546. (require 'calc-lang)
  1547. (call-interactively 'calc-tex-language))
  1548. :keys "d T"
  1549. :style radio
  1550. :selected (eq calc-language 'tex)]
  1551. ["LaTeX"
  1552. (progn
  1553. (require 'calc-lang)
  1554. (call-interactively 'calc-latex-language))
  1555. :keys "d L"
  1556. :style radio
  1557. :selected (eq calc-language 'latex)]
  1558. ["Eqn"
  1559. (progn
  1560. (require 'calc-lang)
  1561. (call-interactively 'calc-eqn-language))
  1562. :keys "d E"
  1563. :style radio
  1564. :selected (eq calc-language 'eqn)]
  1565. ["Yacas"
  1566. (progn
  1567. (require 'calc-lang)
  1568. (call-interactively 'calc-yacas-language))
  1569. :keys "d Y"
  1570. :style radio
  1571. :selected (eq calc-language 'yacas)]
  1572. ["Maxima"
  1573. (progn
  1574. (require 'calc-lang)
  1575. (call-interactively 'calc-maxima-language))
  1576. :keys "d X"
  1577. :style radio
  1578. :selected (eq calc-language 'maxima)]
  1579. ["Giac"
  1580. (progn
  1581. (require 'calc-lang)
  1582. (call-interactively 'calc-giac-language))
  1583. :keys "d A"
  1584. :style radio
  1585. :selected (eq calc-language 'giac)]
  1586. ["Mma"
  1587. (progn
  1588. (require 'calc-lang)
  1589. (call-interactively 'calc-mathematica-language))
  1590. :keys "d M"
  1591. :style radio
  1592. :selected (eq calc-language 'math)]
  1593. ["Maple"
  1594. (progn
  1595. (require 'calc-lang)
  1596. (call-interactively 'calc-maple-language))
  1597. :keys "d W"
  1598. :style radio
  1599. :selected (eq calc-language 'maple)])
  1600. "----"
  1601. ["Save mode settings" calc-save-modes :keys "m m"]
  1602. "----"
  1603. ["Help on Modes"
  1604. (calc-info-goto-node "Mode settings")])
  1605. "Menu for Calc's mode settings.")
  1606. (defvar calc-help-menu
  1607. (list "Help"
  1608. ["Manual"
  1609. calc-info
  1610. :keys "h i"]
  1611. ["Tutorial"
  1612. calc-tutorial
  1613. :keys "h t"]
  1614. ["Summary"
  1615. calc-info-summary
  1616. :keys "h s"]
  1617. "----"
  1618. ["Help on Help"
  1619. (progn
  1620. (calc-info-goto-node "Introduction")
  1621. (Info-goto-node "Help Commands"))])
  1622. "Menu for Calc's help functions.")
  1623. ;; Needed to make this file loadable in isolation.
  1624. ;; Another option would be to use calc-load-hook.
  1625. (require 'calc)
  1626. (easy-menu-define
  1627. calc-menu
  1628. calc-mode-map
  1629. "Menu for Calc."
  1630. (list "Calc"
  1631. :visible '(eq major-mode 'calc-mode)
  1632. calc-arithmetic-menu
  1633. calc-scientific-function-menu
  1634. calc-algebra-menu
  1635. calc-graphics-menu
  1636. calc-vectors-menu
  1637. calc-units-menu
  1638. calc-variables-menu
  1639. calc-stack-menu
  1640. calc-errors-menu
  1641. calc-modes-menu
  1642. calc-help-menu
  1643. ["Reset"
  1644. (progn
  1645. (require 'calc-ext)
  1646. (call-interactively 'calc-reset))
  1647. :help "Reset Calc to its initial state"]
  1648. ["Quit" calc-quit]))
  1649. (provide 'calc-menu)