7 years agoAdd new core code development
Vegard Øye [Fri, 25 Feb 2011 19:35:16 +0000 (20:35 +0100)]
Add new core code

See vimpulse-states.el for details.

7 years agoPrevent the local bindings of `make-eval-tree' from shadowing the form
Vegard Øye [Fri, 25 Feb 2011 14:24:55 +0000 (15:24 +0100)]
Prevent the local bindings of `make-eval-tree' from shadowing the form

Emacs' dynamic scoping can be troublesome when evaluating a form
defined outside the current scope. If any of `make-eval-tree's local
variables occur in the FORM argument, they could influence the
evaluation of the form.

The solution used here is the same as for macros: make an uninterned
symbol with `make-symbol' and substitute that into the function
definition. The resulting (eval `(defun ...)) code isn't very pretty;
if there is a cleaner solution, I'd like to know.

7 years agoCorrect fixtures
Vegard Øye [Tue, 22 Feb 2011 20:50:44 +0000 (21:50 +0100)]
Correct fixtures

:setup requires a single form.

7 years agoRe-add test fixtures
Vegard Øye [Tue, 22 Feb 2011 20:48:45 +0000 (21:48 +0100)]
Re-add test fixtures

Also simplify fixture syntax: a single form instead of a list of forms.

7 years agoAlias `assert' to `should' and `assert-progn' to `expect'
Vegard Øye [Sun, 20 Feb 2011 19:46:00 +0000 (20:46 +0100)]
Alias `assert' to `should' and `assert-progn' to `expect'

Also improve nested error reporting, and reformat worklog.

7 years agoRemove abbreviated test definitions
Vegard Øye [Sat, 19 Feb 2011 17:23:09 +0000 (18:23 +0100)]
Remove abbreviated test definitions

This style is deprecated.

7 years agoRemove unused code and add BDD aliases
Vegard Øye [Sat, 19 Feb 2011 16:51:46 +0000 (17:51 +0100)]
Remove unused code and add BDD aliases

Remove abbreviated test definitions. Simplify return values to t and nil.
Implement recursive inspection of asserted forms. Add `should' aliases
for Behavior Driven Development.

8 years agoAdd type system
Vegard Øye [Mon, 17 Jan 2011 06:50:29 +0000 (07:50 +0100)]
Add type system

Unify a couple of concepts previously spread all over the place.

8 years agoAdd TODO development goals
Vegard Øye [Tue, 28 Dec 2010 20:03:08 +0000 (21:03 +0100)]
Add TODO development goals

Some New Year's resolutions to keep us busy. In the past, Vimpulse has
grown; in the future, it needs to mature.

8 years agoAdd worklog for the test framework
Vegard Øye [Wed, 22 Dec 2010 13:47:41 +0000 (14:47 +0100)]
Add worklog for the test framework

This is for unpolished memo-to-myself comments which neither fit into
the usage section nor the commit log.

8 years agoSeparate the test framework from the tests
Vegard Øye [Wed, 22 Dec 2010 13:00:49 +0000 (14:00 +0100)]
Separate the test framework from the tests

Put the framework in test-framework.el, so that vimpulse-test.el only
contains tests.

8 years agoFix an off-by-one error in `vimpulse-get-mark'
Štěpán Němec [Tue, 21 Dec 2010 12:53:19 +0000 (13:53 +0100)]
Fix an off-by-one error in `vimpulse-get-mark'

8 years agoOnly try to persist global marks
Štěpán Němec [Tue, 21 Dec 2010 12:35:23 +0000 (13:35 +0100)]
Only try to persist global marks

Iterating over `vimpulse-local-marks-alist' in `kill-buffer-hook' makes
no sense, as the variable's value is going to vanish together with the

8 years agoFix `vimpulse-make-careful-binding' wrt. (kbd "TAB")
Vegard Øye [Sat, 18 Dec 2010 15:46:58 +0000 (16:46 +0100)]
Fix `vimpulse-make-careful-binding' wrt. (kbd "TAB")

Occasionally, `read-kbd-macro' may fail to produce a useful key vector
from the KEY argument. In those cases, resort to `vconcat'.

8 years agoEnsure Viper keymaps come first in `emulation-mode-map-alists'
Vegard Øye [Sat, 18 Dec 2010 15:12:24 +0000 (16:12 +0100)]
Ensure Viper keymaps come first in `emulation-mode-map-alists'

Some modes, such as Cua-mode, may modify this variable so that the
Viper keymaps get lower priority.

8 years agoFix "gb" bug with paragraphs
Vegard Øye [Wed, 15 Dec 2010 20:53:33 +0000 (21:53 +0100)]
Fix "gb" bug with paragraphs

`vimpulse-end-of-previous-word' is not able to cross paragraph
boundaries because `viper-backward-Word' stops at the empty line.

8 years agoFix `vimpulse-called-interactively-p' in GNU Emacs 23.1
Vegard Øye [Sun, 14 Nov 2010 14:47:43 +0000 (15:47 +0100)]
Fix `vimpulse-called-interactively-p' in GNU Emacs 23.1

The ANY parameter of `called-interactively-p' was introduced in 23.2.
Replace version check with `condition-case'.

8 years agoMake "gq" repeatable
Vegard Øye [Wed, 10 Nov 2010 20:56:27 +0000 (21:56 +0100)]
Make "gq" repeatable

According to Vim's documentation, repeating works well with "gqj"
and "gq}".

8 years agoAdd `viper-scroll-screen' to `vimpulse-movement-cmds'
Vegard Øye [Wed, 10 Nov 2010 20:44:25 +0000 (21:44 +0100)]
Add `viper-scroll-screen' to `vimpulse-movement-cmds'

`viper-scroll-screen' ("C-f") and `viper-scroll-screen-back' ("C-b")
are movement commands and must be listed as such to work reliably in
Visual mode.

8 years agoHighlight all `vimpulse-define-' forms
Vegard Øye [Mon, 1 Nov 2010 12:05:48 +0000 (13:05 +0100)]
Highlight all `vimpulse-define-' forms

We don't need separate regexps for `vimpulse-define-operator',
`vimpulse-define-state', etc.

8 years agoSimplify `vimpulse-insert' and `vimpulse-append'
Vegard Øye [Sun, 31 Oct 2010 20:38:44 +0000 (21:38 +0100)]
Simplify `vimpulse-insert' and `vimpulse-append'

Remove superfluous clause.

8 years agoMake block insert and append repeatable
Vegard Øye [Sun, 31 Oct 2010 16:55:18 +0000 (17:55 +0100)]
Make block insert and append repeatable

It is now possible to repeat actions like "C-v j I <text>" with ".".
This does away with Alessandro's `vimpulse-visual-insert-coords' code,
which was based on the number of lines; the new code uses markers
instead. We also remove the redefinition of `viper-exit-insert-state',
since the "update all lines when we hit ESC" behavior can be
conveniently fitted into `viper-vi-state-hook'.

8 years agoAdd "gJ" (`vimpulse-Join')
Vegard Øye [Sun, 31 Oct 2010 09:25:56 +0000 (10:25 +0100)]
Add "gJ" (`vimpulse-Join')

It joins lines without inserting or removing any spaces.
Also add \\<viper-vi-basic-map> to docstrings referring to vi keys.

8 years agoEnsure `mock' returns the mocked function
Vegard Øye [Sun, 24 Oct 2010 10:46:35 +0000 (12:46 +0200)]
Ensure `mock' returns the mocked function

Lisp convention; cf. 19ea645.

8 years agoReplace recursive `vimpulse-filter-undo-boundaries' function
Vegard Øye [Sat, 23 Oct 2010 11:12:31 +0000 (13:12 +0200)]
Replace recursive `vimpulse-filter-undo-boundaries' function

`buffer-undo-list' can get quite large during an insert, and
`max-lisp-eval-depth' is only 400 by default. The recursive approach
of `vimpulse-filter-undo-boundaries' is therefore untenable; replace
it with `vimpulse-filter-list', which is iterative and more general.

8 years agoDisable `ex-cmd-read-exit'
Vegard Øye [Tue, 28 Sep 2010 14:54:02 +0000 (16:54 +0200)]
Disable `ex-cmd-read-exit'

This Viper function is buggy, and not really needed.

8 years agoFix corrupt "make big" target after 37945c5
Vegard Øye [Tue, 28 Sep 2010 14:42:07 +0000 (16:42 +0200)]
Fix corrupt "make big" target after 37945c5

The `eval-when-compile' forms cannot span multiple lines if sed
is to filter them correctly.

8 years agoRemove obsolete `vimpulse-visual-restore' fragment
Vegard Øye [Mon, 27 Sep 2010 15:53:44 +0000 (17:53 +0200)]
Remove obsolete `vimpulse-visual-restore' fragment

After 0275627, the Visual point/mark (used by "gv") may very well
occur after a newline; therefore, the adjustments added by c7fd023,
which treated this as an anomalous case, are no longer relevant.

8 years agoDon't require `vimpulse-dependencies' in `vimpulse-test'
Štěpán Němec [Mon, 27 Sep 2010 11:46:36 +0000 (13:46 +0200)]
Don't require `vimpulse-dependencies' in `vimpulse-test'

Should have been removed in 5bfbca594cb
("Remove `vimpulse-called-interactively-p' from vimpulse-test.el")

8 years agoRemove Visual advice for `viper-forward-char' and `viper-goto-eol'
Vegard Øye [Sun, 26 Sep 2010 12:57:19 +0000 (14:57 +0200)]
Remove Visual advice for `viper-forward-char' and `viper-goto-eol'

Instead, define two movement commands, `vimpulse-visual-forward-char'
and `vimpulse-visual-goto-eol', and associate them with their Viper
counterparts via remap bindings.

8 years agoRemove superfluous Visual code
Vegard Øye [Sun, 26 Sep 2010 12:31:29 +0000 (14:31 +0200)]
Remove superfluous Visual code

`viper-intercept-ESC-key' advice is not needed.
`vimpulse-visual-remap' function is not needed.
`vimpulse-visual-before' need not be a macro, replace with
`vimpulse-visual-old-value' function. Add some commentary on
related variables `vimpulse-visual-global-vars' and

8 years agoRemove abbrev-mode code from `vimpulse-autoindent'
Vegard Øye [Sun, 19 Sep 2010 17:23:25 +0000 (19:23 +0200)]
Remove abbrev-mode code from `vimpulse-autoindent'

This is a hangover from Viper. While it might be useful to trigger
abbrev expansion with "ESC" and "RET", such behavior should at the
very least depend on a customization variable.

8 years agoRemove `vimpulse-set-visual-dimensions' from `vimpulse-visual-activate'
Vegard Øye [Thu, 16 Sep 2010 15:54:46 +0000 (17:54 +0200)]
Remove `vimpulse-set-visual-dimensions' from `vimpulse-visual-activate'

We don't want to change the memory of the previous selection when
calling `vimpulse-visual-activate' programmatically (as may happen in
a repeat).

8 years agoMinor doc fixes stepnem
Štěpán Němec [Wed, 15 Sep 2010 18:37:31 +0000 (20:37 +0200)]
Minor doc fixes

8 years agoSimplify `vimpulse-operator-cmd-p'
Štěpán Němec [Mon, 13 Sep 2010 14:54:54 +0000 (16:54 +0200)]
Simplify `vimpulse-operator-cmd-p'

There is no point in converting non-nil values to `t'.

8 years agoDon't use `eval' in `vimpulse-unquote'
Štěpán Němec [Mon, 30 Aug 2010 17:51:17 +0000 (19:51 +0200)]
Don't use `eval' in `vimpulse-unquote'

(Useless use of `eval' series part II)

If we get (quote SOMETHING), we want SOMETHING.
That's what `cadr' does.

8 years agoRemove compile.bat
Štěpán Němec [Mon, 30 Aug 2010 15:52:32 +0000 (17:52 +0200)]
Remove compile.bat

The file has obviously not been used by anybody, as the single-file version
produced by it doesn't work due to absence of the `sed' kludge.

8 years agoFix most of the compiler warnings
Štěpán Němec [Sat, 28 Aug 2010 18:53:48 +0000 (20:53 +0200)]
Fix most of the compiler warnings

Beginning attempt at rationalising the structure of the code. Now
Vimpulse should byte-compile no matter how you do it, with almost no
warnings, both in single-file and multiple-file forms, although support
for the former should be removed in near future.

- add proper `require' and `declare-function' forms
- move variable declarations to the appropriate files instead of dumping
  everything in vimpulse-dependencies.el
- shuffle some of the code so that definitions are before use
- adjust the sequence of (sub)files in the single-file version

- makefile changes:
  - general cleanup
  - add new targets for byte compilation and testing
  - `make big' now produces `vimpulse.el' in a `bigd' directory, while
    `make' or `make all' compiles the Elisp files.

8 years agoRemove `vimpulse-called-interactively-p' from vimpulse-test.el
Vegard Øye [Wed, 15 Sep 2010 14:19:31 +0000 (16:19 +0200)]
Remove `vimpulse-called-interactively-p' from vimpulse-test.el

The test framework should be independent of Vimpulse. While unlikely
in this case, we don't want Vimpulse bugs to propagate into the code
responsible for testing it. (Of course, the tests themselves cannot be
independent, so vimpulse-test.el will still require the rest of

8 years agoProhibit abbrev-expanding behavior of `viper-change-state-to-vi'
Vegard Øye [Wed, 15 Sep 2010 13:58:58 +0000 (15:58 +0200)]
Prohibit abbrev-expanding behavior of `viper-change-state-to-vi'

`viper-change-state-to-vi' may expand the abbrev before point if
abbrev-mode is t. This is not desirable in programmatic contexts.
See also commit cd738cd.

8 years agoAdd Edebug specifications for macros
Vegard Øye [Wed, 15 Sep 2010 13:50:33 +0000 (15:50 +0200)]
Add Edebug specifications for macros

Edebug cannot trace macros like `vimpulse-define-operator' without a
`debug' declaration. For details, see chapter 18, "Debugging Lisp
Programs", of the GNU Emacs Lisp Reference Manual. The declarations
for user macros like `vimpulse-define-operator' are mainly derived
from the declaration of the `define-minor-mode' macro, which has the
same name-docstring-keywords-body structure.

8 years agoAdd `silent-tests' and `logged-tests' variables
Vegard Øye [Tue, 14 Sep 2010 11:59:22 +0000 (13:59 +0200)]
Add `silent-tests' and `logged-tests' variables

By default, tests and suites log their results in the *Messages*
buffer. If `logged-tests' is nil, results are not logged;
if `silent-tests' is t, results are not even echoed.

Exception: if `silent-tests' is t and a test or suite is called
interactively, the result is echoed, but not logged.

8 years agoIntroduce `vimpulse-called-interactively-p' compatibility macro
Štěpán Němec [Mon, 13 Sep 2010 16:54:41 +0000 (18:54 +0200)]
Introduce `vimpulse-called-interactively-p' compatibility macro

This fixes the `called-interactively-p' problem in a better way, also
avoiding the compiler warnings (cf. c49cce76d4).

8 years agoAdd DEBUG parameter to tests and suites
Vegard Øye [Mon, 13 Sep 2010 13:04:46 +0000 (15:04 +0200)]
Add DEBUG parameter to tests and suites

This provides verbose output useful on a per-test basis. Normally,
tests are run in "batch mode", where the test code is wrapped in a
protective `condition-case' form. This is usually what we want, since
it doesn't halt code execution when vimpulse-test.el is loaded in
.emacs. Thus, if something fails, we will get a warning, but Emacs
will still load to the best of its ability.

Otherwise, in "debug mode", the debugger is entered on error and
execution is halted. This mode is enabled by running a test or suite
interactively, or by passing t to the DEBUG parameter, e.g., (test t).
The "debug mode" sets `debug-on-error' to t.

Incidentally, the DEBUG parameter is also used for selecting among the
different "clauses" of a test function mentioned in the message of
commit 67edb0a. In the "internal" cases, DEBUG is either `batch' or
`debug', and the test silently returns t if it passes or returns an
error message string if it fails (or it enters the debugger). When
tests are run as part of a suite, they are run in this way. The suite
collects all error messages and presents them to the user.

In the "user" cases, DEBUG is either nil (the default) or t, and the
test looks for a suite to present it. The test calls a suite which in
turn runs the test "internally". In sketch:

    +--------+    +-------------------+    +---------------+
    | (test) | => | (suite ... 'test) | => | (test 'batch) |
    +--------+    +-------------------+    +---------------+

If DEBUG is nil (the default when called programmatically), the test
is ultimately called in "batch mode". If DEBUG is t (the default when
called interactively), the test is ultimately called in "debug mode".
A :debug keyword argument may be specified to let a test be called in
"debug mode" by default, but this should be used carefully.

8 years agoForgot `vimpulse-remove-minibuffer-marks' in e18f924
Vegard Øye [Mon, 13 Sep 2010 10:15:27 +0000 (12:15 +0200)]
Forgot `vimpulse-remove-minibuffer-marks' in e18f924

This, too, belongs in its own branch.

8 years agoFix `called-interactively-p' error in Emacs 22 after b6f1f19
Vegard Øye [Mon, 13 Sep 2010 10:13:11 +0000 (12:13 +0200)]
Fix `called-interactively-p' error in Emacs 22 after b6f1f19

In GNU Emacs 22, `called-interactively-p' accepts no arguments.
In GNU Emacs 23, `called-interactively-p' requires one argument.

8 years agoBump version to 0.5+git
Vegard Øye [Sun, 12 Sep 2010 13:13:06 +0000 (15:13 +0200)]
Bump version to 0.5+git

8 years agoVersion 0.5 vimpulse-0.5
Vegard Øye [Sun, 12 Sep 2010 13:00:24 +0000 (15:00 +0200)]
Version 0.5

8 years agoRemove trailing period from URLs
Vegard Øye [Sun, 12 Sep 2010 10:50:09 +0000 (12:50 +0200)]
Remove trailing period from URLs

Sentences be damned; this is more idiot-proof.

8 years agoTypo
Vegard Øye [Sun, 12 Sep 2010 10:33:11 +0000 (12:33 +0200)]

8 years agoUpdate headers
Vegard Øye [Sun, 12 Sep 2010 10:27:20 +0000 (12:27 +0200)]
Update headers

Replace Assembla with Gitorious, reorder the News section,
remove outdated bugs/todos and refill the comments.

8 years agoRemove global-marks code
Vegard Øye [Fri, 10 Sep 2010 21:30:24 +0000 (23:30 +0200)]
Remove global-marks code

This currently belongs in its own branch.

8 years agoFix `called-interactively-p' calls
Vegard Øye [Fri, 10 Sep 2010 21:28:43 +0000 (23:28 +0200)]
Fix `called-interactively-p' calls

`called-interactively-p' requires one argument, KIND.

8 years agoFix toggling of regexp search with "M-r"
Vegard Øye [Fri, 10 Sep 2010 21:20:59 +0000 (23:20 +0200)]
Fix toggling of regexp search with "M-r"

`viper-re-search' is the default regexp mode when pressing "/" or "?".
`isearch-regexp' is the current regexp mode when toggling with "M-r".

8 years agoChange `integerp' condition in `vimpulse-keypress-parser'
Vegard Øye [Fri, 10 Sep 2010 10:16:15 +0000 (12:16 +0200)]
Change `integerp' condition in `vimpulse-keypress-parser'

In XEmacs, (integerp ?\C-0) => nil and (characterp ?\C-0) => t;
in GNU Emacs, (integerp ?\C-0) => t and (characterp ?\C-0) => nil
(provided `characterp' exists, otherwise we alias it to `integerp').
Since the `-'/`logand' arithmetic for converting keys to integers
works the same in both cases, we change the condition to
(or (characterp char) (integerp char)).

8 years agoRewrite `vimpulse-range-height'/`vimpulse-range-width'
Vegard Øye [Thu, 9 Sep 2010 11:50:59 +0000 (13:50 +0200)]
Rewrite `vimpulse-range-height'/`vimpulse-range-width'

Since they belong to the `vimpulse-range-' class of functions,
they should take a range as their argument.

8 years agoMake `vimpulse-calculate-motion-range' respect
Vegard Øye [Thu, 9 Sep 2010 11:05:18 +0000 (13:05 +0200)]
Make `vimpulse-calculate-motion-range' respect

Normally, we execute motions inside (the equivalent of)
`save-excursion' when calculating motion ranges. However, if the
motion sets `vimpulse-inhibit-operator' to t, the motion should be
regarded as "in charge" and the previous point and mark should not
be restored.

8 years agoMake "*" and "#" preserve search when pressed repeatedly
Vegard Øye [Wed, 8 Sep 2010 17:32:51 +0000 (19:32 +0200)]
Make "*" and "#" preserve search when pressed repeatedly

If we have the text

    emacs emacs emacs EMACS emacs

and move from word to word with "*", point will move to "EMACS" if
`case-fold-search' is t. If `search-upper-case' is non-nil, the
upper-case characters may enable a case-sensitive search. We make
this dependent on the previous command: if it was "*", then the old
search is continued; if it was something else, a new search is
started, which may be case-sensitive.

8 years agotest: (require 'vimpulse) in the Vimpulse tests
Štěpán Němec [Mon, 30 Aug 2010 17:15:00 +0000 (19:15 +0200)]
test: (require 'vimpulse) in the Vimpulse tests

8 years agoFix fixture bug after 67edb0a
Vegard Øye [Wed, 8 Sep 2010 17:15:50 +0000 (19:15 +0200)]
Fix fixture bug after 67edb0a

The :fixture, :setup and :teardown arguments would not convert
a list of expressions to an executable lambda function.

8 years agoRemove obsolete function `vimpulse-memq-recursive'
Vegard Øye [Wed, 8 Sep 2010 16:55:24 +0000 (18:55 +0200)]
Remove obsolete function `vimpulse-memq-recursive'

This function was used for identifying operator commands by searching
their `interactive' form. Since `viper-define-operator' lists all
operators in the variable `vimpulse-operators', identifying operators
is now much easier (and reliable).

8 years agoAdd `vimpulse-define-operator' macro
Vegard Øye [Wed, 8 Sep 2010 16:50:23 +0000 (18:50 +0200)]
Add `vimpulse-define-operator' macro

Define operator commands in terms of `vimpulse-define-operator'. This
is now preferred over using `vimpulse-range' directly. Also define a
`vimpulse-inhibit-operator' variable for letting a motion disable the
operator calling it.

Furthermore, move operators from vimpulse-misc-keybindings.el to
vimpulse-operator.el and macrofy `vimpulse-operator-message'.

8 years agoFix "#" bug after commit 2c55728
Vegard Øye [Tue, 7 Sep 2010 08:09:33 +0000 (10:09 +0200)]
Fix "#" bug after commit 2c55728

"#" does not move in the opposite direction of "*",
as it should.

8 years agoImprove "*" and "#" with regard to smartcase searching
Vegard Øye [Mon, 6 Sep 2010 18:25:27 +0000 (20:25 +0200)]
Improve "*" and "#" with regard to smartcase searching

If "*" did a case-sensitive search, subsequent invocations should
retain the case-sensitivity (provided point is not moved, changing
the search). Fix bug where isearch highlighting might not follow
suit, case-wise. Also remove some weird docstring formatting.

8 years agoAugment docstrings of "/" and "?" with docstring of `isearch-forward'
Vegard Øye [Fri, 3 Sep 2010 18:48:41 +0000 (20:48 +0200)]
Augment docstrings of "/" and "?" with docstring of `isearch-forward'

This provides useful info when the user hits "C-h /" or "C-h ?".

8 years agoMake `vimpulse-define-' functions return the defined symbol
Vegard Øye [Fri, 3 Sep 2010 18:23:45 +0000 (20:23 +0200)]
Make `vimpulse-define-' functions return the defined symbol

This is a Lisp convention. For example, (defun foo ...) returns `foo'.

8 years agoFix long-standing compilation issues with the test framework
Vegard Øye [Fri, 3 Sep 2010 18:10:57 +0000 (20:10 +0200)]
Fix long-standing compilation issues with the test framework

To let `defsuite' be wrapped around `deftest', there were two
strategies for making the two "communicate": either at compile time or
at run time. The former was tried first, with partial results: tests
would work uncompiled and the file would compile without warnings --
but the tests wouldn't work compiled.

In this commit, we make the communication happen at run time instead.
The macro expansion of `defsuite' is a `let' form which the expansion
of `deftest', running inside the form, can pick up on. The tests now
compile properly, with (ahem) considerable speed gains.

We also try to disentangle the confusing relationship between suites
and tests. Since the current suite is always included in the failure
report, suites, not tests, are charged with the task of reporting
failures. A test function consists of two clauses: either the test
will call a suite to run itself (and report any failure), or it will
execute its test code and return the result. If the test succeeds, the
return value is t; otherwise it is an error message string, which the
calling suite collects and reports.

Any suite can be called to run any test. If a test is not associated
with a suite, it may default to `empty-suite'.

8 years agoLet "l" and "$" move to the very end of line in Visual mode
Vegard Øye [Fri, 3 Sep 2010 17:12:51 +0000 (19:12 +0200)]
Let "l" and "$" move to the very end of line in Visual mode

In vi state, motions stop one character short of the end of line.
In Visual mode, allow them to move to the very end, in effect
including the newline. Remove assumption in `vimpulse-inclusive-range'
that this is an error.

8 years agoRemove "whole sentences" rule and reformat comments
Vegard Øye [Fri, 3 Sep 2010 16:46:20 +0000 (18:46 +0200)]
Remove "whole sentences" rule and reformat comments

Short comments may be uncapitalized and period-less:

    ;; this is a short comment

Longer comments may be neither:

    ;; This is a longer comment.

Until now, "phrase comments" (the first type) were disallowed for
consistency. This strictness came at the price of having to "correct"
many contributions. As it is less work to simply go with common
practices, it makes better sense to lift the restriction.

8 years agoProvide overview of keybinding functions
Vegard Øye [Fri, 3 Sep 2010 15:38:20 +0000 (17:38 +0200)]
Provide overview of keybinding functions

The comment block of vimpulse-modal.el focuses excessively on careful
bindings, so narrow it down and shed some light on the the other

8 years agoFix wrong return value for `vimpulse-setq' after 8fb007e
Vegard Øye [Fri, 3 Sep 2010 15:18:41 +0000 (17:18 +0200)]
Fix wrong return value for `vimpulse-setq' after 8fb007e

`vimpulse-setq' needs to use splicing to return VAL;
otherwise it returns nil.

8 years agoSplicing for splicing's sake
Štěpán Němec [Mon, 30 Aug 2010 17:19:36 +0000 (19:19 +0200)]
Splicing for splicing's sake

8 years agoSimplify key parsing in `vimpulse-make-careful-binding'
Štěpán Němec [Mon, 30 Aug 2010 17:48:42 +0000 (19:48 +0200)]
Simplify key parsing in `vimpulse-make-careful-binding'

(Useless use of `eval' series part I)

Just as with `define-key', KEY can be a string, or a vector.
If it is a string, `read-kbd-macro' with a non-nil second
argument gives us a vector.

8 years ago`vimpulse-strip-prefix': Remove redundant argument to `concat'
Štěpán Němec [Mon, 30 Aug 2010 10:08:56 +0000 (12:08 +0200)]
`vimpulse-strip-prefix': Remove redundant argument to `concat'

8 years agoSimplify a branch in `vimpulse-truncate'
Štěpán Němec [Mon, 30 Aug 2010 10:00:04 +0000 (12:00 +0200)]
Simplify a branch in `vimpulse-truncate'

8 years agoMake `viper-case-fold-search' an alias for `case-fold-search'
Vegard Øye [Thu, 2 Sep 2010 11:11:19 +0000 (13:11 +0200)]
Make `viper-case-fold-search' an alias for `case-fold-search'

Since Vimpulse's /-search is isearch in disguise, case sensitivity is
really controlled by `case-fold-search'. Locally binding this variable
in the search command won't work, as an isearch session spans several
iterations of the command loop.

8 years agoMinor doc fixes
Štěpán Němec [Mon, 30 Aug 2010 17:57:32 +0000 (19:57 +0200)]
Minor doc fixes

8 years agoFix garbled indentation from 116a9aa
Vegard Øye [Mon, 30 Aug 2010 20:17:40 +0000 (22:17 +0200)]
Fix garbled indentation from 116a9aa

This file must be loaded for its macros to indent correctly.

8 years agoFix `vimpulse-change' bug when point is outside range
Vegard Øye [Mon, 30 Aug 2010 15:41:51 +0000 (17:41 +0200)]
Fix `vimpulse-change' bug when point is outside range

Some text objects, such as "i(", may select text that lies ahead of
point. When a "ci(" change is repeated and point is at an opening
parenthesis, the text is inserted before the parentheses instead of
between them. The problem is fixed by ensuring that `vimpulse-change'
always moves point to the text range's beginning.

8 years agoFix "nil" in echo area
Vegard Øye [Mon, 30 Aug 2010 12:43:13 +0000 (14:43 +0200)]
Fix "nil" in echo area

When typing longer sequences like "dt*", `vimpulse-range' may flash
"nil" in the echo area. This only happens when there is no previous
message to restore. If the `oldmsg' variable is non-nil, then
(message "%s" oldmsg) echoes the previous message correctly; but if
`oldmsg' is nil, then we want (message nil) instead, i.e., to clear
the echo area.

8 years agoUpdate punctuation rules
Vegard Øye [Mon, 30 Aug 2010 12:32:34 +0000 (14:32 +0200)]
Update punctuation rules

Commit summaries should no longer end with a period.
Also add anti-tabs tip and make all points full sentences
(for consistency with the summary tip, which comprises
two sentences).

8 years agoMinor docstring/typo fixes
Štěpán Němec [Tue, 24 Aug 2010 19:01:36 +0000 (21:01 +0200)]
Minor docstring/typo fixes

8 years agoFix a branch in `vimpulse-change' definition (DONT-SAVE handling)
Štěpán Němec [Tue, 24 Aug 2010 18:53:46 +0000 (20:53 +0200)]
Fix a branch in `vimpulse-change' definition (DONT-SAVE handling)

Re-enter Insert state after deleting the to-be-changed text (only in
the character-wise case, other branches are already handled correctly).

8 years agoRemove duplicate declaration of `killed-rectangle'
Štěpán Němec [Tue, 24 Aug 2010 18:48:51 +0000 (20:48 +0200)]
Remove duplicate declaration of `killed-rectangle'

8 years agoClarify origin of some less obvious variables
Štěpán Němec [Tue, 24 Aug 2010 18:48:00 +0000 (20:48 +0200)]
Clarify origin of some less obvious variables

(Read: those that violate the package prefix naming convention.)

8 years agoHunk forgotten in fb62c8a ("Fix buggy `message' invocations")
Štěpán Němec [Tue, 24 Aug 2010 18:43:20 +0000 (20:43 +0200)]
Hunk forgotten in fb62c8a ("Fix buggy `message' invocations")

8 years ago`saved-echo-keystrokes' -> `vimpulse-saved-echo-keystrokes'
Štěpán Němec [Tue, 24 Aug 2010 18:38:30 +0000 (20:38 +0200)]
`saved-echo-keystrokes' -> `vimpulse-saved-echo-keystrokes'

Rename the variable to avoid polluting global namespace and move the
definition to the (only) place of use.

8 years agoSimplify the `ex-token-alist' additions
Štěpán Němec [Fri, 20 Aug 2010 13:45:25 +0000 (15:45 +0200)]
Simplify the `ex-token-alist' additions

There is no point in using `add-to-list' when we already deleted all
possible duplicates beforehand. I also don't see any advantage of
appending instead of pushing into the list.

8 years agoGet rid of `vimpulse-cycle-windows'
Štěpán Němec [Fri, 20 Aug 2010 13:37:52 +0000 (15:37 +0200)]
Get rid of `vimpulse-cycle-windows'

It was just reinventing `other-window' without COUNT.

8 years agoEnsure state bindings for minor modes are properly refreshed
Vegard Øye [Tue, 24 Aug 2010 17:27:10 +0000 (19:27 +0200)]
Ensure state bindings for minor modes are properly refreshed

When a minor mode with state bindings is enabled, we should
immediately call `viper-normalize-minor-mode-map-alist' to ensure the
relevant keymaps are ranked properly and `viper-set-mode-vars-for' to
ensure they are active. Otherwise, the state bindings will not work
until the user enters (and exits) Insert state. We let
`vimpulse-define-key' advise the mode function, so that the mentioned
functions are called automatically. Thus, M-x mode or (mode 1) will
automatically refresh the bindings; (setq mode t) will not, however.

8 years agoArrow keys don't work as motions
Nick Smallbone [Sat, 21 Aug 2010 21:40:30 +0000 (23:40 +0200)]
Arrow keys don't work as motions

I also mentioned another problem, that "y2<right>" didn't work, that
I've since managed to fix. The bug was in `vimpulse-keypress-parser':
there's a variable `digit' that gets set when you type a prefix
argument (2 in this case). It's supposed to get reset once you type
the next character, but this only happens if the next character is an
ASCII character, and as a result, if you type in a non-ASCII
character, it gets accidentally treated as a prefix argument instead.

8 years agoBugfix: `viper-search-wrap-around' void in GNU Emacs 22
Vegard Øye [Fri, 20 Aug 2010 22:15:17 +0000 (00:15 +0200)]
Bugfix: `viper-search-wrap-around' void in GNU Emacs 22

Vimpulse redefines Viper's search code from Emacs 23 to correct a bug.
This code references a variable which is not defined in earlier
Emacs versions.

8 years agoAdd `characterp' for GNU Emacs 22
Vegard Øye [Fri, 20 Aug 2010 22:13:24 +0000 (00:13 +0200)]
Add `characterp' for GNU Emacs 22

`characterp' is new in Emacs 23. If it is not defined, we alias it
to `integerp'.

8 years agoBugfix: arrow keys don't work as motions
Vegard Øye [Fri, 20 Aug 2010 22:11:13 +0000 (00:11 +0200)]
Bugfix: arrow keys don't work as motions

`vimpulse-strip-prefix' has an option for string output, used by
`vimpulse-range' for comparison against shortcuts like "g??". However,
not all key sequences can be represented as strings. If the sequence
contains a non-numerical element, it is returned as a vector instead.

8 years agoFix buggy `message' invocations
Štěpán Němec [Fri, 20 Aug 2010 18:49:45 +0000 (20:49 +0200)]
Fix buggy `message' invocations

Thanks to Stephen Bach and Tim Harper for catching that.

8 years ago`vimpulse-window-map': Move definition into declaration
Štěpán Němec [Fri, 20 Aug 2010 13:05:17 +0000 (15:05 +0200)]
`vimpulse-window-map': Move definition into declaration

This avoids compiler warnings (and need for declaration) when using

8 years agoExtinguish some Yoda remnants
Štěpán Němec [Thu, 19 Aug 2010 23:03:37 +0000 (01:03 +0200)]
Extinguish some Yoda remnants

[Cf. 7a08c24 and post-0.4 NEWS for the bigger picture.]

8 years agoCompiler pacifier: replace `mapcar' with `mapc'
Vegard Øye [Wed, 18 Aug 2010 23:10:00 +0000 (01:10 +0200)]
Compiler pacifier: replace `mapcar' with `mapc'

The compiler politely complains when `mapcar' is called for its side
effects only, since it is unnecessary to accumulate the results.
In such cases, the simpler `mapc' should be used instead.

8 years agoBugfix: "Vd" doesn't include newline when Vimpulse is byte-compiled
Vegard Øye [Wed, 18 Aug 2010 23:03:14 +0000 (01:03 +0200)]
Bugfix: "Vd" doesn't include newline when Vimpulse is byte-compiled

When working with linewise selections, it is often useful to exclude
the final newline (e.g., skeletons). Operator commands, however,
should always receive the "full range". `vimpulse-operator-cmd-p'
inspects the `interactive-form' of the command to be executed, but
fails when the form is byte-compiled. The problem is fixed by
allowing `vimpulse-memq-recursive' to search inside vector elements.

8 years agoBugfix: "E" does not move past lines in emacs-lisp-mode
Vegard Øye [Sun, 8 Aug 2010 18:59:42 +0000 (20:59 +0200)]
Bugfix: "E" does not move past lines in emacs-lisp-mode

When the cursor is at the last character at the line,
`vimpulse-end-of-Word' may not be able to detect the Word boundary
properly if it encounters a "fancy" syntactic class, such as the
"> endcomment" class encountered in Lisp comments. A call to `eolp'
fixes the problem.