js-elisp / CHANGELOG

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
new stuff
=========

- ocp-indent can be used to indent ocaml code.

    https://github.com/OCamlPro/ocp-indent

  Currently only whole-buffer indentation is supported.  To use it, set

    (setq ocaml-indenter 'ocp-indent)

  to use Tuareg's indenter, use

    (setq ocaml-indenter 'tuareg)

  This is in its infancy, but we added a few regression tests so we
  don't go backwards.

  The code is in omake-mode/ocp-indent.  To run regression tests do
  cd regressions; ./runtests

- omake-mode works with the new core release, ocaml-core-108.07.00

changes
=======

- We are using a new repo,

    https://bitbucket.org/seanmcl/ocaml-core-108.07.00-seanmcl

  to build omake-mode both externally and at Jane Street.  This makes
  problems we faced with installing inotify in the two places easier to handle.

bug fixes
=========

--------------------------------------------------------------------------------

new stuff
=========
- If inotify's max_user_watches is exceeded, an error message is shown.

changes
=======

- Built with a new fork of core that allows us to make changes without waiting
  for them to be accepted into the main branch
- Builds on both OSX and Linux both for home use and at Jane Street
- Removed Omake.prompt-when-setting-environment-variable-for-a-project-that-is-building

bug fixes
=========

--------------------------------------------------------------------------------

new stuff
=========

changes
=======
- Server is daemonized.  New commands are
  omake_server.exe controller (start|stop|restart|status)
  This had the undesired effect that due to a bug in lock_file.ml,
  omake-server no longer runs on OSX.  Waiting for a bug fix to use
  OSX again.
- omake_server.exe server (start|stop) have been removed
- the disk copy of emacs log messages are timestamped

bug fixes
=========

- Now a single user can't run multiple copies of the server
- toggle-env works again

--------------------------------------------------------------------------------


new stuff
=========

- Almost have an end-to-end regression test.  Each test will consist of
  a directory with
  - some ocaml code/OMakefiles
  - setup.sh to set up the server
  - setup.el to simulate the user using emacs

- Projects buffer supports 'n' and 'p' for 'next' and 'previous' project.

changes
=======

- Improved status buffer when the underlying process dies.
- Improved 'l' in project buffer to show 'No errors' when there are no errors
  (rather than just silently doing nothing.)

bug fixes
=========

- Press enter on an unwatched project buffer line opens dired
- Stop spinner on dead omake processes
- check.sh should work at JS now.  At least I fixed some path problems
  that resulted from differences between linux and osx.
- Remove 'depends on' lines from errors
- Fixed bad indentation due to omake raw output ugliness.

--------------------------------------------------------------------------------

new stuff
=========

- Automatic compilation, unit testing, and regression tests via check.sh

- Run omake_server.exe on a file (omake_server.exe server file FILE [-debug])

- When omake dies, the status buffer is no longer deleted automatically.  It
  stays with a message alerting the user of the dead omake process.

- Started Emacs-level regression testing.  Not much here yet, but it's in
  the works.

changes
=======

- moved logs around and broke them up by date to be more organized.

bug fixes
=========

- Performance improvement for big builds via computing error hashes on the
  ocaml side and caching string representation of errors on the elisp side.

- Temporarily patched a problem with the Jane.server microfeature.  The
  feature needs to be eliminated, but it will require some discussion.

--------------------------------------------------------------------------------

new stuff
=========

- Robust unit testing.  Jane.test, Jane.test-eq, Jane.test-error, Jane.run-tests.
  Example
   (Jane.test-eq List.assoc.1 (List.assoc 5 '((5 . 6) (1 . 3))) 6)
   (Jane.test-eq List.assoc.2 (List.assoc 5 '((5 6) (1 3))) '(6))
   (Jane.test-eq List.assoc.3 (List.assoc 5 '((5 6) (1 3))) '(7))

  Result
     Selector: "Omake\\|Hashtbl\\|String\\|List"
     Passed: 2 (0 unexpected)
     Failed: 1 (1 unexpected)
     Error:  0 (0 unexpected)
     Total:  3/3

     Started at:   2012-07-23 16:28:08-0400
     Finished.
     Finished at:  2012-07-23 16:28:08-0400

     ..F

     F List\.assoc\.3
         (ert-test-failed
          ((ert-should
            (equal
             (List\.assoc 5 ...)
             '...))
           :form
           (equal
            (6)
            (7))
           :value nil :explanation
           (list-elt 0
                     (different-atoms 6 7))))

  From the *ert* buffer you can jump to the errors (typing '.'), fix the code, and
  rerun the test (typing 'r').

  This will be a major part of the planned omake-mode testing framework.




changes
=======

- Omake.shutdown kills non-project buffers as well as project buffers.

bug fixes
=========
- If a unit test failed, it would stop the rest
  of the init code from running, thus making Emacs unusable.
- Fixed a bug that would fail on files in the top level directory


--------------------------------------------------------------------------------

new stuff
=========

- Omake.notify-maintainer-of-error redesign
  Now all relevant logs and buffers are saved to
  /tmp/omake-server/USER/bug-report/N
  The command asks the user for a message, which is also stored in
  the directory.  An email is sent including the user message and
  where to find the files.

- omake-mode working on OSX

- Omake.show-raw-buffer will show you the raw buffer for the last compilation
  of a project that is not compiling.  This is important when your OMakefiles
  are messed up, because in that case the omake process stops and the
  project is killed immediately.

changes
=========

- better error handling
- better handling of preprocessor errors, which now appear as omake failures
  rather than ocaml errors so you can see the context of the failure.

bug fixes
=========

- stopping server from the command line left connection objects alive

--------------------------------------------------------------------------------

new stuff
=========

- Verbose status buffer shows
  - total error count (even if only 50 are sent)
  - seconds since last update

- Unvisited error count in status buffer shows unsent error count

- Better documentation for omake-mode (still incomplete) and
  other js-elisp stuff.

- Detects 'waiting for project lock'

- Config file remembers if you've been warned about environment variable
  changes and doesn't warn you again.

changes
=========

- Omake.watch autocompletion improvements
- Improved next-error to always connect to the server.

bug fixes
=========

- omake errors were not always showing the error text

--------------------------------------------------------------------------------

new stuff
=========

- Support for missing package errors, eg

  *** omake: targets were not rebuilt because of errors:
     lib/bug.cmx
        depends on: lib/bug.ml
        depends on: lib/bug.mli
        - build lib bug.cmx
        + ocamlfind ocamlopt -thread -w @a-4-7-9-29-28 -pp 'camlp4o /usr/local/lib/ocaml/site-lib/type-conv/pa_type_conv.cma /usr/local/lib/ocaml/site-lib/sexplib/pa_sexp_conv.cma /usr/local/lib/ocaml/site-lib/fieldslib/pa_fields_conv.cma /usr/local/lib/ocaml/site-lib/pa_pipebang/pa_pipebang.cma' -strict-sequence -annot -inline 20 -nodynlink -g -package core -package core_extended -package async -package pcre -c bug.mli
        ocamlfind: Package `core_extended' not found
        - exit lib bug.cmx, 0.10 sec, code 2

- An almost working patch of ocaml-core on linux with ocaml 4.0.  The part
  that doesn't work is an issue with the core build script, not with the
  ocaml code.  There is a workaround for building.

- Pressing RET on a projects buffer line opens a dired buffer of that project.

- Nice error message when you try to compile a project via tramp.

changes
=========

- Omake.start-project (C-cC-c) redesigned to be agnostic to the watched status
  of a project.

- Version bump to 13 (mmmmm, bad luck?)

- New error handling framework.  For example, when you try to start omake in a
  tramp buffer, show a message in the minibuffer and abort the current stack
  but don't raise an exn.  Users shouldn't notices this.

- Killed off some trivial issues.

- The server no longer ignores sigterm.

bug fixes
=========

- Config files now save the fields the ocaml code doesn't know about, and
  ensures all the required fields are present.  This allows forward and
  backward compatibility between versions.

- Omake server checks to be sure the permissions on /tmp/omake-server are
  OK before starting.

- Broken pipe error possibly fixed.  I couldn't reproduce it due to
  hardware issues, so please check this.  To check, start a project
  that takes a long time to build.  Then kill the emacs that started
  the compilation.  The server should not write errror messages to the
  log about a broken pipe.

--------------------------------------------------------------------------------

new stuff
=========

- A new bare info page (jane-emacs) for non-omake-mode Emacs stuff.
- New environment variable FOUR_POINT_ZERO
- Working on an automated test infrastructure.

changes
=========

- Support new error-enabled warnings format in ocaml 4.0
- Verbose mode shows the settings of the environment variables
  on the next compilation as well as the current one.
- Changed variable
  Omake.create-dedicated-frame --> Omake.create-dedicated-status-frame
- In project buffer, 'w' now toggles between watched and unwatched.
  'u' was removed.

bug fixes
=========

- Eliminated nohup.out files
- toggle-env/set-env prompts are the same now

--------------------------------------------------------------------------------

new stuff
=========

- (for sweeks) added file omake_server.new.ml to show the new (working) multi-emacs
  server

changes
=========

- renamed elisp-for-ocaml-programmers to jane-lib

bug fixes
=========

- code and error frames are raised

- fixed a small window-selection bug when a dedicated frame was set but
  the code was showing in another frame, and the point was in that frame

--------------------------------------------------------------------------------

changes
=========

- There is a big change regarding window behavior.

  The following variables were removed
     Omake.show-buffer-for-next-error-in
     Omake.set-standard-windows
     Omake.use-display-buffer

  They were replaced by
     Omake.split-frame-horizontally
     Omake.show-error-buffer-in-top-or-left-window

  See the info documentation for the new behavior.  This change was done
  as a uniform method for supporting the various different ways of using
  dedicated windows vs. automatic window selection.

  Non-experts should not have to do anything (though they might want to
  remove the variables that are no longer used from their .emacs.)

new stuff
=========

- Omake.set-dedicated-{code,error}-frame
- Omake.clear-dedicated-windows

--------------------------------------------------------------------------------

new stuff
=========
- new handling of whitespace.
   * highlighting whitespace only happens in certain modes (c-mode, tuareg-mode)
   * characters beyond column 90 are highlighted
   * trailing whitespace is not highlighted by default, but can be configured by
     setting jane-highlight-whitespace-style.
   * trailing whitespace is cleaned up on file save, only in certain modes
      (c-mode tuareg-mode)

bug fixes
=========

changes
=======

- Made elisp-for-ocaml-programmers use lexical scope for higher-order functions
  using the macros `defunl', `letl', `letl*'.  These should be used whenever
  you are defining a higher-order function (instead of `defun', `let', `let*')

------------------------------------------------------------------------------------------

new stuff
=========

- added config variable Omake.use-display-buffer, which uses emacs's built-in
  display-buffer for showing code and error buffers, rather than code and error
  windows (and complicated code to figure out what those windows are).

new stuff
=========

- new configuration variable, Omake.prompt-before-killing-project, which is true by
  default, but if set to false (i.e. nil), then omake-mode won't prompt when you run
  Omake.kill-project or when you kill the [Errors] buffer.

- Added three file-finding functions:

    | C-c f p | Jane.find-file-in-repo       |
    | C-c f r | Jane.find-file-in-project    |
    | C-c f l | Jane.find-library-in-project |

  The first two of these functions allow one to find a file by its name first, and path
  second.  The range of available files is either the containing hg repo (for
  Jane.find-file-in-repo) or the containing OMake project (for Jane.find-file-in-project).
  The third function is similar, except rather than finding a particular file name, one
  finds the directory containing an OCaml library name, as defined by the
  OCamlMakeLibPackage declaration in that directory's OMakefile.

  All three functions prompt in the minibuffer and support completion, so that one can
  start entering a file name or library name, and tab-complete to see the possibilities.

  The first time any of the functions is run in a repo (or project), it builds an index,
  which may take some time (up to a few seconds for a clone of jane on a local disk).
  Subsequent calls to the function in the same repo (or project) will reuse the index,
  and will run instantly.

- Added Omake.shutdown-and-remove-hooks.  This is an emergency command to use
  when omake-mode goes horribly wrong, and you can't kill a buffer, or even
  Emacs itself.  If you need to use this command, there's a bug.  Please
  report it.  Thanks!

- C-c g runs Omake.toggle-env.  This is a faster way to toggle the values
  of environment variables.

- Added an (incomplete) texinfo file, the beginning of decent documentation
  for omake-server.

- Added `Emacs.protect-from-quit' that will create a critical section
  that can not be interrupted by `keyboard-quit'

bug fixes
=========

- Discovered the `inhibit-quit' variable which allows me to protect
  critical sections from C-g, which was helping omake-mode get into
  broken states.

- #63, #50: Reduce needless prompts.

- Bug tracker cleanup

^^^ in progress ^^^

vvv old stuff vvv

new stuff
=========

- added edit-server.el, for edit-with-emacs so we can modify it as we need
- toggle-full-screen, does what it says on the tin
- cr-grep, supports new cr and (I think) most use cases
- More complete error messages in the error buffer when there's an omake error

bug fixes
=========

- Fixed another permissions bug with /tmp/omake-server.  It still wasn't being
  created with the right permissions.  It now is.

- Fixed a bug where the current error would leap into the unvisited section. (#77)
  Th e problem was that I was using the generic sxhash on errors, and a boolean
  inside the error telling whether the error was expanded or not was thus
  considered in the equality test.

- Fixed a bug where killing emacs was difficult (#72)
  The problem was whenever I would send a message from emacs to the server, I'd
  ensure the server was running.  In this case I sent the "kill" message to
  a dead server, which had the effect of attempting to restart the server.
  But it couldn't restart because the other one was running.  Sending messages
  to a dead server now do nothing except log to [omake-mode-log]

changes
=======

- new micro-feature, Jane.omake-js, for enabling the new omake-mode.  This is enabled by
  default in js-common, so everyone gets it.  There is another micro-feature,
  Jane.omake-old, for the old compile behavior.
- Jane.multiframe no longer binds C-o and has smarter frame killing

bug fixes
=========

- big performance improvement
  In a large build with dozens of errors, omake-mode was using a quadratic comparison
  to update the error buffer.  This could peg the cpu doing error comparisons.  I fixed
  this by hashing the errors in each error-ring, thus making the comparisons almost
  linear, and by limiting the number of errors sent by omake-server to 50.
  A smaller improvement was achieved by cacheing system calls to readlink that were
  occurrring tens of thousands of times for the same argument.

- "No files processeed yet"
  If you were almost finished with a build and omake finished without emiting
  "targets up-to-date...", omake-mode would display
  "progress: no files processed yet, status: Success".  This is fixed by grabbing
  the status bar if there is one.  If you build the project in an already
  completed directory, it still shows the message, as there is no way to tell
  how many targets there really were.

bugs examined but not addressed
===============================

- flickering of C-x in minibuffer
  This is an emacs bug that I reproduced with a very simple program using a process
  output filter function.  I submitted an emacs bug report.

- #65: omake-server mistakenly thought emacs was dead
  I can't reproduce this, though it happened to both Stephen and Charles.
  The code is dead simple, and I'm not sure how I could have messed it up.
  omake-server calls 'kill -0 EMACS-PID' to make sure the emacs that started
  the server is alive.  If that process returns non-zero, it kills the server.
  I've asked Stephen to look at the relevant section of the code.

  2012-03-28 sweeks: I changed how we send the signal, to see if that changes behavior or
  gives more info when the badness happens.

changes
=======
- deleted the deprecated js-compile
- deprecated Jane.whitespace-fancy and Jane.whitespace-simple.  There remains only
  Jane.whitespace.
- added Jane.prefer-other-visible-frame
- added Jane.pages for more obvious ^L
- for OCaml code, made underscore configurable as a word boundary,
  with Js.underscore-is-{word,punctuation}.
- Omake mode
  * now configurable whether to use dark or light faces, via Omake.use-{dark,light}-faces.
  * no longer shows Error-enabled warnings.
  * now sorts errors by line number within a file.
  * [Errors] buffer now includes the path to the compilation dir.
  * [Raw] buffer is now read-only.
  * now has a configuration parameter to get the old window setup. Add to your .emacs:

    (setq Omake.set-standard-windows t)

    ---------------------------------------
    |                  |                  |
    |                  |                  |
    |                  |                  |
    |      CODE        |     ERRORS       |
    |                  |                  |
    |                  |                  |
    |                  |                  |
    ---------------------------------------

bug fixes
=========
- fixed Jane.desktop
- cr-todo wasn't working with next-error
- #34 [Errors] buffers appears to be spinning, but omake is stopped
- #44 /tmp/omake-server has bad permissions
  omake now makes /tmp/omake-server with permissions 775
- #56 emacsclient can kill connection between emacs and omake_server
  There was a situation where an emacs daemon killed the server process.
  Fixed by handling sigterm in the server.

elisp changes
=============
- created elisp-for-ocaml-programmers.el, which has all of the ocaml-style utility
  functions
- switching from using ;;---------- lines to ^L to indicate pages
- revived js-examples.el
- re-alphabetized micro-features

================================================================================
2012-02-19 Rolled rev 0bf96ab189ff to production
================================================================================

changes
=======
- allowed Omake.setenv to run in a project that is building

--------------------------------------------------------------------------------

features
========

changes
=======

- Omake.errors-follow-point {t,nil} --->
  Omake.show-buffer-for-next-error-in {'dedicated-code-window, 'selected-window}
- changed tmp directory
  /tmp/omake-server/seanmcl/-home-seanmcl-ocaml/elisp --->
  /tmp/omake-server/seanmcl/home/seanmcl/ocaml/elisp
- Added version numbers in mismatch message

bug fixes
=========

- server catches and logs all exceptions.  This is good in itself, and in
  addition prevents a bug where text on stderr was eval'ed by emacs.
- you can now restart projects in different directories without getting
  the dead-process error.

--------------------------------------------------------------------------------

features
========
- added a configuration variable, [Omake.errors-follow-cursor], that controls whether
  C-c C-l displays the buffer of the next error in the dedicated code window or
  in the current window.  By default the dedicated code window is use.  To use the
  current window, do

    (setq Omake.errors-follow-cursor t)
- killing [Errors] buffer kills the project
- killing the project kills all the auxiliary buffers like [Raw] and [Elisp]
- Added permanent per-project persistent (across restarts of emacs) settings for
  the variables that govern omake (LINK_EXECUTABLES, X_LIBRARY_INLINING, etc)

changes
=======
- changed Omake.kill-server to Omake.shutdown

bug fixes
=========
- fixed bug where if omake died early, the progress bar kept spinning.
- fixed the [omake-mode-log] "read-only" bug
- fixed a bug where omake inserted \r rather than \n which
  made lines run together.  This made me miss anything that happened
  after the first \r
- fixed a bug that ignored directory names with . in them (such as
  eye/2.0/foo
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.