summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/eldoc.el
Commit message (Collapse)AuthorAgeFilesLines
* Fix off-by-one error in eldoc--handle-docsLars Ingebrigtsen2020-09-221-0/+4
| | | | | * lisp/emacs-lisp/eldoc.el (eldoc--handle-docs): We have one extra line to use if we don't show the truncation message (bug#43543).
* ; Fix typosStefan Kangas2020-09-211-2/+2
|
* Allow disabling the verbose eldoc truncation messageLars Ingebrigtsen2020-09-211-2/+11
| | | | | | | | * doc/emacs/programs.texi (Lisp Doc): Document it. * lisp/emacs-lisp/eldoc.el (eldoc-display-truncation-message): New variable (bug#43543). (eldoc--handle-docs): Use it.
* Fix ElDoc's eldoc-documentation-enthusiast strategyJoão Távora2020-09-031-9/+9
| | | | | | | | | | | | | | | | As soon as we get a response from any of the user functions/sources in eldoc-documentation-functions, we must make sure to call the display-doc local function, just like in the other strategies. That is even if that response produced nil, meaning that there's no doc coming from that source. Failure to do so when none of the sources produced non-nil would keep stale documentation displaying. First reported in https://github.com/joaotavora/eglot/issues/503 * lisp/emacs-lisp/eldoc.el (eldoc--invoke-strategy): Fix :enthusiast strategy. (Version): Bump to 1.10.0
* Prevent ElDoc blinking when eldoc-documentation-enthusiast is usedJoão Távora2020-08-291-2/+3
| | | | | | | | | | This eldoc-documentation-strategy function didn't always obey protocol since it returned nil sometimes, which the eldoc engine took it as a hint for the "old" protocol to clear the echo area. * lisp/emacs-lisp/eldoc.el (eldoc-documentation-enthusiast): Return t. (Version): Bump to 1.9.0
* Merge two conditions and fix indentationJonas Bernoulli2020-08-131-4/+4
| | | | | | | | | | | | | | | | | | | The motivation behind this change is that the indentation of some lines was outright wrong. If we address that issue, then we might as well also address the issue that some code is needlessly nested an additional level. That we can fix by merging the conditions. By doing these two changes in on commit we have to change the fewest lines. Even though we are moving to using just spaces for indentation of the modified lines, other lines in the same function are left alone and continue to us tabs+spaces for indentation. That is not "wrong", but just the style we are slowly migrating away from when touching lines for other reasons. Discussed in bug#42397. * lisp/emacs-lisp/eldoc.el (eldoc-minibuffer-message): Merge two conditions and fix indentation.
* Make newer ElDoc versions are compatible with Emacs < 28João Távora2020-07-271-6/+10
| | | | | | | | | | | | | | Fixes: bug#42563 For some time, Eldoc has has some Elisp-specific code that shouldn't live there, but in elisp-mode.el. This can be fixed in Emacs master, but since ElDoc is distributed in GNU Elpa and is meant to work with Emacs 26 and 27, this means that that elisp-specific code must still be distributed with eldoc.el and kept up to date. * lisp/emacs-lisp/eldoc.el (eldoc--eval-expression-setup): Ensure implementation is compatible with Emacs < 28. (Version): Bump to 1.8
* Bring back ElDoc's eldoc-display-message-p, but obsolete itJoão Távora2020-07-271-1/+7
| | | | | | | | | Like others, this is an implementation detail that third parties could be relying on. Better not remove it outright just now, since its implementation is very simple anyway. * lisp/emacs-lisp/eldoc.el (Version): Bump to 1.7.0 (eldoc-display-message-p): Bring back, but obsolete.
* Don't needlessly request docs from ElDoc functionsJoão Távora2020-07-231-19/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes: bug#42421 Do this conservatively for now: if the ElDoc helper buffer (as returned by eldoc--doc-buffer) is visible and showing documentation for the very same "situation" (as computed by the the new eldoc--request-state helper), don't request that documentation from sources again. Before this change, not only was that request inefficient but if the user invoked scroll-other-window to see more of the helper buffer, that would eventually cause it to be reformatted and unexpectedly recentered. Later on, when a customizable list of documentation "sinks" is offered to the user, say, something like eldoc-display-functions, this process must be consolidated. In those circumstances, as soon as one of those sinks signals that it doesn't have up-to-date documentation for the state computed by eldoc--request-state, documentation will have to be requested anew from eldoc-documentation-functions via eldoc--invoke-strategy. * lisp/emacs-lisp/eldoc.el (eldoc--request-docs-p): Rework from eglot-display-message-p. (eldoc--last-request-state): New variable. (eldoc--request-state): New helper. (eldoc--handle-docs): Memorize state of request in doc buffer. (eldoc-print-current-symbol-info): Pass a token to eldoc--request-docs-p. (Version): Bump to 1.6.0
* Fix ElDoc bugs around eldoc-echo-area-use-multiline-p.João Távora2020-07-191-9/+13
| | | | | | | | | | If the value is 'truncate-sym-name-if-fit andthe single docstring doesn't fit in the echo area even when the symbol name is elided, that step shouldn't be attempted. Also if the value is nil, really ensure that only the first line is shown. * lisp/emacs-lisp/eldoc.el (eldoc--handle-docs): Rework 'truncate-sym-name-if-fit case of eldoc-echo-area-use-multiline-p.
* ; Reword bits of ElDoc internal documentationJoão Távora2020-07-191-66/+66
| | | | | * lisp/emacs-lisp/eldoc.el (eldoc--invoke-strategy): Rewrite docstring. (eldoc--invoke-strategy): Fix formatting and rewrite comments
* ;Fix eldoc regression bug#42365Tassilo Horn2020-07-151-2/+3
|
* Consistently stylize eldoc as ElDoc in more proseBasil L. Contovounesios2020-07-141-6/+6
| | | | | | | | | | | | This fixes new occurrences of "Eldoc" since emacs-27. * doc/lispref/modes.texi (Major Mode Conventions): * etc/NEWS: * lisp/descr-text.el (describe-char-eldoc): * lisp/emacs-lisp/eldoc.el (eldoc-echo-area-use-multiline-p) (eldoc-prefer-doc-buffer, eldoc--documentation-strategy-defcustom): Consistently capitalize eldoc as ElDoc rather than Eldoc in documentation and commentary.
* Fix a typo in eldoc.elJames N. V. Cash2020-07-121-1/+1
| | | | | | | * lisp/emacs-lisp/eldoc.el (eldoc-documentation-functions): Fix a typo. (Bug#42310) Copyright-paperwork-exempt: yes
* Sort out ElDoc backward compatibility of eldoc-documentation-functionJoão Távora2020-07-121-5/+22
| | | | | | | | | | | | | | | | As explained previously, we can't simply make eldoc-documentation-function an variable alias for eldoc-documentation-strategy, because ElDoc is pre-loaded in Emacs < 28, where it holds at least one buffer-local binding. So if eldoc.el is loaded in those versions, we do the variable alias binding in reverse. We do this using a macro eldoc--documentation-strategy-defcustom to at load time in which direction to make the variable alias. * lisp/emacs-lisp/eldoc.el (eldoc--documentation-strategy-defcustom): Helper macro. (eldoc-documentation-strategy, eldoc-documentation-function): Use it. (Version): Bump to 1.5.0
* Fix placement of Eldoc docs during eval-expression (bug#42309)João Távora2020-07-101-36/+40
| | | | * lisp/emacs-lisp/eldoc.el (eldoc--handle-docs): Rework.
* Revert "Fix Eldoc problem when loading on Emacs 26.3"João Távora2020-07-101-4/+1
| | | | | | This reverts commit 9ade7ea7b77ec40c16deb4dff139ce7127a703e2. * lisp/emacs-lisp/eldoc.el (Version): Bump to 1.4.0
* Fix byte compilation warning in EldocJoão Távora2020-07-101-1/+1
| | | | | * lisp/emacs-lisp/eldoc.el (eldoc-documentation-function): Pass nil as second argument.
* Fix Eldoc problem when loading on Emacs 26.3João Távora2020-07-101-1/+4
| | | | | | | | | | | | | | | | | When defining the obsolete variable alias for old eldoc-documentation-function (which now points to the newer eldoc-documentation-strategy), one gets the error "don't know how to make a localized vareiable an alias". I'm not sure, but I suspect this is because Eldoc is preloaded in Emacs 26.3 and the eldoc-documentation-function variable is already set locally by some Elisp buffer. Uninterning the symbol shortly before defining the alias seems to fix it. * lisp/emacs-lisp/eldoc.el (eldoc-documentation-function): Unintern on load. (Version): Bump to 1.3.0
* Unbreak M-x eldocJoão Távora2020-07-091-13/+16
| | | | | | | | | The command should always invoke Eldoc when called interactively, instead of going through the usual checks, which are performed to avoid interference with other commands. * lisp/emacs-lisp/eldoc.el (eldoc-print-current-symbol-info): Rework. (Version): Bump to 1.2.0
* Prevent infloop in Eldoc message truncation algorithmJoão Távora2020-07-091-1/+1
| | | | | | | | | The truncation algorithm still has a long way to go for very narrow frame sizes. It should become a generic mechanism that would allows one to truncate a string so that fits in N possibly truncated screen lines of a full-width window. * lisp/emacs-lisp/eldoc.el (eldoc-handle-docs): Tweak
* Improve Eldoc docstringsJoão Távora2020-07-081-31/+87
| | | | | | | | | * lisp/emacs-lisp/eldoc.el (eldoc-documentation-strategy): Improve docstring. (eldoc--make-callback): Improve docstring. (eldoc--invoke-strategy): New helper function. (eldoc-print-current-symbol-info): Call eldoc--invoke-strategy. (eldoc-documentation-functions): Improve docstring.
* Change version scheme of two Eldoc obsolete specsJoão Távora2020-07-081-2/+2
| | | | | * lisp/emacs-lisp/eldoc.el (eldoc-documentation-function) (eldoc-message): Obsolete spec uses eldoc-1.1.0.
* Adjust Eldoc documentation after Eli's reviewJoão Távora2020-07-081-95/+106
| | | | | | | | | | | | | | * etc/NEWS (Eldoc): Adjust paragraphs. * lisp/emacs-lisp/eldoc.el (eldoc-prefer-doc-buffer): Adjust docstring. (eldoc--enthusiasm-curbing-timer, eldoc-documentation-strategy) (eldoc-documentation-functions): Adjust docstring. (eldoc--handle-docs): Adjust comments. (eldoc--documentation-compose-1): New helper. (eldoc-documentation-compose) (eldoc-documentation-compose-eagerly): Use it. (eldoc-print-current-symbol-info): Adjust comments.
* Make more parts of Emacs use new Eldoc capabilitiesJoão Távora2020-07-081-34/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Elisp-mode was doing a lot of work that can now be delegated to Eldoc. Flymake uses the new Eldoc functionality, too, installing a global documentation function that may report on diagnostics under point. CEDET's grammar.el was left as the only user of an Eldoc-internal function. That function was moved to grammar.el. That file is still, somewhat reprehensibly, using an internal function of elisp-mode.el, but this was left unchanged. In other situations, eldoc-documentation-functions is used or recommended. The only other places where the obsolete eldoc-documentation-function is still used is in libraries which are presumably meant to remain compatible with previous Emacs versions. * lisp/progmodes/elisp-mode.el (elisp-eldoc-funcall) (elisp-eldoc-var-docstring): New functions. (emacs-lisp-mode): Put two elements in eldoc-documentation-functions. * lisp/emacs-lisp/eldoc.el (eldoc--eval-expression-setup): Setup new Elisp eldoc-documentation-functions. * lisp/progmodes/flymake.el (flymake-mode): Use flymake-eldoc-function. (flymake-eldoc-function): New function. (Package-Requires): Require eldoc 1.1.0 * lisp/descr-text.el (describe-char-eldoc): Recommend eldoc-documentation-functions. * lisp/progmodes/cfengine.el (cfengine3-documentation-function): Recommend eldoc-documentation-functions * lisp/progmodes/octave.el (inferior-octave-mode): Use eldoc-documentation-functions. * lisp/cedet/semantic/grammar.el (semantic--docstring-format-sym-doc): New function. (semantic-grammar-eldoc-get-macro-docstring): Adjust.
* * lisp/emacs-lisp/eldoc.el (Version): Bump to 1.1.0João Távora2020-07-081-1/+1
|
* New M-x eldoc for on-demand and interactive documentation requestsJoão Távora2020-07-081-0/+3
| | | | | | | | | The function eldoc is just an alias for eldoc-print-current-symbol-info, which is made interactive. * lisp/emacs-lisp/eldoc.el (eldoc-print-current-symbol-info): Now an interactive function. (eldoc): Alias to eldoc-print-current-symbol-info.
* Better handle asynchronous Eldoc sourcesJoão Távora2020-07-081-86/+316
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a backward compatible redesign of significant parts of the eldoc.el library. Previously, Eldoc clients (major/minor modes setting its documentation gathering variables) needed to directly call eldoc-message, an internal function, to display the docstring to the user. When more asynchronous sources are involved, this is hard to do or even breaks down. Now, an Eldoc backend may return any non-nil, non-string value and call a callback afterwards. This restores power to Eldoc over how (and crucially also when) to display the docstrings to the user. Among other things, this fixes so called "doc blinking", or the very short-lived display of a lower priority Eldoc message. This would happen if a particular producer of documentation finishes shortly before a higher priority one, like in the LSP engine Eglot as reported by Andrii Kolomoiets <andreyk.mad@gmail.com> and Dmitry Gutov <dgutov@yandex.ru>. Gathering docstrings is now delegated to the variable eldoc-documentation-strategy, which is the new name for the now-obsolete eldoc-documentation-function, and still accepts the so-called "old protocol". Examples of the new strategies enabled are codified in functions such as eldoc-documentation-enthusiast, eldoc-documentation-compose-eagerly, along with the existing eldoc-documentation-compose and eldoc-documentation-default. The work of displaying and formatting docstrings is shifted almost fully to Eldoc itself and is delegated to the internal function eldoc--handle-docs. Among other improvements, it handles most of eldoc-echo-area-use-multiline-p and outputs documentation to a temporary *eldoc* buffer. The manual and NEWS are updated to mention the new Eldoc features. * lisp/emacs-lisp/eldoc.el (eldoc-documentation-functions): Overhaul docstring. (eldoc-documentation-compose, eldoc-documentation-default): Handle non-nil, non-string values of elements of eldoc-documentation-functions. Use eldoc--handle-multiline. (eldoc-print-current-symbol-info): Honour non-nil, non-string values returned by eldoc-documentation-callback. (eldoc--make-callback): Now also a function. (eldoc-documentation-default, eldoc-documentation-compose): Tweak docstring. (eldoc-documentation-enthusiast, eldoc-documentation-compose-eagerly): New functions. (eldoc-echo-area-use-multiline-p): Add new semantics. (eldoc--handle-docs): Handle some of eldoc-echo-area-use-multiline-p. (eldoc-doc-buffer): New command. (eldoc-prefer-doc-buffer): New defcustom. (eldoc--enthusiasm-curbing-timer): New variable. (eldoc-documentation-strategy): Rename from eldoc-documentation-function. (eldoc--supported-p): Use eldoc-documentation-strategy (eldoc-highlight-function-argument) (eldoc-argument-case, global-eldoc-mode) (turn-on-eldoc-mode): Mention eldoc-documentation-strategy. (eldoc-message-function): Mention eldoc--message. (eldoc-message): Made obsolete. (eldoc--message): New helper. * lisp/hexl.el (hexl-print-current-point-info): Adjust to new eldoc-documentation-functions protocol. * lisp/progmodes/cfengine.el (cfengine3-documentation-function): Adjust to new eldoc-documentation-functions protocol. * lisp/progmodes/elisp-mode.el (elisp-eldoc-documentation-function): Adjust to new eldoc-documentation-functions protocol. * lisp/progmodes/octave.el (octave-eldoc-function): Adjust to new eldoc-documentation-functions protocol. * lisp/progmodes/python.el (python-eldoc-function): Adjust to new eldoc-documentation-functions protocol. (eldoc-print-current-symbol-info): Rework with cl-labels. * doc/emacs/programs.texi (Lisp Doc): Mention eldoc-documentation-strategy. * doc/lispref/modes.texi (Major Mode Conventions): Mention eldoc-documentation-functions. * etc/NEWS: Mention eldoc-documentation-strategy.
* Turn Eldoc, Xref and Project into GNU ELPA :core packagesJoão Távora2020-05-131-0/+5
| | | | | | | | | | | | | | | | The new packages state they require Emacs 26.3 to function, but a small part of project.el breaks this "soft" rule: the two functions requiring fileloop.el are incompatible with Emacs 26.3. * lisp/jsonrpc.el: Tweak comment near Package-Requires. * lisp/emacs-lisp/eldoc.el: Add Version and Package-Requires. * lisp/progmodes/flymake.el: Add comment near Package-Requires. * lisp/progmodes/project.el: Add Version and Package-Requires. * lisp/progmodes/xref.el: Add Version and Package-Requires.
* * lisp/emacs-lisp/eldoc.el: Remove redundant `:group` argumentsStefan Monnier2020-03-121-35/+23
|
* * lisp/emacs-lisp/eldoc.el (eldoc--supported-p): Understand the "old" APIStefan Monnier2020-03-121-1/+10
|
* * lisp/emacs-lisp/eldoc.el (eldoc-documentation-function): No nil valueStefan Monnier2020-02-261-12/+7
| | | | | | (eldoc--supported-p): Move after the vars it uses. Simplify. (eldoc-print-current-symbol-info): Revert to previous code which assumed a non-nil value of eldoc-documentation-function.
* Expose ElDoc functions in a hook (Bug#28257)Mark Oteiza2020-02-251-17/+60
| | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/eldoc.el: Update commentary. (eldoc--eval-expression-setup): Use new hook. (eldoc--supported-p): Accomodate new hook. (eldoc-documentation-functions): New hook. (eldoc-documentation-default, eldoc-documentation-compose): New functions. (eldoc-documentation-function): Use 'eldoc-documentation-default' as new default value. Update documentation and custom attributes. (eldoc-print-current-symbol-info): Accomodate possible null value for 'eldoc-documentation-function'. * etc/NEWS: Mention them. * doc/emacs/programs.texi (Emacs Lisp Documentation Lookup): Mention new hook and changes to 'eldoc-documentation-function'. * lisp/hexl.el (hexl-mode, hexl-revert-buffer-function): * lisp/ielm.el (inferior-emacs-lisp-mode): * lisp/progmodes/cfengine.el (cfengine3-mode): * lisp/progmodes/elisp-mode.el (emacs-lisp-mode): * lisp/progmodes/octave.el (octave-mode): * lisp/progmodes/python.el (python-mode): Use new hook.
* Update copyright year to 2020Paul Eggert2020-01-011-1/+1
| | | | Run "TZ=UTC0 admin/update-copyright $(git ls-files)".
* Respect global-eldoc-mode in minibuffers (Bug#36886)Noam Postavsky2019-08-201-1/+18
| | | | | | | | | | | | | | | | * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Accept a BODY parameter. * doc/lispref/modes.texi (Defining Minor Modes): Document new parameter. * etc/NEWS: Announce it. * lisp/simple.el (read--expression): Move eldoc-mode setup to... * lisp/emacs-lisp/eldoc.el (eldoc--eval-expression-setup): ... here, new function. (global-eldoc-mode): Add or remove it to eval-expression-minibuffer-setup-hook when enabling or disabling global-eldoc-mode. This enables eldoc in the minibuffer (solving Bug#27202), only when global-eldoc-mode is enabled.
* Remove Maintainer: when it duplicates Author:Paul Eggert2019-05-261-1/+0
| | | | | | | The convention is that a file with Author: but not Maintainer: means the author is a maintainer, which makes it confusing when a file lists the same person as author and maintainer. Avoid the confusion by removing the duplicate Maintainer: line.
* Fixes for "Maintainer:" and related linesPaul Eggert2019-05-191-1/+1
| | | | | | Mostly, this just removes "Maintainer: emacs-devel@gnu.org" lines, which are not that useful. It also cleans up and regularizes a few similar lines.
* Merge from origin/emacs-26Paul Eggert2018-12-311-1/+1
|\ | | | | | | | | | | 2fcf2df Fix copyright years by hand 26bed8b Update copyright year to 2019 2814292 Fix value of default frame height. (Bug#33921)
| * Update copyright year to 2019Paul Eggert2019-01-011-1/+1
| | | | | | | | Run 'TZ=UTC0 admin/update-copyright $(git ls-files)'.
* | * lisp/emacs-lisp/eldoc.el: Let the user interrupt the searchStefan Monnier2018-12-041-6/+9
| | | | | | | | (eldoc-print-current-symbol-info): Use while-no-input and non-essential.
* | Optionally add argument description in minor mode DOC (bug#10754)John Shahid2018-07-011-3/+0
|/ | | | | | | | | | | Add a paragraph to minor mode's docstring documenting the mode's ARG usage if the supplied docstring doesn't already contain the word "ARG". * easy-mmode.el (easy-mmode--arg-docstring): New const. (easy-mmode--arg-docstring): New function. (define-minor-mode): Use them. Remove argument documentation from all minor modes.
* Update copyright year to 2018Paul Eggert2018-01-011-1/+1
| | | | Run admin/update-copyright.
* Prevent eldoc from changing the mode lineNick Helm2017-10-211-1/+2
| | | | | * lisp/emacs-lisp/eldoc.el (eldoc-minibuffer-message): Don't change the mode line if it is not displayed. (Bug#28697)
* Prefer HTTPS to FTP and HTTP in documentationPaul Eggert2017-09-131-2/+2
| | | | | | | | | | | | | Most of this change is to boilerplate commentary such as license URLs. This change was prompted by ftp://ftp.gnu.org's going-away party, planned for November. Change these FTP URLs to https://ftp.gnu.org instead. Make similar changes for URLs to other organizations moving away from FTP. Also, change HTTP to HTTPS for URLs to gnu.org and fsf.org when this works, as this will further help defend against man-in-the-middle attacks (for this part I omitted the MS-DOS and MS-Windows sources and the test tarballs to keep the workload down). HTTPS is not fully working to lists.gnu.org so I left those URLs alone for now.
* Simplify eldoc-messageDmitry Gutov2017-08-211-11/+4
| | | | | * lisp/emacs-lisp/eldoc.el (eldoc-message): Simplify. Don't use ARGS because no callers pass them. Discussed in bug#27230.
* ElDoc: add docstrings and minor refactoringCharles A. Roelli2017-07-221-11/+38
| | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/eldoc.el (eldoc-edit-message-commands): Add docstring. (turn-on-eldoc-mode): Fix capitalization. (eldoc--supported-p): Add docstring. (eldoc-schedule-timer): Add docstring and use 'eldoc--supported-p'. (eldoc-message): Add docstring and make calling convention clearer. (eldoc--message-command-p): (eldoc-pre-command-refresh-echo-area): (eldoc-display-message-p): (eldoc-display-message-no-interference-p): (eldoc-print-current-symbol-info): (eldoc-docstring-format-sym-doc): (eldoc-add-command, eldoc-add-command-completions): (eldoc-remove-command, eldoc-remove-command-completions): Add docstring. (Bug#27230)
* Enable ElDoc messages after the newline commandDmitry Gutov2017-06-061-1/+1
| | | | | * lisp/emacs-lisp/eldoc.el: Add "newline" to the eldoc-add-command-completions call (bug#27228).
* Extract eldoc--supported-pDmitry Gutov2017-05-311-2/+5
| | | | | | * lisp/emacs-lisp/eldoc.el (eldoc--supported-p): New function. (turn-on-eldoc-mode, eldoc-mode): Use it. (http://lists.gnu.org/archive/html/emacs-devel/2017-05/msg00865.html)
* Turn global-eldoc-mode into a globalized minor modeDmitry Gutov2017-05-301-20/+9
| | | | | | | * lisp/emacs-lisp/eldoc.el (global-eldoc-mode): Turn into globalized mode (bug#19853). (turn-on-eldoc-mode): Make it into a wrapper instead of alias. (eldoc-mode): Only show the message when called interactively.
* Merge from origin/emacs-25Paul Eggert2017-01-011-1/+1
|\ | | | | | | | | 2e2a806 Fix copyright years by hand 5badc81 Update copyright year to 2017