Geany и $EDITOR: рабочее решение. А что записано в $EDITOR у вас?

Любые разговоры которые хоть как-то связаны с тематикой форума

Модератор: Модераторы разделов

Ответить


EDITOR=?

Ничего
2
33%
vim
4
67%
 
Всего голосов: 6

yoshakar
Сообщения: 259
ОС: Debian Stretch

Geany и $EDITOR: рабочее решение. А что записано в $EDITOR у вас?

Сообщение yoshakar »

Долгое время у меня в переменной окружения EDITOR была записана очень простая штука:

Код: Выделить всё

EDITOR=vim
Потом, в один из очередных приступов vim-оненавистничества я решил сделать так:

Код: Выделить всё

EDITOR=geany
Хотя известно, что это не очень хорошо — запихивать в EDITOR гуишный редактор — но если понимать последствия и быть готовым к ним — то очень даже можно.
К сожалению, такое простое решение быстро обнаружило неочевидные недостатки, и продолжало их обнаруживать и дальше. Прежде всего, git использует EDITOR для правки комментариев, и воспринимает завершение стартовавшего процесса как завершение редактирования. Но Geany (как и все guiшные редакторы) старается всегда обойтись по-возможности одним окном — и одним процессом — и если уже есть открытый редактор, то документ передаётся ему, а стартовый процесс незамедлительно завершается. Это решается просто (в случае Geany; в случае многих редакторов, как ни странно, это не решается совсем, но тем хуже для них):

Код: Выделить всё

EDITOR=geany -i
Долгое время я пользовался таким EDITORом, но со временем были замечены следующие проблемы: 1) нельзя вызвать на редактирование файл, первым символом имени которого является минус ('-'); 2) F4 в Midnight Commander'е игнорирует опцию '-i' и редактируемый файл окрывается то в новом окне (при этом MC находится в ожидании заверешния этого процесса), то, если таковое есть, в уже существующем (при этом если в этом окне открыт проект, то на файл применяются настройки проекта); 3) F4 в MC на файле проекта Geany (*.geany) приводит не к открытию этого файла как текстового, а к открытию его как проекта.

В результате устранения этих и некоторых других недостатков получился вот такой скрипт, которым я и хочу поделиться с миром:

Код:

#!/bin/sh if [ ".$1" = ".-3e509704-b9ba-11e7-94ed-9337b5773949" ]; then shift mc=NO else # Midnight Commander mc=YES fi if [ -z "$DISPLAY" ]; then /usr/bin/vim -- "$@" return fi if [ $# -eq 0 ]; then s="" while [ -e "untitled$s" ]; do s=$(($s+1)) done set -- "untitled$s" fi # Guardians for '-*', '*.geany', and ':*' files. n=$# i=0 for a in "$@"; do i=$(($i+1)) if [ $i -gt $n ]; then break fi if [ ".$(printf %.1s "$a")" = "./" ]; then xa="$a" else xa="./$a" fi s=0 while [ -e "$xa:0:$s" ]; do s=${s}0 done set -- "$@" "$xa:0:$s" done for i in {1..$n}; do shift done if [ "$mc" = "NO" ]; then /usr/bin/geany -i -c "$HOME/.config/geany-editor" "$@" else (/usr/bin/geany -c "$HOME/.config/geany-editor" "$@" > /dev/null 2>&1 &) fi

Используется он так:

Код: Выделить всё

EDITOR="editor_script -3e509704-b9ba-11e7-94ed-9337b5773949"
Опция нужна, чтобы отличить случаи, когда редактор вызван MC (он отбрасывает все опции из $EDITOR), от обычного, "штатного" использования ${EDITOR}а. (Ууид используется на всякий случай.)

Вот такая история. А что записано в $EDITOR у вас? (Варианты в опрос добавляю по запросу.)
Спасибо сказали:
Topper
Бывший модератор
Сообщения: 2087
Статус: Насильник бабушек-педофилок
ОС: Windows 10

Re: Geany и $EDITOR: рабочее решение. А что записано в $EDITOR у вас?

Сообщение Topper »

mcedit
Хрю.
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: Geany и $EDITOR: рабочее решение. А что записано в $EDITOR у вас?

Сообщение yoshakar »

Точно. Всё время в голове крутилось, и всё-таки ускользнуло.
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: Geany и $EDITOR: рабочее решение. А что записано в $EDITOR у вас?

Сообщение yoshakar »

(Для тех кто различает $EDITOR и $VISUAL: имейте в виду, что топик-стартер не различает.)
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: Geany и $EDITOR: рабочее решение. А что записано в $EDITOR у вас?

Сообщение yoshakar »

(Кстати, обновил скрипт: всё оказалось ещё хитрее, чем я думал, но решение вышло проще.)
Спасибо сказали:
Ответить