diff --git a/ls/.tags b/ls/.tags index e803830b..36804642 100644 --- a/ls/.tags +++ b/ls/.tags @@ -7,6 +7,7 @@ ft_ent_get_dirs src/ft_ent_get_dirs.c /^t_list *ft_ent_get_dirs(t_list **ent)$/ ft_ent_has_dir src/ft_ent_has_dir.c /^int ft_ent_has_dir(t_list *ent)$/ ft_ent_print src/lib_ent.c /^void ft_ent_print(t_list *ent, int *opts, t_lsdata/ ft_ent_sort src/lib_ent.c /^void ft_ent_sort(t_list **ent, int opts)$/ +ft_error_access src/lib_error.c /^void ft_error_access(char *s)$/ ft_error_dir src/lib_error.c /^void ft_error_dir(char *s)$/ ft_error_option src/lib_error.c /^void ft_error_option(char c)$/ ft_getopts src/lib_parse.c /^static int ft_getopts(char *str)$/ diff --git a/ls/Session.vim b/ls/Session.vim index bd1beca1..9f7cba2f 100644 --- a/ls/Session.vim +++ b/ls/Session.vim @@ -8,24 +8,24 @@ if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == '' let s:wipebuf = bufnr('%') endif set shortmess=aoO -badd +28 src/lib_ls_long2.c -badd +23 src/ft_ls_long.c +badd +116 src/lib_ls_long2.c +badd +26 src/ft_ls_long.c badd +1 includes/ft_ls.h badd +60 ~/.tmux.conf -badd +28 src/lib_ls_long.c +badd +29 src/lib_ls_long.c badd +35 src/lib_lsdata.c -badd +92 src/lib_parse.c +badd +34 src/lib_parse.c badd +22 libft/src/ft_printf/lib_pad.c badd +19 libft/src/ft_printf/lib_pad_sharp.c badd +14 libft/src/lst/ft_lst_filter.c badd +14 src/lib_dirents.c -badd +25 src/main.c -badd +43 src/ft_ls.c +badd +21 src/main.c +badd +30 src/ft_ls.c badd +23 src/ft_ent_free.c badd +1 Makefile -badd +22 src/lib_error.c +badd +21 src/lib_error.c badd +32 src/lib_dirs.c -badd +31 src/ft_dir_get_ents.c +badd +25 src/ft_dir_get_ents.c badd +69 libft/src/ft_printf/ft_printf.c badd +46 libft/includes/ft_printf.h badd +2 libft/src/printing/ft_putstr_fd.c @@ -44,7 +44,7 @@ badd +25 libft/src/lst/ft_lst_removeif.c badd +42 ~/.vimrc badd +12 src/ft_ent_has_dir.c badd +35 src/ft_ent_get_dirs.c -badd +18 src/lib_ent.c +badd +50 src/lib_ent.c badd +11 .Makefile.swp badd +18 ~/dotfiles/vim.symlink/plugins.vim badd +22 libft/src/str/ft_strsub.c @@ -65,8 +65,8 @@ set nosplitbelow set nosplitright wincmd t set winheight=1 winwidth=1 -exe 'vert 1resize ' . ((&columns * 90 + 90) / 181) -exe 'vert 2resize ' . ((&columns * 90 + 90) / 181) +exe 'vert 1resize ' . ((&columns * 98 + 98) / 196) +exe 'vert 2resize ' . ((&columns * 97 + 98) / 196) argglobal setlocal fdm=manual setlocal fde=0 @@ -77,12 +77,12 @@ setlocal fml=1 setlocal fdn=20 setlocal fen silent! normal! zE -let s:l = 61 - ((45 * winheight(0) + 40) / 81) +let s:l = 96 - ((77 * winheight(0) + 40) / 80) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt -61 -normal! 067l +96 +normal! 029l wincmd w argglobal edit Makefile @@ -95,17 +95,66 @@ setlocal fml=1 setlocal fdn=20 setlocal fen silent! normal! zE -let s:l = 17 - ((16 * winheight(0) + 40) / 81) +let s:l = 17 - ((0 * winheight(0) + 40) / 80) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt 17 normal! 011l wincmd w -exe 'vert 1resize ' . ((&columns * 90 + 90) / 181) -exe 'vert 2resize ' . ((&columns * 90 + 90) / 181) +exe 'vert 1resize ' . ((&columns * 98 + 98) / 196) +exe 'vert 2resize ' . ((&columns * 97 + 98) / 196) tabedit src/main.c set splitbelow splitright +wincmd _ | wincmd | +vsplit +1wincmd h +wincmd w +set nosplitbelow +set nosplitright +wincmd t +set winheight=1 winwidth=1 +exe 'vert 1resize ' . ((&columns * 98 + 98) / 196) +exe 'vert 2resize ' . ((&columns * 97 + 98) / 196) +argglobal +setlocal fdm=manual +setlocal fde=0 +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=0 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +silent! normal! zE +let s:l = 21 - ((20 * winheight(0) + 40) / 80) +if s:l < 1 | let s:l = 1 | endif +exe s:l +normal! zt +21 +normal! 01l +wincmd w +argglobal +edit src/ft_ls.c +setlocal fdm=manual +setlocal fde=0 +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=0 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +silent! normal! zE +let s:l = 31 - ((30 * winheight(0) + 40) / 80) +if s:l < 1 | let s:l = 1 | endif +exe s:l +normal! zt +31 +normal! 03l +wincmd w +exe 'vert 1resize ' . ((&columns * 98 + 98) / 196) +exe 'vert 2resize ' . ((&columns * 97 + 98) / 196) +tabedit src/ft_dir_get_ents.c +set splitbelow splitright set nosplitbelow set nosplitright wincmd t @@ -120,13 +169,13 @@ setlocal fml=1 setlocal fdn=20 setlocal fen silent! normal! zE -let s:l = 23 - ((22 * winheight(0) + 40) / 80) +let s:l = 24 - ((23 * winheight(0) + 40) / 80) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt -23 -normal! 01l -tabedit src/ft_ls.c +24 +normal! 0 +tabedit src/lib_ent.c set splitbelow splitright set nosplitbelow set nosplitright @@ -147,8 +196,8 @@ if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt 49 -normal! 026l -tabnext 2 +normal! 01l +tabnext 4 if exists('s:wipebuf') silent exe 'bwipe ' . s:wipebuf endif diff --git a/ls/includes/ft_ls.h b/ls/includes/ft_ls.h index d641cb77..5dc851af 100644 --- a/ls/includes/ft_ls.h +++ b/ls/includes/ft_ls.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/07 15:10:03 by jhalford #+# #+# */ -/* Updated: 2016/11/21 14:30:51 by jhalford ### ########.fr */ +/* Updated: 2016/11/22 16:55:20 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,13 +16,15 @@ # define LS_MSG_ILLEGAL_OPT "ft_ls: illegal option -- %c\n" # define LS_MSG_USAGE "usage: ls [-%s] [file ...]\n" # define LS_MSG_FILE_ERR "ls: %s: no such file or directory\n" +# define LS_MSG_ACC_ERR "ls: %s: Permission Denied\n" # define OPTS_LL 0x0001 # define OPTS_LA 0x0002 # define OPTS_LR 0x0004 # define OPTS_UR 0x0008 # define OPTS_LT 0x0010 -# define OPTS_HEAD 0x0020 +# define OPTS_ONE 0x0020 +# define OPTS_HEAD 0x1000 # include "libft.h" # include @@ -91,6 +93,7 @@ int ft_ls_long_lnk(t_lsdata *data); void ft_error_option(char c); void ft_error_dir(char *s); +void ft_error_access(char *s); void ft_ent_free(void *ptr, size_t size); #endif diff --git a/ls/src/ft_dir_get_ents.c b/ls/src/ft_dir_get_ents.c index 668f4cc3..183ff1d4 100644 --- a/ls/src/ft_dir_get_ents.c +++ b/ls/src/ft_dir_get_ents.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/07 14:58:49 by jhalford #+# #+# */ -/* Updated: 2016/11/21 14:23:30 by jhalford ### ########.fr */ +/* Updated: 2016/11/22 17:11:46 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,7 +20,11 @@ t_list *ft_dir_get_ents(t_lsdata *topdir) DIR *stream; ent = NULL; - stream = opendir(topdir->path); + if (!(stream = opendir(topdir->path))) + { + ft_error_access(topdir->path); + return (NULL); + } while ((dirent = readdir(stream))) { data.path = ft_str3join(topdir->path, "/", dirent->d_name); diff --git a/ls/src/ft_ls.c b/ls/src/ft_ls.c index e39da276..f0b00d6d 100644 --- a/ls/src/ft_ls.c +++ b/ls/src/ft_ls.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/07 14:57:21 by jhalford #+# #+# */ -/* Updated: 2016/11/21 14:44:54 by jhalford ### ########.fr */ +/* Updated: 2016/11/22 17:11:40 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/ls/src/ft_ls_long.c b/ls/src/ft_ls_long.c index 1a96edd6..77542eff 100644 --- a/ls/src/ft_ls_long.c +++ b/ls/src/ft_ls_long.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/07 14:58:05 by jhalford #+# #+# */ -/* Updated: 2016/11/21 14:25:24 by jhalford ### ########.fr */ +/* Updated: 2016/11/22 16:07:01 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/ls/src/lib_ent.c b/ls/src/lib_ent.c index 3ced4f94..8cb80412 100644 --- a/ls/src/lib_ent.c +++ b/ls/src/lib_ent.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/07 15:00:05 by jhalford #+# #+# */ -/* Updated: 2016/11/21 18:23:05 by jhalford ### ########.fr */ +/* Updated: 2016/11/22 17:12:03 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -47,6 +47,10 @@ void ft_ent_print(t_list *ent, int *opts, t_lsdata *topdir, t_list *nextdir) else ft_ls_short(ent); } - if (ent && (nextdir || ((*opts & OPTS_UR) && ft_ent_has_dir(ent)))) + /* else */ + /* ft_error_access(topdir->path); */ + if ((!topdir && nextdir && ent) + || (topdir && nextdir) + || (ent && ((*opts & OPTS_UR) && ft_ent_has_dir(ent)))) ft_putchar('\n'); } diff --git a/ls/src/lib_error.c b/ls/src/lib_error.c index 381d55b5..bec542f6 100644 --- a/ls/src/lib_error.c +++ b/ls/src/lib_error.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/07 14:57:43 by jhalford #+# #+# */ -/* Updated: 2016/11/21 13:21:32 by jhalford ### ########.fr */ +/* Updated: 2016/11/22 16:58:14 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,7 +18,12 @@ void ft_error_option(char c) ft_dprintf(2, LS_MSG_USAGE, LS_LEGAL_OPTS); } +void ft_error_access(char *s) +{ + ft_dprintf(2, LS_MSG_ACC_ERR, s); +} + void ft_error_dir(char *s) { - ft_printf(LS_MSG_FILE_ERR, s); + ft_dprintf(2, LS_MSG_FILE_ERR, s); } diff --git a/ls/src/lib_ls_long.c b/ls/src/lib_ls_long.c index c4586250..4526243f 100644 --- a/ls/src/lib_ls_long.c +++ b/ls/src/lib_ls_long.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/07 14:59:51 by jhalford #+# #+# */ -/* Updated: 2016/11/21 17:22:25 by jhalford ### ########.fr */ +/* Updated: 2016/11/22 16:07:09 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/ls/src/lib_ls_long2.c b/ls/src/lib_ls_long2.c index 9653caf3..c30b63b2 100644 --- a/ls/src/lib_ls_long2.c +++ b/ls/src/lib_ls_long2.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/07 15:01:01 by jhalford #+# #+# */ -/* Updated: 2016/11/21 17:54:05 by jhalford ### ########.fr */ +/* Updated: 2016/11/22 16:19:55 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -113,6 +113,7 @@ int ft_ls_long_pads(t_list *ent, t_pads *pads) FT_MAX_WR(pads->major, (int)ft_ilen(major(stat.st_rdev))); } } - pads->size = FT_MAX(pads->size, pads->minor + pads->major + 3); + pads->size = FT_MAX(pads->size, pads->minor ? + pads->minor + pads->major + 3 : pads->size); return (0); } diff --git a/ls/src/lib_parse.c b/ls/src/lib_parse.c index 74b9f56f..11d36c69 100644 --- a/ls/src/lib_parse.c +++ b/ls/src/lib_parse.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/07 15:02:46 by jhalford #+# #+# */ -/* Updated: 2016/11/21 14:39:25 by jhalford ### ########.fr */ +/* Updated: 2016/11/22 17:01:37 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,6 @@ static void ft_ls_parse_files(int ac, char **av, t_list **dir, t_list **ent) { - DIR *stream; t_lsdata data; int i; @@ -28,11 +27,8 @@ static void ft_ls_parse_files(int ac, char **av, t_list **dir, t_list **ent) continue ; } data.path = ft_strdup(av[i]); - if ((stream = opendir(data.path))) - { + if (S_ISDIR(data.stat.st_mode)) ft_lstadd(dir, ft_lstnew(&data, sizeof(data))); - closedir(stream); - } else ft_lstadd(ent, ft_lstnew(&data, sizeof(data))); } @@ -49,6 +45,8 @@ static int ft_getopts(char *str) { if (str[i] == 'l') opts |= OPTS_LL; + else if (str[i] == '1') + opts |= OPTS_ONE; else if (str[i] == 'a') opts |= OPTS_LA; else if (str[i] == 't') @@ -75,7 +73,16 @@ static int ft_ls_parse_options(int ac, char **av, int *opts) while (++i < ac) { if (av[i][0] == '-') + { + if (!av[i][1]) + break ; + if (av[i][1] == '-' && !av[i][2]) + { + i++; + break ; + } *opts |= ft_getopts(av[i] + 1); + } else break ; } diff --git a/ls/src/main.c b/ls/src/main.c index fbba9f17..9210898b 100644 --- a/ls/src/main.c +++ b/ls/src/main.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/07 15:00:15 by jhalford #+# #+# */ -/* Updated: 2016/11/21 18:23:52 by jhalford ### ########.fr */ +/* Updated: 2016/11/22 16:47:59 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */