mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
open_buffer(): Do BufEnter
for directories.
Abuse NOTDONE to give some nuance to the return value of readfile(), so that open_buffer() can distinguish between "failed, lol" and "failed because the path is a directory". Before this change, Vim *already* creates a new buffer when a directory is edited. So there is no reason it should not raise BufEnter, that was an implementation detail of ye olde readfile(). Most of the changes in this commit merely preserve the old semantics. The "implicit" change that we actually are interested in, is this line in `open_buffer()`, where `retval` being non-FAIL allows EVENT_BUFENTER to be applied: apply_autocmds_retval(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf, &retval); References https://github.com/vim/vim/issues/1353
This commit is contained in:
parent
50d0d89129
commit
42c922b32c
@ -193,12 +193,15 @@ open_buffer (
|
||||
* it can be changed there. */
|
||||
if (!readonlymode && !bufempty())
|
||||
changed();
|
||||
else if (retval != FAIL)
|
||||
else if (retval == OK) {
|
||||
unchanged(curbuf, FALSE);
|
||||
}
|
||||
if (retval == OK) {
|
||||
apply_autocmds_retval(EVENT_STDINREADPOST, NULL, NULL, FALSE,
|
||||
curbuf, &retval);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* if first time loading this buffer, init b_chartab[] */
|
||||
if (curbuf->b_flags & BF_NEVERLOADED) {
|
||||
@ -219,7 +222,7 @@ open_buffer (
|
||||
|| (aborting() && vim_strchr(p_cpo, CPO_INTMOD) != NULL)
|
||||
)
|
||||
changed();
|
||||
else if (retval != FAIL && !read_stdin)
|
||||
else if (retval == OK && !read_stdin)
|
||||
unchanged(curbuf, FALSE);
|
||||
save_file_ff(curbuf); /* keep this fileformat */
|
||||
|
||||
|
@ -1193,8 +1193,8 @@ static void do_filter(
|
||||
|
||||
if (do_out) {
|
||||
if (otmp != NULL) {
|
||||
if (readfile(otmp, NULL, line2, (linenr_T)0, (linenr_T)MAXLNUM,
|
||||
eap, READ_FILTER) == FAIL) {
|
||||
if (readfile(otmp, NULL, line2, (linenr_T)0, (linenr_T)MAXLNUM, eap,
|
||||
READ_FILTER) != OK) {
|
||||
if (!aborting()) {
|
||||
msg_putchar('\n');
|
||||
EMSG2(_(e_notread), otmp);
|
||||
|
@ -6910,9 +6910,10 @@ static void ex_read(exarg_T *eap)
|
||||
eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
|
||||
|
||||
}
|
||||
if (i == FAIL) {
|
||||
if (!aborting())
|
||||
if (i != OK) {
|
||||
if (!aborting()) {
|
||||
EMSG2(_(e_notopen), eap->arg);
|
||||
}
|
||||
} else {
|
||||
if (empty && exmode_active) {
|
||||
/* Delete the empty line that remains. Historically ex does
|
||||
|
@ -249,7 +249,7 @@ void filemess(buf_T *buf, char_u *name, char_u *s, int attr)
|
||||
* READ_DUMMY read into a dummy buffer (to check if file contents changed)
|
||||
* READ_KEEP_UNDO don't clear undo info or read it from a file
|
||||
*
|
||||
* return FAIL for failure, OK otherwise
|
||||
* return FAIL for failure, NOTDONE for directory (failure), or OK
|
||||
*/
|
||||
int
|
||||
readfile (
|
||||
@ -258,7 +258,7 @@ readfile (
|
||||
linenr_T from,
|
||||
linenr_T lines_to_skip,
|
||||
linenr_T lines_to_read,
|
||||
exarg_T *eap, /* can be NULL! */
|
||||
exarg_T *eap, // can be NULL!
|
||||
int flags
|
||||
)
|
||||
{
|
||||
@ -444,13 +444,14 @@ readfile (
|
||||
// ... or a character special file named /dev/fd/<n>
|
||||
# endif
|
||||
) {
|
||||
if (S_ISDIR(perm))
|
||||
if (S_ISDIR(perm)) {
|
||||
filemess(curbuf, fname, (char_u *)_("is a directory"), 0);
|
||||
else
|
||||
} else {
|
||||
filemess(curbuf, fname, (char_u *)_("is not a file"), 0);
|
||||
}
|
||||
msg_end();
|
||||
msg_scroll = msg_save;
|
||||
return FAIL;
|
||||
return S_ISDIR(perm) ? NOTDONE : FAIL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -5108,7 +5109,7 @@ void buf_reload(buf_T *buf, int orig_mode)
|
||||
keep_filetype = TRUE; /* don't detect 'filetype' */
|
||||
if (readfile(buf->b_ffname, buf->b_fname, (linenr_T)0,
|
||||
(linenr_T)0,
|
||||
(linenr_T)MAXLNUM, &ea, flags) == FAIL) {
|
||||
(linenr_T)MAXLNUM, &ea, flags) != OK) {
|
||||
if (!aborting())
|
||||
EMSG2(_("E321: Could not reload \"%s\""), buf->b_fname);
|
||||
if (savebuf != NULL && buf_valid(savebuf) && buf == curbuf) {
|
||||
|
@ -1064,7 +1064,7 @@ void ml_recover(void)
|
||||
line_count = pp->pb_pointer[idx].pe_line_count;
|
||||
if (readfile(curbuf->b_ffname, NULL, lnum,
|
||||
pp->pb_pointer[idx].pe_old_lnum - 1,
|
||||
line_count, NULL, 0) == FAIL)
|
||||
line_count, NULL, 0) != OK)
|
||||
cannot_open = TRUE;
|
||||
else
|
||||
lnum += line_count;
|
||||
|
Loading…
Reference in New Issue
Block a user