Mercurial > vim
comparison src/channel.c @ 8463:508504ca52ac v7.4.1522
commit https://github.com/vim/vim/commit/6ff02c96519946716069f05c62849986a706033b
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Mar 8 20:12:44 2016 +0100
patch 7.4.1522
Problem: Cannot write channel err to a buffer.
Solution: Implement it.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 08 Mar 2016 20:15:04 +0100 |
parents | fed4e19bd884 |
children | 86a327403fb0 |
comparison
equal
deleted
inserted
replaced
8462:9b1f271c9769 | 8463:508504ca52ac |
---|---|
869 | 869 |
870 /* | 870 /* |
871 * Find a buffer matching "name" or create a new one. | 871 * Find a buffer matching "name" or create a new one. |
872 */ | 872 */ |
873 static buf_T * | 873 static buf_T * |
874 find_buffer(char_u *name) | 874 find_buffer(char_u *name, int err) |
875 { | 875 { |
876 buf_T *buf = NULL; | 876 buf_T *buf = NULL; |
877 buf_T *save_curbuf = curbuf; | 877 buf_T *save_curbuf = curbuf; |
878 | 878 |
879 if (name != NULL && *name != NUL) | 879 if (name != NULL && *name != NUL) |
888 set_option_value((char_u *)"bh", 0L, (char_u *)"hide", OPT_LOCAL); | 888 set_option_value((char_u *)"bh", 0L, (char_u *)"hide", OPT_LOCAL); |
889 #endif | 889 #endif |
890 curbuf = buf; | 890 curbuf = buf; |
891 if (curbuf->b_ml.ml_mfp == NULL) | 891 if (curbuf->b_ml.ml_mfp == NULL) |
892 ml_open(curbuf); | 892 ml_open(curbuf); |
893 ml_replace(1, (char_u *)"Reading from channel output...", TRUE); | 893 ml_replace(1, (char_u *)(err ? "Reading from channel error..." |
894 : "Reading from channel output..."), TRUE); | |
894 changed_bytes(1, 0); | 895 changed_bytes(1, 0); |
895 curbuf = save_curbuf; | 896 curbuf = save_curbuf; |
896 } | 897 } |
897 | 898 |
898 return buf; | 899 return buf; |
966 { | 967 { |
967 /* writing output to a buffer. Default mode is NL. */ | 968 /* writing output to a buffer. Default mode is NL. */ |
968 if (!(opt->jo_set & JO_OUT_MODE)) | 969 if (!(opt->jo_set & JO_OUT_MODE)) |
969 channel->ch_part[PART_OUT].ch_mode = MODE_NL; | 970 channel->ch_part[PART_OUT].ch_mode = MODE_NL; |
970 channel->ch_part[PART_OUT].ch_buffer = | 971 channel->ch_part[PART_OUT].ch_buffer = |
971 find_buffer(opt->jo_io_name[PART_OUT]); | 972 find_buffer(opt->jo_io_name[PART_OUT], FALSE); |
972 ch_logs(channel, "writing to buffer '%s'", | 973 ch_logs(channel, "writing out to buffer '%s'", |
973 (char *)channel->ch_part[PART_OUT].ch_buffer->b_ffname); | 974 (char *)channel->ch_part[PART_OUT].ch_buffer->b_ffname); |
975 } | |
976 | |
977 if ((opt->jo_set & JO_ERR_IO) && (opt->jo_io[PART_ERR] == JIO_BUFFER | |
978 || (opt->jo_io[PART_ERR] == JIO_OUT && (opt->jo_set & JO_OUT_IO) | |
979 && opt->jo_io[PART_OUT] == JIO_BUFFER))) | |
980 { | |
981 /* writing err to a buffer. Default mode is NL. */ | |
982 if (!(opt->jo_set & JO_ERR_MODE)) | |
983 channel->ch_part[PART_ERR].ch_mode = MODE_NL; | |
984 if (opt->jo_io[PART_ERR] == JIO_OUT) | |
985 channel->ch_part[PART_ERR].ch_buffer = | |
986 channel->ch_part[PART_OUT].ch_buffer; | |
987 else | |
988 channel->ch_part[PART_ERR].ch_buffer = | |
989 find_buffer(opt->jo_io_name[PART_ERR], TRUE); | |
990 ch_logs(channel, "writing err to buffer '%s'", | |
991 (char *)channel->ch_part[PART_ERR].ch_buffer->b_ffname); | |
974 } | 992 } |
975 } | 993 } |
976 | 994 |
977 /* | 995 /* |
978 * Set the callback for "channel"/"part" for the response with "id". | 996 * Set the callback for "channel"/"part" for the response with "id". |